Чековые 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

  1. Печать изображений.

  2. Генерация и печать штрихкодов.

  3. Возможность смены кодировок текста в одном чеке (допускается применение любых кодовых таблиц, установленных в операционной системе, в т.ч. UTF-8).

  4. Возможность изменять размер шрифта для различных строк чека.

  5. Возможность печати полужирным, курсивом или подчеркнутым шрифтом.

  6. Перенос не поместившегося текста на новую строку.

  7. Возможность установки вертикальных полей чека.

  8. Возможность ограничить количество символов, выводимых на одной строке.

  9. Возможность установить минимальную длину чека, в миллиметрах.

Внимание

При единовременной подаче на печать более 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. Допускает нецелое значение с указанием десятичных долей.

Макросы печати

Переносы строк

Существует два подхода к переносу строк:

  1. Применение кодов разрыва: 0D, 0A или их любое сочетание.

  2. Применение специализированных макросов: #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#
../../_images/gdi-shqbmp-local.png

Наличие полей, а также смещение логотипа осуществляется путем добавления пустого пространства непосредственно в файле с изображением. На представленном примере демонстрируется вывод логотипа таким образом, что по бокам изображения присутствуют поля размером в четверть ширины чека.

Пример 2:

#SHQBMP#https://subversion.apache.org/images/svn-name-banner.png#ENDBMP#
../../_images/gdi-shqbmp-web.png

Генерация и вывод штрихкодов

Для генерации и вывода на чек штрихкодов применяется макрос #SHQBARCODE {option1 {, option2} }# <data> #ENDBARCODE#.

Внимание

Макрос печати штрихкода должен умещаться в одну строку. Не допускается перенос строки внутри тела макроса.

Параметры макроса:

  • FMT = n – формат штрихкода, целочисленное значение.

  • ROTATE = { 0 (default) | 90 | 180 | 270 } (опционально) – угол поворота при печати.

  • MAX_W = n (опционально) – ширина области печати штрихкода, целочисленное значение в миллиметрах. Изображение центрируется на чеке по горизонтали. В состав изображения, содержащего штрихкод, включаются отступы 2мм.

../../_images/gdi-max_w.jpg
  • 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#
../../_images/gdi-example1.jpg

Пример 2. QR Code, текст «Your Data Here!», error correction – 65%:

#SHQBARCODE FMT=58, MAX_W=60mm, OPT1=4, PRESENTATION=B64#WW91ciBEYXRhIEhlcmUh#ENDBARCODE#
../../_images/gdi-example2.jpg

Пример 3. PFD417, текст «String12345»:

#SHQBARCODE FMT=55, MAX_W=60mm#String12345#ENDBARCODE#
../../_images/gdi-example3.jpg

Форматы штрихкодов:

  • CODE 11 (код – 1);

  • Code 2 of 5 MATRIX (код – 2);

  • Code 2 of 5 INTER (код – 3);

  • Code 2 of 5 IATA (код – 4);

  • Code 2 of 5 LOGIC (код – 6);

  • Code 2 of 5 IND (код – 7);

  • CODE 39 (ISO 16388) (код – 8);

  • EXCODE 39 (код – 9);

  • EANX (код – 13);

  • EAN 128 (код – 16);

  • CODABAR (код – 18);

  • CODE 128 (ISO 15417) (код – 20);

  • DPLEIT (код – 21);

  • DPIDENT (код – 22);

  • CODE16K (код – 23);

  • CODE 49 (код – 24);

  • CODE 93 (код – 25);

  • FLAT (код – 28);

  • RSS 14 (код – 29);

  • RSS_LTD (код – 30);

  • RSS_EXP (код – 31);

  • TELEPEN (код – 32);

  • UPC A (код – 34);

  • UPC E (код – 37);

  • POSTNET (код – 40);

  • MSI PLESSEY (код – 47);

  • FIM (код – 49);

  • LOGMARS (код – 50);

  • PHARMA (код – 51);

  • PZN (код – 52);

  • PHARMA TWO (код – 53);

  • PDF 417 (ISO 15438) (код – 55);

  • PDF 417 TRUNC (код – 56);

  • MAXICODE (ISO 16023) (код – 57);

  • QR CODE (ISO 18004) (код – 58);

  • CODE 128B (код – 60);

  • AUSPOST (код – 63);

  • AUSREPLY (код – 66);

  • AUSROUTE (код – 67);

  • AUSREDIRECT (код – 68);

  • ISBNX (код – 69);

  • RM4SCC (код – 70);

  • DATA MATRIX (ISO 16022) (код – 71);

  • EAN 14 (код – 72);

  • CODABLOCKF (код – 74);

  • NVE18 (код – 75);

  • JAPANPOST (код – 76);

  • KOREAPOST (код – 77);

  • RSS14 STACK (код – 79);

  • RSS14 STACK OMNI (код – 80);

  • RSS EXPSTACK (код – 81);

  • PLANET (код – 82);

  • MICRO PDF 417 (ISO 24728) (код – 84);

  • ONECODE (код – 85);

  • PLESSEY (код – 86);

  • TELEPEN NUM (код – 87);

  • ITF 14 (код – 89);

  • KIX (код – 90);

  • AZTEC (ISO 24778) (код – 92);

  • DAFT (код – 93);

  • MICRO QR (код – 97);

  • GRID MATRIX (код – 142).

Опции 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
    

Иллюстрация возможностей печати штрихкода

Коды ошибок оборудования

Таблица 6. Коды ошибок оборудования Custom VKP 80 II

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
Таблица 7. Коды ошибок оборудования Cashino CSN-A1K и Cashino EP-300

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».