2017-02-08 20 views
1

Как перехватить и изменить файл печати Windows 7 (.SPL), чтобы добавить дополнительную информацию в заголовок, например '@PJL SET NAME = "PainPoint", прежде чем этот файл будет отправлен на принтер во время выполнения печати работа?Как программно добиться редактирования заголовка файла спула обычной очереди очереди печати «spool file» перед отправкой на принтер?

Файл .spl частичное извлечение из Наверху:

%[email protected] SET STRINGCODESET=UTF8 
@PJL COMMENT DATE=02/08/2017 
@PJL ENTER LANGUAGE=PCLXL 
) HP-PCL XL;2;1;FXXPL2-1.0.0,WINNT-6.1,XPL2DRV-6.9.1.1 
?X???........ 

ответ

1

Редактирование файла золотник, очевидно, тривиально. Трюк заключается в том, как получить доступ к файлу спула.

Я могу придумать несколько способов Навскидку:

  1. Pause задание на печать после навивки, отредактировать его, а затем отпустите его. See my answer here. Это не тривиально, и вам может потребоваться обратиться к стороннему программному обеспечению в зависимости от времени и усилий.
  2. Создайте драйвер печати или spooler component, например порт или language monitor, чтобы отредактировать файл. (Спасибо Кэри Грегори за предложение использовать монитор языка). Это большая тема, и вам нужно будет прочитать много документации, чтобы выяснить, как это сделать, но в WDK есть образец (Pjlmon). Обратите внимание, что новая модель драйвера V4 для Windows 8/Server 2012 doesn't support these components.
  3. Если вам не нужно делать это прозрачно, вы можете настроить RedMon (бесплатно), чтобы вызвать приложение, чтобы отредактировать файл спула. RedMon затем отправит его на нужный принтер.

  4. VeryPDF имеет несколько similar commercial products с большим количеством возможностей.

+0

Ну, я фон java/scala, что вы предлагаете? Фактической задачей является включение дополнительных заголовков PJL в файл спула, а затем отправка на принтер. – PainPoints

+0

Поскольку вы подразумеваете, что хотите избежать встроенного кодирования, я бы предложил сначала попробовать вариант 3. –

+0

Я устанавливаю RedMon, но он работает для перехода только на другой принтер/выход. Я думаю, что я буду работать на Visual C++ или еще что-нибудь, вполне ли возможно приостановить задание на печать после буферизации, отредактировать его и затем отпустить? Мне нужно выполнить эту функцию только для одного принтера, но не для других принтеров, которые работают нормально. – PainPoints