Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Работа с принтером

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


Общее

Печать осуществляется путем построчного формирования для последующей печати, добавлением стилей, преобразованием в набор 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/product USB принтера
  • 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 с путём к файлу. Файл перезаписывается при каждой печати, недостающие папки создаются автоматически.