Перехват данных, отправляемых на принтер Windows (с помощью RedMon)

Мне нужно перехватить данные, отправляемые на принтер ESC/POS в Windows, и проанализировать их.

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

В настоящее время я пытался использовать RedMon для отправки потока данных на порт принтера. Но отправляемые данные представлены в виде растровой графики, то есть точек для печати, встроенных в команды ESC/POS.

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


person mabicha    schedule 10.07.2012    source источник
comment
Можете ли вы уточнить? Какое приложение отправляет данные? Это Java-приложение? Исходный код находится под вашим контролем? Вы действительно знаете, что текст отправляется изначально? Можете ли вы переключить драйвер принтера, чтобы он записывал вывод в файл и анализировал содержимое этого файла? Я не эксперт по печати, не эксперт по Postscript, но у меня может быть идея для вас, как перехватить печать, в зависимости от ваших ответов.   -  person kriegaex    schedule 30.09.2012


Ответы (3)


Данные, которые отправляются на принтер ESC/POS, ЯВЛЯЮТСЯ растровыми данными, встроенными с помощью команд ESC/POS. Это то, что драйвер принтера ESC/POS генерирует из своего ввода. И это то, что RedMon поймал для вас.

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

Вы не говорите, хотите ли вы настроить перехват в «живой» среде или только для временного тестирования. Если вы хотите временно протестировать, вы также можете выполнить следующие шаги:

  1. Приостановите очередь печати (верхний снимок экрана, нижний).
  2. При желании: смените драйвер с ESC/POS на, скажем, PostScript или Microsoft XPS. Сделайте это на той же вкладке «Дополнительно» в диалоговом окне свойств принтера, как указано выше. (нижний скриншот справа, внизу).
  3. Распечатать.
  4. Получите файл спула, ожидающий в каталоге спула. В Windows 8 по умолчанию это C:\Windows\System32\spool\PRINTERS. Файл спула называется NNNNN.spl, где NNNNN — номер текущего задания на печать.
  5. Проанализируйте данные PostScript или XPS.

Посмотрите на эти 3 снимка экрана:


Однако было бы намного проще (вместо использования RedMon), если бы вы...

  • ...просто включите настройку драйвера принтера под названием "Сохранить распечатанные документы": перейдите в свойства очереди печати => выберите вкладку "Дополнительно" => установите соответствующий флажок (см. скриншот слева выше);

  • ...рыбное буферное задание на печать из каталога очереди печати Windows;

  • ... проанализируйте файл NNNNN.spl:

    • в Windows 8 это будет файл XPS. Переименуйте его в NNNNN.xps, и вы сможете открыть его с помощью встроенного средства просмотра XPS.

    • в предыдущей версии Windows NNNNN.spl будет иметь формат файла соответствующего драйвера принтера (PostScript для драйверов PostScript, XPS для принтера Microsoft XPS, ESC/POS для вашего принтера, ...). Переименуйте его соответствующим образом и откройте в программе просмотра XPS или PostScript.

person Kurt Pfeifle    schedule 30.09.2012
comment
Привет. Итак, просто для подтверждения: файл .spl будет содержать данные, отправленные в драйвер принтера, верно? Но я немного смутился, когда увидел инструмент для печати из файла .spl: compuphase.com/ software_spool.htm Если у вас на этой странице написано, что Spool — это небольшая консольная утилита Win32, которая отправляет содержимое файла в спулер Windows-принтера, минуя драйвер принтера. почему говорится об обходе драйвера принтера, когда эти данные должны быть отправлены в драйвер принтера? - person stng; 19.08.2015
comment
@shaarang: я не знаю этот инструмент и не знаю, как он работает. Вы можете обойти драйвер принтера, если формат файла, который вы хотите отправить на принтер, понятен принтеру: в зависимости от модели это может быть текст, TIFF , PostScript, PDF, PCL или даже SVG или XPS. (Или вы хотите отправить произвольные данные, чтобы проверить, как будет вести себя принтер: если он выйдет из строя, будет ли он молча игнорировать мусор, будет ли он печатать много страниц, содержащих случайные символы или пустые области...) - person Kurt Pfeifle; 19.08.2015
comment
Я думаю, вы правы, но рассматриваемый файл — это файл спула, подготовленный Windows, и в любом случае я хочу отправить этот .spl на принтер, поэтому я наткнулся на: support.microsoft.com/en-us/kb/179774, если вы зайдете туда, вы увидите команду: скопировать 00002.spl \\‹server_name›\‹print_queue_name›, но в моей системе установлен локальный принтер, то как я могу использовать эту команду? Любая помощь будет оценена по достоинству. - person stng; 19.08.2015
comment
@shaarang: тогда имя вашего локального компьютера — это ваше ‹server_name›. - person Kurt Pfeifle; 19.08.2015
comment
О, извините, я новичок в stackoverflow, теперь я обязательно проголосую. Имя компьютера в порядке, но как насчет ‹print_queue_name›, откуда я могу это получить.. - person stng; 19.08.2015
comment
@shaarang: вы можете поделиться своим принтером, затем введите net share в окне cmd.exe, чтобы увидеть имя. - person Kurt Pfeifle; 19.08.2015
comment
На самом деле не очень активен, но скажите мне, что файл .spl никогда не бывает в формате файла, понятном любому принтеру, и как этот инструмент может обойти драйвер принтера? :П - person stng; 19.08.2015
comment
Зачем мне совместно использовать локальный принтер, если он уже напрямую подключен к моей машине. - person stng; 19.08.2015

Если вы просто хотите захватить, вы можете создать порт принтера TCP/IP, указывающий на IP-адрес рабочей станции, и запустить мой инструмент vclpdcap. Он отслеживает 9100 или 515 (RAW или LPR), захватывает и записывает данные в файл.

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

Обновлено: http://www.ballisticecho.com/articles/print-capture-lpd-9100

person Douglas Anderson    schedule 05.10.2012

Вы можете перевести POS-принтеры Epson в режим отладки, в котором они будут распечатывать шестнадцатеричный дамп входящих данных. См. стр. 88 этого pdf-файла: http://www.pos.epson.com/epsonexpertTSG/Templates/POS_Developers_Details.aspx?NRMODE=Published&NRORIGINALURL=%2fdevelopers%2ftechresdetails%2ehtm%3fproductpk%3d642&NRNODEGUID=%7b934F5A6D-E01A-40B1-B2B0-648C1EC68047%7d&NRCACHEHINT=NoModifyGuest&productpk=642

Чтобы понять это, вы можете получить Epson ESC/POS SDK, если зарегистрируетесь и согласитесь с их условиями: https://www.epsonexpert.com/ee/prelogin/registration.htm

person Teddy    schedule 06.10.2012
comment
Я ищу способ перехватить распечатки, отправляемые на сетевой принтер, и сохранить распечатываемые документы в каталоге до того, как печать будет фактически выполнена принтером. Возможно ли это, и если да, то как мне этого добиться? - person Martin Karari; 30.01.2021