Чековые GDI-принтеры¶
Поддерживаемые версии CEN/XFS: 3.03, 3.10.
Поддерживаемые модели принтеров¶
Примечание
Знаком * отмечены устройства, поддержка которых приостановлена.
Zebra/Swecoin TTP 2030 *;
Custom VKP 80 II (USB) *;
Custom TG2480-H;
Xiamen Cashino EP-300 *;
Xiamen Cashino CSN-A1K.
Внимание
Обязательное условие – в системе должен быть установлен GDI-драйвер принтера.
Файлы¶
shqPS.PRR.GDI.exe;
shqSPGENPTR.dll.
Основные возможности при печати через WFS_CMD_PTR_RAW_DATA¶
Печать изображений.
Генерация и печать штрихкодов.
Возможность смены кодировок текста в одном чеке (допускается применение любых кодовых таблиц, установленных в операционной системе, в т.ч. UTF-8).
Возможность изменять размер шрифта для различных строк чека.
Возможность печати полужирным, курсивом или подчеркнутым шрифтом.
Перенос не поместившегося текста на новую строку.
Возможность установки вертикальных полей чека.
Возможность ограничить количество символов, выводимых на одной строке.
Возможность установить минимальную длину чека, в миллиметрах.
Внимание
При единовременной подаче на печать более 2 Кб данных (текста) устройства Xiamen Cashino переходят в состояние PowerOff.
Печать форм¶
Файлы с описанием форм располагаются в каталоге C:\FS365\XFS\Templates\PRR\Forms. Расширение файлов — произвольное. Допустимые кодировки: ANSI (ASCII + национальные символы текущей локали системы), UTF-8 BOM, UCS-2 LE(BE) BOM.
Обновление перечня и содержимого форм происходит автоматически при выявлении изменений в директории размещения файлов форм.
XFS-сервис работает без определения носителей (media).
В случае если в ходе разбора формы выявляется критичная ошибка синтаксиса, то такая форма не включается в перечень доступных и не отображается в перечне форм, который можно получить по запросу WFS_INF_PTR_FORM_LIST.
Начало координат – ноль, независимо от единиц измерения (миллиметры, дюймы или знакоместа)
Поле fwCharSupport в ответе WFS_INF_PTR_QUERY_FORM принимает значение WFS_PTR_UNICODE в том случае, если хотя бы одно поле содержит в INITIALVALUE буквы из национальных алфавитов. В противном случае записывается значение WFS_PTR_ASCII. Не влияет на возможность использования lpszUNICODEFields в запросе PRINT_FORM.
Команда WFS_CMD_PTR_PRINT_FORM¶
Допускается использование полей lpszFields и lpszUNICODEFields независимо от кодировки формы, а также значения fwCharSupport, полученного в ответ на QUERY_FORM.
В случае двух и более последовательно поданных запросов PRINT_FORM, в которых только последний содержит команду отрезания чека, будет распечатан консолидированный чек, на который будут «наложены» (именно наложены, а не последовательно распечатаны) переданные на печать формы.
Параметры lpszMediaName, wAlignment, wOffsetX, wOffsetY, wResolution, wPaperSource игнорируются.
Если одновременно заданы параметры lpszUNICODEFields и lpszFields, то используется набор значений из параметра lpszUNICODEFields.
Если поле определяет повторы (содержит атрибут INDEX с числом repeatcount, превышающим ноль), то в параметрах lpszFields / lpszUNICODEFields ожидаются поля с индексом согласно спецификации: <FieldName>[<index>]
. При этом допускается указание не всех индексов из числа определенных. Пропущенные индексы примут значение атрибута INITIALVALUE.
Сочетание команд WFS_CMD_PTR_PRINT_FORM, WFS_CMD_PTR_CONTROL_MEDIA и WFS_CMD_PTR_RAW_DATA¶
Если перед выполнением команды PRINT_FORM воспользоваться командой RAW_DATA, то будет выполнен только запрос на печать формы. Данные, накопленные в буфере и полученные через команду RAW_DATA, будут дожидаться завершения печати через CONTROL_MEDIA.
Если подать одну или несколько команд PRINT_FORM без флага отрезания бумаги, а затем подать RAW_DATA и CONTROL_MEDIA, то сначала будет распечатан и отрезан чек RAW_DATA, а затем — отработана серия запросов WFS_CMD_PTR_PRINT_FORM.
Язык описания форм¶
Реализовано ограниченное подмножество возможностей определения форм. Поддерживается синтаксис формы и полей внутри формы. Рамки и вложенные формы в настоящей версии не поддерживаются. Для формы существуют ниже следующие ограничения и особенности:
ALIGNMENT – игнорируется.
ORIENTATION – игнорируется.
SKEW – игнорируется.
LANGUAGE – игнорируется. Для ANSI форм используется текущая локаль системы.
Параметры CPI и LPI задают размеры знакоместа на формах, единицей измерения которых задано знакоместо (UNIT ROWCOLUMN).
Если CPI не задан, берется значение из настройки Forms.Global.CPI. Если параметр LPI не задан, то его значение вычисляется по высоте текста, размер которого определяется параметром CPI таким образом, что строки текста идут друг за другом без вертикальных интервалов.
POINTSIZE – игнорируется. Размер текста определяется только через параметр CPI.
USERPROMPT – игнорируется.
Для поля существуют ниже следующие ограничения и особенности:
POSITION – координата Z игнорируется.
FOLLOWS – в настоящей версии не поддерживается.
HEADER, FOOTER – не поддерживается.
SIDE – игнорируется.
TYPE – поддерживается только текст и графика.
BARCODE – игнорируется.
COERCIVITY – игнорируется.
CLASS – значения OPTIONAL и STATIC игнорируются. Поддерживается только контроль наличия переданного значения для класса REQUIRED.
ACCESS – игнорируется.
OVERFLOW – для текста отработка BESTFIT идентична TRUNCATE.
Если выбрано значение
WORDWRAP
, то перенос текст пойдет без межстрочного интервала, который установлен явно заданным значениемLPI
.STYLE – поддерживаются следующие стили: BOLD, ITALIC, UNDER, DOUBLE (double width), TRIPLE (triple width), OPAQUE.
CASE – не поддерживается.
COLOR, RGBCOLOR – игнорируется.
LANGUAGE – игнорируется. Для ANSI форм используется текущая локаль системы.
POINTSIZE – игнорируется. Размер текста определяется только через параметр CPI.
FORMAT – не поддерживается.
Настройки XFS-провайдера¶
Внимание
Настоящий XFS-сервис обслуживает несколько различных моделей принтеров с использованием уровня абстракции WinSpool операционной системы. Для того чтобы учесть особенности функционирования той или иной модели, необходимо идентифицировать модель принтера. Это делается путем анализа имени принтера в системе (меню «Устройства и принтеры» в настройках ОС). Запрещается переименовывать принтер после установки системного драйвера, поскольку это может привести к неверной идентификации модели, и, как следствие, некорректному функционированию XFS-сервиса.
Раздел реестра: [HKLM\Software\XFS\PHYSICAL_SERVICES\PRR-GDI]
.
Параметры драйвера:
fontface – начальное наименование шрифта, который используется при печати чеков через команду WFS_CMD_PTR_RAW_DATA. Может быть изменен в пределах запущенного процесса XFS-сервиса с помощью специализированных макросов. Доступен к использованию любой шрифт, установленный в системе. Для сохранения форматирования оригинального чека рекомендуется использовать моноширинные шрифты. Некоторые модели устройств и драйверы к ним не имеют поддержки точечных шрифтов, в случае если будет установлен. Значение по умолчанию
Lucida Console
.fontsize – начальный размер шрифта (в десятых долях миллиметра), который используется при печати чеков через команду WFS_CMD_PTR_RAW_DATA. Может быть изменен в пределах запущенного процесса XFS-сервиса с помощью специализированных макросов. Значение по умолчанию
50
.printername – логическое имя принтера в системе (Пуск > Устройства и принтеры).
MacroString – перечень макросов (текстовых структур), которые следует игнорировать при печати чеков через команду WFS_CMD_PTR_RAW_DATA.
DEAD_AREA_WIDTH – подстроечный параметр: поправка на ширину неэффективной области печати. При некоторых условиях (модель принтера, прошивка, версия драйвера, отсутствие направляющей планки и пр.) драйвер принтера может посчитать, что область печати больше, чем фактическая ширина бумаги. Если не удается исправить ошибку на уровне драйвера принтера, предоставляется возможность определить ширину т.н. «мертвой зоны». Данный параметр измеряется в пикселях и вычисляется опытным путем. Рекомендуется выставлять данное значение в пределах от 0 до 562 пикселей. Используется на УС с принтером Swecoin, на котором была выявлена некорректная печать чеков (при переносе строки обрезается часть информации). Возможные значения – целые неотрицательные числа. Значение по умолчанию
0
. Изменение значения не требуется перезапуска XFS-драйвера.EndOfDoc_LFs_count – количество дополнительных переносов строк после последней напечатанной строки чека. Данный параметр решает проблему отрезания ленты по краю нижней строки. Возможные значения – целые числа. Значение по умолчанию
0
(для недоступного параметра) или2
(для некорректного значения параметра). Изменение значения не требуется перезапуска XFS-драйвера.min_receipt_length_mm – минимальная длина чека, в миллиметрах. Решает проблему коротких чеков, которые в силу конструкции тракта не могут попасть в доступ клиента. Возможные значения – целые числа от
0
до297
; целые отрицательные числа и значение0
– функция отключена, целые числа, превышающие 297, приводятся к значению297
. Значение по умолчанию0
. Изменение значения не требуется перезапуска XFS-драйвера.MAX_CHARS_PER_STRING – количество символов в одной строке при печати чеков через команду WFS_CMD_PTR_RAW_DATA. В случае превышения осуществляется перенос строки. Возможные значения – целые числа. Значение по умолчанию
0
– функция отключена (перенос выполняется только по физической ширине чека согласно требованию драйвера ОС). Изменение значения не требуется перезапуска XFS-драйвера.VERT_FIELDS_PERCENTAGE – вертикальные поля по краям чека, исключаемые из области печати. Значение определяется суммарным размером полей в процентах от всей области печати (учитывается сразу же после вычитания неэффективной области печати DEAD_AREA_WIDTH). Возможные значения – целые числа от
0
до90
(фактически от 0% до 90%). Значение по умолчанию0
. Изменение значения не требуется перезапуска XFS-драйвера.EMULATE_MEDIA_TAKEN_EVENT – эмуляция XFS события WFS_SRVE_PTR_MEDIATAKEN. Для случаев, если на устройстве отсутствует датчик наличия чека в выходном слоте. Событие будет сгенерировано через 5 секунд после распечатки чека. Если датчик выходного слота есть, то параметр будет проигнорирован. Возможные значения:
yes
|no
. Значение по умолчаниюno
.Forms.Global.Fontface – начертание шрифта по умолчанию при печати через WFS_CMD_PTR_PRINT_FORM. Указанный шрифт буфет использоваться в том случае, если текстовые поля формы не содержат параметр FONT.
Forms.Global.CPI – глобальное значение величины CPI (количество символов на дюйм) при печати через PRINT_FORM. По умолчанию инсталлятор предлагает значение
13.5
. Допускает нецелое значение с указанием десятичных долей.
Макросы печати¶
Переносы строк¶
Существует два подхода к переносу строк:
Применение кодов разрыва:
0D
,0A
или их любое сочетание.Применение специализированных макросов:
#CR#
,#LF#
,#CR##LF#
,#NL#
.
Если чек содержит макросы переноса строк, коды разрыва перестают учитываться.
Внимание
В названиях макросов необходимо писать только прописные буквы, иначе в чеке будет напечатано название макроса как обычный текст.
Последовательность #CR##LF#\x0D\x0A
трактуется как одиночный перенос. Это сделано с целью удобства создания и редактирования шаблонов чеков, построенных на основе макросов переноса строки.
Изменение кодировки текста¶
Для изменения кодировки текста служат макросы #CPnnn#
, #CP-nnn#
, где nnn
— номер кодовой таблицы, установленной в операционной системе. Примеры кодировок:
1251 – ANSI кириллица;
1253 – греческая;
866 – русская OEM;
20866 – русская КОИ8;
65001 – UTF-8;
28595 – ISO;
8859-5 – кириллица.
Для удобства переключения в кодировку UTF-8 определены макросы #UTF8#
и #UTF-8#
.
Изменение шрифта¶
Начальный размер шрифта определяется параметром сервиса fontsize. Для изменения размера шрифта служат макросы #CPIn#
и #CPLn#
.
Макрос CPI определяет, сколько символов должно умещаться в одном дюйме.
Макрос CPL определяет, сколько символов должно умещаться в одной строке. Расчет размера шрифта подразумевает небольшую погрешность(в 1-2 символа). Погрешность проявляется при больших значениях CPL (от 40) и зависит от начертания шрифта. Например, на #CPL20#
погрешности никогда не будет.
Внимание
Не рекомендуется использовать макрос CPL
при значениях CPL от 40 и выше.
Макрос изменения размера шрифта автоматически переносит строку, поэтому не допускается его комбинирование в пределах одной строки.
Доступен набор макросов, модифицирующих стиль текущего шрифта:
#BOLD#
– включает полужирный шрифт.#END_BOLD#
– отключает полужирный шрифт.#ITALIC#
– включает наклонный шрифт.#END_ITALIC#
– отключает наклонный шрифт.#UNDERLINE#
– включает подчеркивание текста.#END_UNDERLINE#
– отключает подчеркивание текста.
Данные макросы могут комбинироваться в произвольном порядке, в т.ч. в пределах одной строки.
Для изменения начертания шрифта используется макрос #FONTFACE NAME=...#
. Так же,как и макросы изменения размера, макрос изменения начертания шрифта автоматически переносит строку.
Внимание
Если выбранный шрифт не содержит начертания символов, используемых в чеке, вместо них выводятся т.н. начертания по умолчанию (например, прямоугольник: ▖▖).
Вывод изображений¶
Для вывода изображений на чек применяется макрос #SHQBMP#<имя файла>#ENDBMP#
. Допускается указание имени файла, расположенного на локальном диске в каталоге FS365/XFS/Images, либо в виде URL ссылки на сетевой ресурс (http:// или https://).
Вывод осуществляется по всей ширине чека.
Пример 1:
#SHQBMP#tortoisesvn_logo.png#ENDBMP#
Наличие полей, а также смещение логотипа осуществляется путем добавления пустого пространства непосредственно в файле с изображением. На представленном примере демонстрируется вывод логотипа таким образом, что по бокам изображения присутствуют поля размером в четверть ширины чека.
Пример 2:
#SHQBMP#https://subversion.apache.org/images/svn-name-banner.png#ENDBMP#
Генерация и вывод штрихкодов¶
Для генерации и вывода на чек штрихкодов применяется макрос #SHQBARCODE {option1 {, option2} }# <data> #ENDBARCODE#
.
Внимание
Макрос печати штрихкода должен умещаться в одну строку. Не допускается перенос строки внутри тела макроса.
Параметры макроса:
FMT
=n
– формат штрихкода, целочисленное значение.ROTATE
={ 0 (default) | 90 | 180 | 270 }
(опционально) – угол поворота при печати.MAX_W
=n
(опционально) – ширина области печати штрихкода, целочисленное значение в миллиметрах. Изображение центрируется на чеке по горизонтали. В состав изображения, содержащего штрихкод, включаются отступы 2мм.
OPT1
=n
,OPT2
=n
,OPT3
=n
(опционально) – дополнительные параметры генерации шитрихкода.PRESENTATION
= {B64
|ASCII_HEX
|ASCII_127
(default) } (необязательная опция) – представление данных штрихкода.B64
– base64,ASCII_HEX
– текстовое представление в шестнадцатеричной кодировке,ASCII_127
– текст штрихкода закодирован в ASCII [0x20 .. 0x7f]. Пример кодирования строки «String12345» в случае использования различных кодировок представления:B64: "U3RyaW5nMTIzNDU=" ASCII_HEX:"53 74 72 69 6E 67 31 32 33 34 35" ASCII_127:"String12345"
Пример 1. QR Code, текст «Your Data Here!»:
#SHQBARCODE FMT=58, MAX_W=60mm, PRESENTATION=B64#WW91ciBEYXRhIEhlcmUh#ENDBARCODE#
Пример 2. QR Code, текст «Your Data Here!», error correction – 65%:
#SHQBARCODE FMT=58, MAX_W=60mm, OPT1=4, PRESENTATION=B64#WW91ciBEYXRhIEhlcmUh#ENDBARCODE#
Пример 3. PFD417, текст «String12345»:
#SHQBARCODE FMT=55, MAX_W=60mm#String12345#ENDBARCODE#
Форматы штрихкодов:
|
|
|
|
Опции OPT1, OPT2, OPT3 для форматов штрихкодов:
QR CODE (ISO 18004):
OPT2 -- Code size {0 -- auto; 1..40 }; e.g.: 1 -- 21x21; 40 -- 177x177. OPT1 -- Add error correction: 1: ~20% (level L); 2: ~37% (level M); 3: ~55% (level Q); 4: ~65% (level H).
DATA MATRIX (ISO 16022):
OPT3=100 -- всегда квадрат (равносторонний прямоугольник)
AZTEC (ISO 24778):
OPT1 -- Add minimum Error Correction: 1: 10% + 3 words; 2: 23% + 3 words; 3: 36% + 3 words; 4: 50% + 3 words; OPT2 – Aztec Code size {0 – auto; 1..36 }; 1 -- 15x15 compact; 2 -- 19x19 compact; 3 -- 23x23 compact; 4 -- 27x27 compact; 5 -- 19x19; 6 -- 23x23; 7 -- 27x27; 8 -- 31x31; 9 -- 37x37; 10 -- 41x41; 11 -- 45x45; 12 -- 49x49; 13 -- 53x53; 14 -- 57x57; 15 -- 61x61; 16 -- 67x67; 17 -- 71x71; 18 -- 75x75; 19 -- 79x79; 20 -- 83x83; 21 -- 87x87; 22 -- 91x91; 23 -- 95x95; 24 -- 101x101; 25 -- 105x105; 26 -- 109x109; 27 -- 113x113; 28 -- 117x117; 29 -- 121x121; 30 -- 125x125; 31 -- 131x131; 32 -- 135x135; 33 -- 139x139; 34 -- 143x143; 35 -- 147x147; 36 -- 151x151.
GRID MATRIX:
OPT1 – Add error correction: 1: ~10%; 2: ~20%; 3: ~30%; 4: ~40%; 5: ~50%; OPT2 -- Code size {0 -- auto, 1..13} 1 -- 18x18, .. etc
Коды ошибок оборудования¶
ERROR CODE |
ERROR NAME |
DESCRIPTION |
---|---|---|
0x00000002 |
PRINTER_STATUS_ERROR |
PRINTER_STATUS_ERROR выставляется при Head temperature error, Power supply voltage error, Cutter error, RAM error, EPROM error, Flash error |
0x00000008 |
PRINTER_STATUS_PAPER_JAM |
Paper jam |
0x00000010 |
PRINTER_STATUS_PAPER_OUT |
Paper out |
0x00000020 |
PRINTER_STATUS_MANUAL_FEED |
Manual feed |
0x00000080 |
PRINTER_STATUS_OFFLINE |
Offline |
0x00000400 |
PRINTER_STATUS_PRINTING |
Printing |
0x00004000 |
PRINTER_STATUS_PROCESSING |
Processing |
0x00400000 |
PRINTER_STATUS_DOOR_OPEN |
Door open |
0x02000000 |
PRINTER_STATUS_PAPER_NEAR_END |
Paper near end |
Подробное описание статусов устройства приведено в документе «Thermal printer for information kiosks and ATMs. VKP80. User manual».
Пример сообщения:
СТАТУС ПРИНТЕРА ИЗМЕНИЛСЯ: 0x00000010 PRINTER_STATUS_PAPER_OUT
ERROR CODE |
ERROR NAME |
DESCRIPTION |
---|---|---|
0x01 |
bOnline = true |
Online |
0x04 |
bPaperOut = false |
Paper out |
0x08 |
bHighVoltage = false |
Voltage >9.5V |
0x40 |
bOverheat = false |
Temperature >60° |
Подробное описание статусов устройств приведено в документах «CSN-A1K Micro panel printer’s. User manual» и «EP-300 Micro panel printer’s. User manual».