Добавление произвольной ESC-команды в печатную форму
Вводная информация
Как правило, основные команды для управления принтером реализованы в драйвере. Но если используется нестандартный принтер либо требуется добавить какую-либо нестандартную операцию (инициализация кодовой страницы, печать логотипа, управление звонком и т.д.), можно указать ESC-команду непосредственно в печатной форме.
Для начала необходимо определиться с формой, в которую должна быть помещена команда. Ниже приведены основные печатные формы:
- FCHECK.FRM - форма печати пречеков, нефискальных чеков
- FICHECK.FRM - аналогично FCHECK.FRM, если используется ФР с поддержкой нефискальной печати
- SERVPRN.FRM - форма печати сервис-чеков
Также необходимо определиться, в какой части формы должна быть размещена команда. Если командна предназначена для печати логотипа либо установки кодовой страницы, то логично ее поместить в начало формы. Если же команда нужна для управления звонком, то поместить ее нужно в конец формы. Возможна ситуация, когда команду нужно установить перед печатью определенной строки (например, если у принтера используется нестандартная команда для вывода текста жирным или увеличенным шрифтом)
Система команд ESC/POS
Важно: Кассовый клиент R-Keeper v6 не поддерживает работу с нулевыми байтами [00] - если такой байт будет указан в печатной форме, ESC-команда работать не будет
В печатную форму можно добавить любую команду, но т.к. самой распространненной системой для POS-принтеров является ESC/POS, будем рассматривать процедуру на ее примере.
Для каждого принтера или семейства принтеров может быть свой набор ESC/POS команд, который обычно описан в руководстве к принтеру.
Простые команды ESC/POS состоят из нескольких байт, бывают также достаточно сложные команды, состоящие из множества параметров.
Рассмотрим пример простой ESC-команды для выбора кодовой страницы принтера:
ESC t n [Name] Select character code table [Format] ASCII ESC t n Hex 1B 74 n Decimal 27 116 n [Range] Except for Thai model:0 ≤ n ≤ 5, 16 ≤ n ≤ 19, n = 254, 255 For Thai model: 0 ≤ n ≤ 5, 16 ≤ n ≤ 26, n = 254, 255 [Default] Except for Thai model:n = 0 For Thai model: n = 20 [Description] Selects a page n from the character code table.
Данная команда состоит из 3-х байт: 1B 74 n. Последний байт (n) определяет номер кодовой страницы, которую требуется установить.
В руководстве к принтеру есть таблица с номерами кодовых страниц, которые поддерживает принтер:
n | Selected character code |
---|---|
0 | PC437 (USA: Standard Europe) |
2 | Katakana |
.... | ... |
17 | PC866 (Cyrillic #2) |
... | ... |
Нас интересует кодовая страница PC866 - ее номер 17. Соотв. команда будет выглядеть так: 1B 74 17 (три байта в шестнадцатиричном виде)
Редактирование печатной формы
Для добавления команды в печатную форму используется стандартный редактор форм FormEditor (RK6\FEDITOR.EXE)
Открываем форму в редакторе (в примере используется FCHECK.FRM), выбираем самый первый раздел Page Header и добавляем на форму новый элемент (Item -> Add)
Важно: Ширина (Width) нового элемента должна соотвю длине добавляемой ESC-команды
В нашем случае команда состоит из 3-х байт, соотв. ширину нового элемента устанавливаем равной 3.
Для того, чтобы в дальнейшем было легче править форму в HEX-редакторе, значение нового элемента указываем в виде трех одинаковых чисел (это не обязательное требование, но значительно облегчает поиск строки в HEX-режиме) - в примере используется значение 888:
В результате получаем:
Далее сохраняем форму и закрываем редактор.
HEX-редактор
Заключительным этапом будет редактирование формы в любом HEX-редакторе (скриншоты ниже сделаны в приложении WinHex)
Открываем файл макета печати (FCHECK.FRM) в редакторе и поиском находим добавленную ранее строку:
Если поиск в вашем редакторе возможен только в шестнадцатеричном виде, искомую строку предварительно нужно перевести в HEX (строке 888 соотв. HEX-значение 38 38 38)
Далее меняем каждый байт найденной строки на соотв. байт ESC-команды:
Сохраняем файл макета печати, записываем его на кассу и проверяем работу принтера!