Windows: Как указать принтеру выдавать FormFeed во время печати?

Мне нужно указать драйверу принтера, чтобы он выполнил подачу страницы.

Я печатаю прямо на принтер, используя:

набор вызовов API.

Много вдохновения пришло из KB138594 - HOWTO: Отправка сырых данных на принтер с помощью Win32 API . В этой статье базы знаний важно отметить, что они (и мой скопированный код) запускают документ в режиме RAW :

// Fill in the structure with info about this "document."
docInfo.pDocName = "My Document";
docInfo.pOutputFile = NULL;
docInfo.pDatatype = "RAW";
StartDocPrinter(hPrinter, 1, docInfo);

Примечание: RAW режим (в отличие от ] TEXT mode) означает, что мы отправляем необработанные байты в драйвер принтера. Мы обещаем говорить на языке, который он понимает.

Затем мы можем использовать WritePrinter , чтобы писать все, что захотим:

WritePrinter(hPrinter, "Hello, world!"); //note, extra parameters removed for clarity
WritePrinter(hPrinter, 0x0c); //form-feed

Проблема заключается в символе подачи страницы 0x0c . Поскольку мы открыли принтер в режиме RAW , мы обещаем, что отправим байты драйвера принтера, которые он сможет обработать. Драйверы большинства принтеров принимают 0x0C , что означает, что вы хотите выполнить подачу страницы.

Проблема в том, что другие принтеры ( PDF-принтер , Microsoft XPS Printers ) ожидают, что задания печати RAW будут выполняться на их собственном языке принтера. Если вы используете вышеуказанное для печати на принтере XPS или PDF: ничего не происходит (т.е. нет диалогового окна сохранения, ничего не печатается).

i некоторое время назад попросил решить этот вопрос и ответил заключалось в том, что вам необходимо изменить режим документа с RAW :

docInfo.pDatatype = "RAW";

на TEXT : "RAW" данные прямо на принтер, а RAW может быть любым PDL. Но XPS водитель, вероятно, понимает только XPS, и он, вероятно, просто проигнорирует ваш PDL "unknown: Hello, world! 0xFF". В Драйвер XPS, вероятно, будет только принимать данные XPS при записи прямо к нему.

Если вы хотите отобразить текст на XPS драйвер, вам следует использовать GDI. Ты можешь иметь возможность отправлять простой текст на драйвер, если вы укажете "ТЕКСТ" в качестве тип данных. Процессор печати прикреплен к драйверу затем "конвертирует" открытый текст для вас, отображая задание через GDI к драйверу.

Чтобы это сработало, я изменил свой код, чтобы объявить документ печати как ТЕКСТ :

// Fill in the structure with info about this "document."
docInfo.pDocName = "My Document";
docInfo.pOutputFile = NULL;
docInfo.pDatatype = "TEXT";
StartDocPrinter(hPrinter, 1, docInfo);
WritePrinter(hPrinter, "Hello, world!");
WritePrinter(hPrinter, 0x0c); //form-feed

И затем диалоговое окно Сохранить как для XPS и PDF принтеры появляются, и сохраняет правильно. И я думал, что все исправлено.

За исключением нескольких месяцев, когда я пытался печатать на реальном принтере: подача формы не происходит - предположительно потому, что я больше не печатаю в "raw" "Команды принтера".

Так что мне нужен Windows-подобный способ подачи страницы. мне нужен вызов API, который сообщит драйверу принтера, что я хочу, чтобы принтер выполнял подачу страницы.

Мой вопрос: Как указать принтеру выдать подачу формы во время печати?


Общие сведения о типах данных

Процессор печати сообщает диспетчеру очереди печати изменить задание в соответствии с типом данных документа. Он работает вместе с драйвером принтера для отправки заданий печати из буфера с жесткого диска на принтер.

Поставщики программного обеспечения иногда разрабатывают свои собственные процессоры печати для поддержки пользовательских типов данных. Обычно процессор печати не требует каких-либо настроек или вмешательства со стороны администраторов.

Типы данных

Процесс печати Windows обычно поддерживает пять типов данных. Два наиболее часто используемых типа данных, расширенный метафайл (EMF) и готовность к печати (RAW), по-разному влияют на производительность как на клиентском компьютере, так и на компьютере-сервере печати.

RAW - это тип данных по умолчанию для клиентов, отличных от программ для Windows. Тип данных RAW указывает диспетчеру очереди печати вообще не изменять задание на печать перед печатью. При использовании этого типа данных весь процесс подготовки задания на печать выполняется на клиентском компьютере.

EMF , или расширенный метафайл, является типом данных по умолчанию для большинства программ на базе Windows. С помощью EMF напечатанный документ преобразуется в формат метафайла, который более переносим, ​​чем файлы RAW, и обычно может быть распечатан на любом принтере. Файлы EMF обычно меньше файлов RAW, содержащих то же задание на печать. Что касается производительности, то только первая часть задания на печать изменяется или отображается на клиентском компьютере, но большая часть воздействия приходится на компьютер сервера печати, который также помогает приложению на клиентском компьютере быстрее вернуть управление пользователю.

В следующей таблице ( из MSDN ) показаны пять различных типов данных, поддерживаемых процессором печати Windows по умолчанию:

Тип данных : RAW
Указания к диспетчеру очереди печати : распечатать документ без изменений.
Использовать : это тип данных для всех клиентов, не основанных на Windows.

Тип данных : RAW [добавлен FF]
Указания к диспетчеру буферизации : добавить символ подачи страницы (0x0C), но не вносить других изменений. (Принтер PCL пропускает последнюю страницу документа, если нет конечной подающей страницы.)
Используйте : требуется для некоторых приложений. Windows не назначает его, но его можно установить по умолчанию в диалоговом окне «Процессор печати».

Тип данных : RAW [FF auto]
Указания к диспетчеру очереди печати : Проверьте завершающую подачу страницы и добавьте ее, если ее еще нет, но не вносите никаких других изменений.
Используйте : требуется для некоторых приложений. Windows не назначает его, но его можно установить по умолчанию в диалоговом окне «Процессор печати».

Тип данных : NT EMF 1.00x
Указания к диспетчеру очереди печати : обработать документ как расширенный метафайл (EMF), а не данные RAW, которые выводит драйвер принтера.
Использование : документы EMF создаются Windows.

Тип данных : ТЕКСТ
Указания к диспетчеру очереди печати : обработайте все задание как текст ANSI и добавьте спецификации печати, используя заводские настройки устройства печати. Используйте : это полезно, когда задание печати представляет собой простой текст, а целевое печатающее устройство не может интерпретировать простой текст.

Вы можете видеть процессоры печати, доступные для принтера, и типы данных, которые поддерживает каждый процессор. , через свойства принтера на панели управления:

alt text

См. также

13
задан Community 23 May 2017 в 12:34
поделиться