Работа с принтером
Для использования принтера требуется передать наборы заголовков, в зависимости от желаемого способа использования принтера.
Общее
Печать осуществляется путем построчного формирования для последующей печати, добавлением стилей, преобразованием в набор EscPos команд и отправкой на принтер данных.
Т.к. позиционирование построчное и основано на максимальном кол-ве символов
в строке, имеется возможность передать кол-во символов для правильного
формирования чека под конкретные размеры путем передачи заголовка printer.spl.
Значение по умолчанию для данного заголовка - 48
Процесс вывода на печать выглядит следующим образом:
- Осуществляется подключение к печатающему устройству
- Совершается запрашиваемая операция
- Осуществляется вывод на печать сформированных данных
Заголовки принтера обязательны для всех фискальных операций, отчётов и печати копий.
Если ни один принтер не указан — операция не выполняется и возвращается ошибка printers.missing.
В случае возникновения ошибки на последнем этапе (вывод на печать) операция считается
успешной (документ уже фискализирован), а ошибка печати возвращается в поле errors.printing
ответа.
По умолчанию данные передаются в кодировке CP866 и для корректного отображения данных
на бумажном чеке, требуется, чтобы в принтере кодировкой по умолчанию
была установлена кодировка CP866, либо требуется передача заголовка printer.cp866
(или printer.cp1251 для кодировки CP1251)
Принтер выбирается на основе printer.* заголовков в следующей приоритетности:
USBОчередь печати Windows(только Windows)DummyФайл
Если заголовки первого принтера не были найдены — будет попытка найти следующий принтер.
Ошибки при работе с принтером:
printers.missing- принтер не указанprinters.usb.invalid- неверныеvendor/productUSB принтераprinters.error- принтер не найден либо ошибка его открытия
USB-принтер
Для работы с USB принтером требуется передача двух заголовков:
printer.usb.vendor- строковое представлениеvendorIdустройства (десятичное, либо hex с префиксом0x)printer.usb.product- строковое представлениеproductIdустройства (десятичное, либо hex с префиксом0x)
Дополнительно может быть передан printer.timeout - таймаут операций в миллисекундах (по умолчанию 15000).
На Windows, если принтер недоступен напрямую через USB, используется системный драйвер usbprint.sys.
Перед любой операцией печати с использованием USB принтера,
программная касса “забирает” контроль над USB устройством. В случае
если программной кассе не удалось этого сделать, будет возвращена ошибка
printers.error
В случае если требуется вывести какую-то информацию на принтер до или после печати — USB устройство доступно для подключения соответственно ДО выполняемой операции и после ее завершения
Очередь печати Windows
Данный способ работает только на ОС Windows с принтерами, которые поддерживают печать через очередь печати.
Для отправки чека в очередь печати требуется передача заголовка printer.spool.name с указанием
наименования принтера/очереди печати.
Dummy-принтер
Данный тип принтера не выводит ничего на печать. Для задействования требуется передача заголовка
printer.dummy с любым значением
Для имитации ошибки печати можно передать printer.dummy.error: true.
Файл
Данные для печати (ESC/POS команды) записываются в файл. Для задействования требуется передача заголовка
printer.file с путём к файлу. Файл перезаписывается при каждой печати, недостающие папки создаются автоматически.