TotalPDFPrinterX:使用ActiveX驱动的服务器批量PDF打印机简化您的打印任务。
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016/2019/2022 Server
and
Docker/Citrix/Wine
Total PDF Printer X 是一款服务器端 SDK,能够在 Windows 服务器上将 PDF 文件批量打印到物理打印机或网络打印机 — 无头运行,无需在打印流程中启动 Acrobat、Foxit 或任何 PDF 阅读器。它静默运行:无 GUI、无对话框、无弹窗。Total PDF Printer X 同时提供命令行程序和 ActiveX/COM 接口,因此可以无缝集成到 ASP、PHP、.NET、Python、Ruby、Java 以及其他任何支持 COM 的后端。请注意,目标参数是打印机名称,而非文件路径 — 输出送往物理或网络打印机,而不是磁盘。
Total PDF Printer X 涵盖完整的服务器打印场景:
-sort)
-rn)、多份副本(-NumCopy)、双面模式(-d vertical 表示长边装订,-d horizontal 表示短边装订)
-ps A4、Letter、Legal 等)和颜色模式(-cl monochrome)
-list 进行队列文件处理,适用于无人值守的工作模式
典型部署:FTP 投放点或 ERP 导出文件夹接收 PDF(发票、装箱单、运输标签、法庭文件);Folder Monitor 捕获每个新文件并使用打印机名称和参数调用 Total PDF Printer X;文件落到纸面,无需操作员干预。每台打印服务器每天处理数万页是常态。
请注意,Total PDF Printer X 仅在 Windows 服务器上运行。免费试用(30 天试用期,无任何限制),亲身体验它物有所值。
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 是一家仓库公司,我们为客户存储和分发产品。我们使用 Total PDF Printer X 配合 Total Folder Monitor 来自动打印来自客户和我们 ERP 系统的 PDF 文件。客户将 PDF 文件(例如发票)上传到我们的 FTP 服务器,然后 Total PDF Printer X 将其打印出来,以便我们随发出的货物一起包含。"
Frants Erikstrup
www.scanprint.dk
"安装 Total PDF Printer 和 Total PDF Printer X 版本后,没有发现任何问题,因此我的反馈非常积极。我们刚刚开始使用这个新版本(之前我们使用过较早的版本),如果有问题,我会负责给您发消息。谢谢,致以最诚挚的问候。"
Silverio Pattuelli
Ravenna, Italy, www.nobleagri.com
"十二个仓库站点,每个都有自己的标签打印机和装箱单打印机。Total PDF Printer X 加 Folder Monitor:每台打印机一个收件文件夹,ERP 把 PDF 投进去,几秒钟内纸张就出现在正确的工位。-p 按友好名称选择打印机;-t 把订单号放进 Windows 队列,让操作员能找到卡住的作业。我们替换了一条自制的 Acrobat 自动化流水线,那条流水线每次 Acrobat 更新都会崩溃。在 PDF Printer X 上运行五年,没有出现可以归咎于转换器的故障。"
Marcin Z.
Senior IT Engineer at a 3PL warehouse network
"我们以 Royalty-Free 许可证将 Total PDF Printer X 打包进我们的医疗记录产品。一次性的项目费用只是 Aspose.PDF 或 PDFTron 在打印路径上对再分发权所要价的一小部分。我们的安装程序部署并注册 ActiveX,应用直接调用 Print(),终端用户只看到我们自己的 UI。32 位 ActiveX 限制让我们花了几天时间重做流水线,但当我们询问解决方案时,技术支持反应很迅速。"
Sasha P.
Independent Software Vendor
"法院文件以 PDF 形式到达;我们打印时为物理案卷加上案号水印和页码。文档之间的分隔页让档案文员每天面对的纸堆保持有序。-rn 让我们在只需要签名页时仅打印签名页。多次运行结果一致,这对审计很重要。CLI 稳定、文档完善,-xmllog 参数为我们的审计跟踪提供了机器可读的逐作业输出。"
Eleni V.
Lead Developer at a court-records office
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.
Total PDF Printer X 附带 PDFPrinterX.exe,这是一个可以从脚本、计划任务、打印服务器钩子或任何需要纸质输出的后端服务驱动的控制台二进制程序。标志集与 GUI 版的 PDFPrinter.exe 一致;完整参考请参阅命令行文档。请注意,目标参数是打印机名称,而不是文件路径 —— 输出发送到物理或网络打印机,而不是磁盘。
最简单的调用方式。省略打印机名称,文档将进入 Windows 视为当前默认打印机的任何打印机。
PDFPrinterX.exe "C:\docs\invoice.pdf"
-p 接受 Windows 打印机面板中显示的友好打印机名称,或其任何唯一片段。
PDFPrinterX.exe "C:\docs\invoice.pdf" -p "HP LaserJet M404"
部分匹配也有效 —— -p HP 将选择名称包含 "HP" 的第一个打印机。
对于您只需要几张纸的长 PDF —— 封面、签名页、单个章节 —— 使用 -rn 限制打印范围。
PDFPrinterX.exe "C:\docs\contract.pdf" -p "Office Printer" -rn "1-3,7,12-14"
典型的办公场景:分发同一文档的 N 份副本,双面,A4。-NumCopy 设置副本数量,-d vertical 启用长边双面打印,-ps A4 强制纸张大小。
PDFPrinterX.exe "C:\docs\handout.pdf" -p "HP LaserJet M404" -NumCopy 25 -d vertical -ps A4
将二进制程序指向通配符,它会将每个匹配的文件作为单独的作业打印。对于生成报告的夜间批次很有用。
PDFPrinterX.exe "C:\reports\daily\*.pdf" -p "Reports Printer" -sort name
添加 -Recurse 以包含子文件夹,或 -combine 将整个批次作为一个合并的打印作业发送,而不是每个文件一个作业。
Windows 打印服务器上的共享打印机由其共享名称寻址。将 UNC 路径逐字传递给 -p。
PDFPrinterX.exe "C:\docs\report.pdf" -p "\\PRINTSRV01\Accounting-HP" -t "Q3 Report" -cl monochrome
-t 设置 Windows 打印队列中显示的作业标题,这使作业易于查找或取消。
当外部工作进程写入队列文件而打印机消耗它时,您不希望文件路径出现在命令行本身中。-list 从纯文本文件中读取文件掩码(每行一个)。
PDFPrinterX.exe -list "C:\queues\print-queue.txt" -p "Office Printer" -fo
-fo 强制处理而不提示;如果队列工作进程还期望在成功打印后删除原始文件,请与 -do 结合使用。
一旦 PDFPrinterX.exe 作为服务或计划任务运行,日志是实际发生情况的唯一信号。-verbosity detail 每个文件写一行;-logmode append 在多次运行之间保留历史;-xmllog 发出一个解析器友好的伴随文件。
PDFPrinterX.exe "C:\spool\*.pdf" -p "Warehouse Label Printer" -log "C:\logs\pdfprint.log" -verbosity detail -logmode append -xmllog "C:\logs\pdfprint.xml"
-p:-p "HP LaserJet M404"。也支持部分匹配,因此 -p HP 会选择第一个名称包含 "HP" 的打印机。对于 Windows 打印服务器上的共享打印机,请使用 UNC 共享路径:-p "\\PRINTSRV01\Accounting-HP"。省略 -p 则打印到当前的 Windows 默认打印机。new COM("PDFPrinter.PDFPrinterX"),.NET 中使用 new PDFPrinterX(),Python 中使用 win32com.client.Dispatch("PDFPrinter.PDFPrinterX"),Ruby 中使用 WIN32OLE.new('PDFPrinter.PDFPrinterX')。请注意 COM 方法名是 Print,不是 Convert — 目标是打印机名称,不是文件路径。也可以从任何进程、调度器或 shell 脚本调用 PDFPrinterX.exe 命令行程序。-rn "1-3,7,12-14" 指定任意页面范围。-NumCopy 25 设置副本数量。-d vertical 启用长边双面打印(典型的"书本"装订);-d horizontal 是短边双面打印("日历"装订)。-ps A4/Letter/Legal 强制纸张尺寸;-cl monochrome 即使在彩色打印机上也强制黑白输出。PDFPrinterX.exe。这是仓库(自动打印装箱单)、会计(自动打印发票)和 ERP 集成(自动打印导出文件)的标准设置。-list 队列文件参数适用于由其他进程写入打印队列的工作流模式。