Мне нужно отправить PDF-документ напрямую на удаленный сетевой принтер без каких-либо изменений, используя кнопку «Печать».
Для большинства приложений это невозможно с помощью кнопки "Печать", потому что приложение, которое вы используете, пытается установить соединение с драйвером принтера, который не является необработанным, тогда как вы явно хотите обойти эти возможности. Вместо этого вы должны отправить необработанный поток непосредственно на принтер. Чтобы добиться этого в Windows (БЕЗ использования кнопки печати)
- Поделитесь принтером в сети.
- Из
cmd
(или PowerShell и т.д.): echo sample.pdf > \\computer\printer
Или из языка программирования, такого как JScript:
"use strict";
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile("sample.pdf", "\\\\computer\\printer", true);
Заставить приложение вести себя таким образом не будет обычным делом. Большинство приложений, способных открывать и отображать PDF, не смогут обойти драйвер. Это только по соглашению. Базовые языки (например, C++, Java) имеют методы для обработки необработанных данных, просто это не то, что обычно ассоциируется с кнопкой "Печать", которую вы описываете.
В Ubuntu я просто использую Generic / Raw Queue driver
, и все в порядке.
Какое приложение в операционной системе Ubuntu позволяет это? Вообще говоря, CUPS будет использовать Ghostscript и будет переведен аналогично драйверу Microsoft PDF. Я бы оспорил утверждение о том, что отправляемые данные PDF являются "неизмененными" в Ubuntu. Более вероятно, что это модифицировано, но что модифицированная версия просто более желательна. Если вы правы и поток байтов не изменен, это больше похоже на скрытую функцию CUPS, чем на проблему с WinSpool.