TotalPDFPrinterX: Оптимизируйте задачи печати с серверным групповым принтером PDF на основе ActiveX.
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016/2019/2022 Server
and
Docker/Citrix/Wine
Total PDF Printer X — это серверный SDK, который пакетно печатает PDF-файлы на физические или сетевые принтеры на серверах Windows — в headless-режиме, без запуска Acrobat, Foxit или любого другого просмотрщика PDF в цепочке печати. Работает тихо: без графического интерфейса, без диалогов, без всплывающих окон. 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-дневный пробный период, без ограничений) и убедитесь, что он действительно стоит своих денег.
(включает 30-дневный бесплатный пробный период)
(только $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 — это склад, где мы храним и распределяем товары наших клиентов. Мы используем Total PDF Printer X вместе с Total Folder Monitor для автоматизации печати PDF-файлов от наших клиентов и из нашей ERP-системы. Клиенты загружают 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
"Включили Total PDF Printer X в наш продукт для медицинских записей по Royalty-Free лицензии. Разовая плата за проект оказалась долей того, что просили 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
ИТ-команды, автоматизирующие пакетную печать PDF на серверах Windows через командную строку и ActiveX
Печать PDF-файлов на серверах без какого-либо участия пользователя
ИТ-отделы разворачивают Total PDF PrinterX на серверах Windows для автоматической печати входящих PDF-документов. Приложение работает незаметно без интерфейса и всплывающих сообщений, печатая пакеты PDF через командную строку по расписанию — идеально для счетов, отчётов и документов, которые нужно печатать сразу по поступлении.
Пакетная печать тысяч PDF-счетов в порядке дат
Бухгалтерские отделы печатают ежедневные пакеты PDF-счетов, выписок и финансовых отчётов, отсортированных по дате или времени файла. Total PDF PrinterX добавляет номера страниц или корпоративные водяные знаки на каждый лист, а разделительные страницы между документами сохраняют организованность распечатанной стопки для рассылки или отправки по почте.
Добавление печати PDF в ваше веб-приложение через ActiveX
Разработчики ПО интегрируют Total PDF PrinterX через ActiveX в веб-приложения, ERP-системы и платформы управления документами. Пользователи инициируют задания на печать из браузера, а сервер обрабатывает печать незаметно — без настольного ПО и вмешательства пользователя на стороне сервера.
Автоматическая печать упаковочных листов и этикеток с сервера
Склады и распределительные центры автоматически печатают PDF упаковочные листы, транспортные этикетки и накладные по мере поступления заказов. Функции автоповорота и масштабирования по странице обрабатывают разные форматы документов без ручной настройки, а двусторонние разделительные листы предотвращают смешивание документов на двусторонних страницах.
Печать документов дел с водяными знаками и нумерацией страниц
Государственные органы и юридические отделы пакетно печатают PDF-заявки, материалы дел и регуляторные документы на выделенных принт-серверах. Добавляйте текстовые водяные знаки с пометками о конфиденциальности или информацией об авторских правах на каждую страницу, штампуйте номера страниц для организованных физических записей — всё без участия оператора через командную строку.
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"
Обновлено Fri, 01 May 2026
(только $450.00)
-p: -p "HP LaserJet M404". Частичные совпадения тоже работают, поэтому -p HP выберет первый принтер, в имени которого есть "HP". Для общих принтеров на сервере печати Windows используйте UNC-путь к шаре: -p "\\PRINTSRV01\Accounting-HP". Опустите -p, чтобы печатать на текущий принтер по умолчанию Windows.new COM("PDFPrinter.PDFPrinterX") в PHP, new PDFPrinterX() в .NET, win32com.client.Dispatch("PDFPrinter.PDFPrinterX") в Python, WIN32OLE.new('PDFPrinter.PDFPrinterX') в Ruby. Обратите внимание: имя COM-метода — Print, а не Convert — назначение — это имя принтера, а не путь к файлу. Альтернативно, консольный бинарник PDFPrinterX.exe можно вызывать из любого процесса, планировщика или shell-скрипта.-rn "1-3,7,12-14" для произвольных диапазонов страниц. -NumCopy 25 задаёт количество копий. -d vertical включает двустороннюю печать по длинному краю (типичный "книжный" переплёт); -d horizontal — двусторонняя по короткому краю ("календарный" переплёт). -ps A4/Letter/Legal принудительно задаёт размер бумаги; -cl monochrome принудительно выводит чёрно-белый результат даже на цветном принтере.PDFPrinterX.exe с настроенными вами именем принтера и флагами. Это канонический сценарий для складов (авто-печать упаковочных листов), бухгалтерии (авто-печать счетов) и интеграций с ERP (авто-печать экспортов). Флаг файла-очереди -list покрывает конвейеры с воркерами, в которых другой процесс пишет очередь печати.Скачайте пробную версию и конвертируйте файлы за считанные минуты.
Не требуется ни банковская карта, ни email.