Text  Print Server - User Guide

Overview
Text print server is a virtual printer running as a windows server to capture the text output.
More than 1 printer can be specified either running on different IP addresses (alias or adapters) and ports. The ports can be RAW or LPD.
Once a print job is captured it is passed onto Print Processors. These processors will run in a specified order and could convert the job or redirect the job onto another printer.
Profile example 
Profile processors
Processor example

Installation
Download the latest version from ABit Product Downloads
Register application by providing activation key to software@abitsystems.com.au

Processors
Print processors allow manipulation of a print job and its output.  The processors are a plugin system so they can be enabled and modified for each printer instance.
Print processors are executed in the run order specified.
LineReportToCSV
Take a line report and generate CSV from it. The processor will attempt to detect if the data is in a vertical or horizontal format.
Enabled
Yes or No
The processor will be skipped if not enabled
Run order
Numeric value
The order the processor will be executed
Vertical fieldname column width
For vertical reports the width of the column. -1 to auto detect.
If a report is in a vertical format.
eg
 
Header
Field1     : Data
Field2     : Data
Field1     : Data
Field2     : Data
 The width is the space between Field1 and :
Field multivalue separator
Default is |
If CSV data is detected in the field the separator is modified
Autofill index position
The index value of the report. 
 
Header
Field 1          Field 2
================ =======
Record 1         Data 1
                 Data 2
Record 2         Data 1
Record 3         Data 1
Line 5 in this example Record 1 is assumed.
 
Default autofill value for fields
Fields that are detected as blank because they would contain the index field are automatically filled in
Output filename
The filename generated default %sourcefilefolder%%title%_%date%_%time%_%profilename%.csv
CSV filename generated
Change output filename
The filename passed to the next processor is the CSV file
Redirect
The redirect processor allows the print job to be sent to a printer
Enabled
Yes or No
The processor will be skipped if not enabled
Run order
Numeric value
The order the processor will be executed
Printer name
Windows printer name
The name of the printer to redirect the data
Printer type
Send the job and text or raw
PDF
PDF will create a PDF from the text data. This could be the original text or modified data from a processor like LineReportToCSV
Enabled
Yes or No
The processor will be skipped if not enabled
Run order
Numeric value
The order the processor will be executed
Change output filename
Yes or No (Default No)
The filename that is passed to the next processor will be the PDF and not the original text file
Page orientation 
Landscape or Portrait
Lines per page
New page at specific line count. Use 0 to check for form feeds in the data
Skip empty pages
Don't create a PDF page for empty pages
Font size
Font size used in PDF
Font
Font used in PDF
Skip pages
Option to exclude certain pages from PDF generation
Output filename
The PDF filename generated
SMTP
Send email with custom email addresses, subject, body and files. 
Enabled
Yes or No
The processor will be skipped if not enabled
Run order
Numeric value
The order the processor will be executed
Server
SMTP server hostname
Port
SMTP server port
From name
Name email is sent from
From address
Email address email is sent from
Recipients
Email recipients
See metadata
Subject
Email subject
See metadata
Authentication type
SMTP authentication type (None, Default or SASL)
Username
SMTP username
Password
SMTP password
Body
Email body
See metadata
Attachments
A list of files to attach
Default is %inputfilename%. This could also include direct file system files if required. eg C:\Users\Public\Documents\TermsAndConditions.pdf. See metadata
Reply to name
The name used if recipient select reply
Reply to address
The email address uses if a recipient selects reply
HTML body
The body content contains HTML
Read reciept
Request a read receipt
SSL version
1.2 is generally required
TLS
None, Implicit, Required, Explicit
Sharepoint
Upload files to a sharepoint site
An Entra App registration is required
Ensure application permission Sites.Manage.All is granted
 
Enabled
Yes or No
The processor will be skipped if not enabled
Run order
Numeric value
The order the processor will be executed
Client id 
Entra client id
Tenant id
Entra tenant id
Client secret
Entra client secret
Site
Select sharepoint site
Drive
Select sharepoint drive
Folder path
Optional folder path
Files
List of files to upload. 
See metadata

Metadata
As a print job flows with processors metadata is all passed along. This can be used for settings in the processor or modified along with way to be used in other processors. 
Example report
Meta data will start off with simple details like filename and header
{
    "started": "2025-07-22T09:43:41.964+08:00",
    "filename": "C:\\Users\\tristan\\Desktop\\20250721_153435_RAW_172.20.98.1.txt",
    "header": "                REPORT 1  -   Page # 1",
    "headercleaned": "REPORT 1 - Page # 1",
}
A processor could then manipulate that data in a pre-process or post-process javascript
This example analyzes the header and returns back to new values in the metadata of reportTitle and emailAddresses. 
function getReportDetails(header) {
if (header.includes("REPORT 1")) {
return {
reportTitle: "Report 1",
emailAddresses: "fred.bloggs@abitsystems.com.au"
};
}
if (header.includes("REPORT 2")) {
return {
reportTitle: "Report 2",
emailAddresses: "reports@abitsystems.com.au"
};
}
return {
reportTitle: header.replace(/\s+/g, ' ').trim(),
emailAddresses: "software@abitsystems.com.au"
};
}
function execute(val) {
var jsonData = JSON.parse(val);
if (jsonData.header) {
var reportDetails = getReportDetails(jsonData.header);
jsonData.reportTitle = reportDetails.reportTitle;
jsonData.emailAddresses = reportDetails.emailAddresses;
}
return JSON.stringify(jsonData, null, 2);
}
Because this is Pre-processed the processor can make use of these values immediately in it's own configuration as below. Variables that are from metadata are always prefixed with %metadata_{variablename}%
Now the metadata will reflect the following and is passed onto the next processor. 
{
    "started": "2025-07-22T09:43:41.964+08:00",
    "filename": "C:\\Users\\tristan.ABIT\\Desktop\\20250721_153435_RAW_172.20.98.1.txt",
    "header": "                REPORT 1  -   Page # 1",
    "headercleaned": "REPORT 1 - Page # 1",
    "reportTitle": "Report 1",
    "emailAddresses": "fred.bloggs@abitsystems.com.au",
    "smtpResult": "OK"
}