Я знаю, что это старо, но эти ответы помогли бы мне пару месяцев назад, когда я начал этот проект. Я потратил много времени на создание монитора порта, но в конце концов нашел гораздо более простой метод (см. Ссылку WritePrinter ниже).
Если мне нужен виртуальный принтер, который преобразует поток PostScript в
другой формат, я должен реализовать виртуальный принтер из
поцарапать или реализовать плагин рендеринга?
Плагин рендеринга - это то, что вам нужно.
Плагин рендеринга поддерживает только определенные настройки.
Правильно - вам придется решить, достаточно ли это для вас.
Также данные неизменно отправляются в спулер, который не нужен в
это дело.
Это не должно быть проблемой.
Если я реализую драйвер виртуального принтера, он полностью заменит
Драйвер Microsoft PostScript или универсальный драйвер Microsoft?
Если вы реализуете плагин рендеринга, он не заменяет драйверы PS / Uni. Драйверы PS / Uni фактически используются огромным количеством (возможно, 90%?) Всех «драйверов принтеров». OEM-производители, которые производят принтеры, не хотят писать свои собственные драйверы, поэтому они используют дизайн драйверов PS / Uni - некоторые создают плагины UI, некоторые плагины рендеринга, некоторые оба, некоторые нет.
Поскольку мой драйвер виртуальный, имеет ли значение, если я пишу PostScript
совместимый или универсальный драйвер совместимый?
Это зависит от того, в каком формате вы хотите данные. Если вы хотите растровый формат, драйвер Uni лучше, если вы хотите формат PostScript, PS лучше. Если вам нужны данные для каждой нарисованной линии, вывода текста и других операций GDI, то все в порядке.
Любой другой метод преобразования печатного документа в пользовательский документ.
формат, кроме реализации виртуального драйвера принтера? Могу ли я зацепить
как монитор порта или что-то? Из того, что я мог понять, я думаю,
нет.
Большинство людей, которым нужен необработанный доступ к данным PostScript, обычно использующим GhostScript для преобразования в PDF или другой формат, используют для этого монитор портов. Например, виртуальный принтер PDF, поставляемый Adobe с полной версией Acrobat (Writer), использует монитор порта, а также плагин рендеринга и плагин пользовательского интерфейса для драйвера PSCRIPT5.
Проблема с монитором порта заключается в том, что он не работает в контексте пользователя, а не в контексте приложения / процесса, выполняющего печать. Он работает в контексте диспетчера очереди печати и требует много хаков, чтобы выяснить, какой пользователь / сеанс выполняет печать.
Если вы хотите, чтобы растровые данные сохранялись, например, в формате JPG / BMP / PNG, просто создайте плагин рендеринга для универсального драйвера принтера и получите доступ к / сохранить растровые данные внутри IPrintOemUni :: FilterGraphics .
Если вы хотите, чтобы данные PostScript использовались с GhostScript (или другой библиотекой, или вашим собственным кодом) для преобразования в PDF или другие форматы, просто создайте плагин рендеринга для драйвера PSCRIPT5 и получите доступ к данным PS и сохраните их внутри IPrintOemUni2 :: WritePrinter .
В любом случае вам нужен плагин рендеринга. Если вы хотите легко отображать пользовательский интерфейс во время печати и хотите, чтобы ваш код выполнялся в том же контексте, что и пользователь, а не в службе спулера, то убедитесь, что вы установили принтер для печати непосредственно на принтер - обходите спулер. Если вы используете AddPrinter для установки принтера, вы должны использовать флаг PRINTER_ATTRIBUTE_DIRECT .