Print PDF files in batches to physical or network printers on Windows servers — via ActiveX, DLL, or command line.
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016 / 2019/2022 Server
and
Docker / Citrix / Wine
Total PDF Printer X is a server-side SDK that prints PDF files in batches to physical or network printers on Windows servers — headlessly, without opening Acrobat, Foxit, or any PDF viewer in the print pipeline. It runs silent: no GUI, no dialogs, no popups. Total PDF Printer X ships with both a command-line binary and an ActiveX/COM interface, so it drops into ASP, PHP, .NET, Python, Ruby, Java, and any other COM-aware backend. Note that the destination argument is a printer name, not a file path — output goes to physical or network printers, not to disk.
Total PDF Printer X covers the full server-printing scenario:
-sort)
-rn), multiple copies (-NumCopy), duplex modes (-d vertical for long-edge, -d horizontal for short-edge)
-ps A4, Letter, Legal, etc.) and color mode (-cl monochrome) per job
-list for unattended worker patterns
Typical deployment: an FTP drop or ERP export folder receives PDFs (invoices, packing slips, shipping labels, court filings); Folder Monitor catches each new file and invokes Total PDF Printer X with a printer name and flags; the file lands on paper with no operator intervention. Tens of thousands of pages per day per print server is normal.
Note that Total PDF Printer X runs on Windows servers only. Try it for free (30 days trial period, no limitations) and find out that it is really worth its money.
(includes 30 day FREE trial)
(only $450.00)
string src = @"C:\test\test1.pdf";
string printer = "HP LaserJet M404";
var prn = new PDFPrinterX();
prn.Print(src, printer, "-NumCopy 2 -d vertical -ps A4 -log c:\\test\\Printer.log");
if (!string.IsNullOrEmpty(prn.ErrorMessage))
throw new Exception(prn.ErrorMessage);
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Printer\PDFPrinterX.exe";
sbLogs.AppendLine(executablePath + "...");
var srcPath = $@"{assemblyDirectoryPath}\src\sample.pdf";
var printerName = "HP LaserJet M404";
startInfo.FileName = executablePath;
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"\"{srcPath}\" -p \"{printerName}\"";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
sbLogs.AppendLine("Print job submitted.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("PDFPrinter.PDFPrinterX")
C.Print "c:\test\source.pdf", "HP LaserJet M404", "-NumCopy 2 -ps A4 -log c:\test\PrintPDF.log"
Response.Write C.ErrorMessage
set C = nothing
$src = "C:\\test\\test.pdf";
$printer = "My Printer Name";
$c = new COM("PDFPrinter.PDFPrinterX");
$c->Print($src, $printer, "-ps A4 -NumCopy 2");
if ($c->ErrorMessage == "") echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('PDFPrinter.PDFPrinterX')
src = "C:\\test\\test.pdf"
printer = "HP LaserJet M404"
c.Print(src, printer, "-NumCopy 2 -d vertical -log c:\\test\\PDFPrinter.log")
if c.ErrorMessage != ""
puts c.ErrorMessage
end
import win32com.client
c = win32com.client.Dispatch("PDFPrinter.PDFPrinterX")
src = "C:\\test\\test.pdf"
printer = "HP LaserJet M404"
c.Print(src, printer, "-NumCopy 2 -d vertical -log c:\\test\\PDFPrinter.log")
if c.ErrorMessage:
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c := CreateOleObject('PDFPrinter.PDFPrinterX');
c.Print('c:\test\source.pdf', 'HP LaserJet M404', '-NumCopy 2 -ps A4 -log c:\test\PDFPrinter.log');
if c.ErrorMessage <> '' then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("PDFPrinter.PDFPrinterX");
c.Print("C:\\test\\source.pdf", "HP LaserJet M404", "-NumCopy 2 -ps A4");
if (c.ErrorMessage != "")
alert(c.ErrorMessage)
use Win32::OLE; my $src = "C:\\test\\test1.pdf"; my $printer = "HP LaserJet M404"; my $c = CreateObject Win32::OLE 'PDFPrinter.PDFPrinterX'; $c->Print($src, $printer, "-NumCopy 2 -log c:\\test\\PDFPrinter.log"); print $c->ErrorMessage if $c->ErrorMessage ne "";
"Scanprint Logistics is a warehouse, where we store and distribute products for our customers. We are using Total PDF Printer X together with Total Folder Monitor to automate printing of PDF files from our customers and our ERP system. Our customers upload PDF files (e.g. invoices) to our FTP server, and then Total PDF Printer X prints them out, so we can include them with the goods we send out."
Frants Erikstrup
www.scanprint.dk
"After installing the version of Total PDF Printer and Total PDF Printer X, no issues were found, so my feedback is very positive. We are just starting the use of this new version (we already used a previous version) and in case we have questions I'll take care to send you a message. Thanks and best regards."
Silverio Pattuelli
Ravenna, Italy, www.nobleagri.com
"Twelve warehouse sites, each with its own label printer and packing-slip printer. Total PDF Printer X plus Folder Monitor: an inbox folder per printer, the ERP drops PDFs in, paper appears at the right station within seconds. -p picks the printer by friendly name; -t puts the order number in the Windows queue so operators can find a stuck job. We replaced a homemade Acrobat-automation pipeline that broke every time Acrobat updated. Five years on PDF Printer X, no failures we can blame on the converter."
Marcin Z.
Senior IT Engineer at a 3PL warehouse network
"Bundled Total PDF Printer X into our medical-records product under the Royalty-Free License. The one-time per-project fee was a fraction of what Aspose.PDF or PDFTron wanted for redistribution rights on the print path. Our installer ships and registers the ActiveX, our app calls Print() directly, end users see only our UI. The 32-bit ActiveX limitation cost us a couple of days of pipeline rework, but support was responsive when we asked about workarounds."
Sasha P.
Independent Software Vendor
"Court filings arrive as PDF; we print them with case-number watermarks and page numbers for the physical case file. Separator sheets between documents keep the daily stack organized for the records clerk. -rn lets us print only the signature pages when that's all we need. Deterministic across runs, which matters for audit. The CLI is stable, well-documented, and the -xmllog flag gives us machine-readable per-job output for our audit trail."
Eleni V.
Lead Developer at a court-records office
Total PDF Printer X ships with PDFPrinterX.exe, a console binary you can drive from scripts, scheduled tasks, print-server hooks, or any backend service that needs paper output. The flag set matches the GUI PDFPrinter.exe; for the full reference see the command-line documentation. Note that the destination argument is a printer name, not a file path — output goes to physical or network printers, not to disk.
The smallest possible call. Omit the printer name and the document goes to whatever Windows considers the current default printer.
PDFPrinterX.exe "C:\docs\invoice.pdf"
-p accepts the friendly printer name as it appears in the Windows Printers panel, or any unique fragment of it.
PDFPrinterX.exe "C:\docs\invoice.pdf" -p "HP LaserJet M404"
Partial matches work too — -p HP will pick the first printer whose name contains "HP".
For long PDFs where you need a few sheets — cover page, signature page, a single chapter — use -rn to limit the printed range.
PDFPrinterX.exe "C:\docs\contract.pdf" -p "Office Printer" -rn "1-3,7,12-14"
Typical office case: hand out N copies of the same document, both sides, A4. -NumCopy sets the copy count, -d vertical enables long-edge duplex, -ps A4 forces paper size.
PDFPrinterX.exe "C:\docs\handout.pdf" -p "HP LaserJet M404" -NumCopy 25 -d vertical -ps A4
Point the binary at a wildcard and it prints each matching file as a separate job. Useful for nightly batches of generated reports.
PDFPrinterX.exe "C:\reports\daily\*.pdf" -p "Reports Printer" -sort name
Add -Recurse to include subfolders, or -combine to send the whole batch as one merged print job instead of one job per file.
Shared printers on a Windows print server are addressed by their share name. Pass the UNC path verbatim to -p.
PDFPrinterX.exe "C:\docs\report.pdf" -p "\\PRINTSRV01\Accounting-HP" -t "Q3 Report" -cl monochrome
-t sets the job title shown in the Windows print queue, which makes the job easy to find or cancel.
When an external worker writes a queue file and the printer consumes it, you don't want the file paths in the command line itself. -list reads file masks (one per line) from a plain text file.
PDFPrinterX.exe -list "C:\queues\print-queue.txt" -p "Office Printer" -fo
-fo forces processing without prompts; combine with -do if the queue worker also expects originals to be deleted after a successful print.
Once PDFPrinterX.exe runs as a service or scheduled task, the log is the only signal of what actually happened. -verbosity detail writes one line per file; -logmode append keeps history across runs; -xmllog emits a parser-friendly companion file.
PDFPrinterX.exe "C:\spool\*.pdf" -p "Warehouse Label Printer" -log "C:\logs\pdfprint.log" -verbosity detail -logmode append -xmllog "C:\logs\pdfprint.xml"
IT teams that automate batch PDF printing on Windows servers via command line and ActiveX
Print PDF files on servers without any user interaction
IT departments deploy Total PDF PrinterX on Windows servers to print incoming PDF documents automatically. The application runs silently with no GUI or pop-up messages, printing batches of PDFs via command line on schedule — ideal for invoices, reports, and documents that need to be printed as soon as they arrive.
Batch-print thousands of PDF invoices in date order
Accounting departments print daily batches of PDF invoices, statements, and financial reports sorted by file date or time. Total PDF PrinterX adds page numbers or company watermarks to each sheet, and separator pages between documents keep the printed stack organized for distribution or mailing.
Add PDF printing to your web app via ActiveX
Software developers integrate Total PDF PrinterX via ActiveX into web applications, ERP systems, and document management platforms. Users trigger print jobs from a browser, and the server handles printing silently — no desktop software or user intervention required on the server side.
Auto-print packing slips and shipping labels from a server
Warehouses and distribution centers auto-print PDF packing slips, shipping labels, and delivery notes as orders flow in. Auto-rotate and fit-to-page options handle different document sizes without manual adjustment, and duplex-safe separator sheets prevent documents from bleeding across double-sided pages.
Print case files with watermarks and page numbering
Government agencies and legal departments batch-print PDF filings, case documents, and regulatory submissions on dedicated print servers. Add text watermarks with confidentiality notices or copyright information to every page, and stamp page numbers for organized physical records — all hands-free via command line.
Updated Fri, 01 May 2026
(only $450.00)
-p: -p "HP LaserJet M404". Partial matches work too, so -p HP picks the first printer whose name contains "HP". For shared printers on a Windows print server use the UNC share path: -p "\\PRINTSRV01\Accounting-HP". Omit -p to print to the current Windows default printer.new COM("PDFPrinter.PDFPrinterX") in PHP, new PDFPrinterX() in .NET, win32com.client.Dispatch("PDFPrinter.PDFPrinterX") in Python, WIN32OLE.new('PDFPrinter.PDFPrinterX') in Ruby. Note the COM method name is Print, not Convert — the destination is a printer name, not a file path. Alternatively, the PDFPrinterX.exe command-line binary can be invoked from any process, scheduler, or shell script.-rn "1-3,7,12-14" for arbitrary page ranges. -NumCopy 25 sets the copy count. -d vertical enables long-edge duplex (the typical "book" binding); -d horizontal is short-edge duplex ("calendar" binding). -ps A4/Letter/Legal forces paper size; -cl monochrome forces black-and-white output even on a colour printer.PDFPrinterX.exe with the printer name and flags you configure. This is the canonical setup for warehouses (auto-print packing slips), accounting (auto-print invoices), and ERP integrations (auto-print exports). The -list queue-file flag covers worker-driven pipelines where another process writes the print queue.Updated Fri, 01 May 2026
(only $450.00)
Download free trial and convert your files in minutes.
No credit card or email required.