Форум OlegON > Программы и оборудование для автоматизации торговли > Оборудование > Принтеры > Другие принтеры

Honeywell PC-42d проблемы с ZPL, команда ^TB, глотание пробелов : Другие принтеры

04.12.2024 11:35


18.01.2022 06:51
Всем привет.

Купили принтер этикеток Honeywell PC-42d. Опыта работы с принтерами этикеток не было.
На сколько я понял, печатать на него можно либо как на обычный принтер, через специальный драйвер, полностью формируя дизайн чека извне, в графическом виде,
либо на языке принтера, например на ZPL. Как я понял, ZPL - это самый популярный язык, поддерживаемый всеми принтерами этикеток.

Использовать внешние дизайнеры этикеток, как например Bartender, мне не нравится. нужно печатать из своей программы на Delphi.

Решил делать дизайн непосредственно на ZPL и посылать на печать в принтер.
Как печатать на принтер - разобрался
но с самим языком возникли проблемы.
Нужно вывести довольно длинную строку, перенося ее по словам или просто разрезая, но при этом не вылазя за пределы отведенного поля.
Для этого в ZPL есть команда ^TB

Код:
^XA
^CI 28

^FO 30,  30 ^A0,25 ^FDРИМ №5701^FS
^FO 20,  60  ^GB 420,2,2 ^FS

^FO 30,  160  ^GB 410,160,1 ^FS
^FO 30,  160 
^A0,30 
^TBN,410,160
^FDМамонтова Евгения Александровна 123 фываацвафывфыдлвфы   фывфыльтдфжыль последнееслово^FS

^XZ
В визуализаторе ZPL на сайте labelary точка com выглядит так как и ожидается.
Рамка вокруг TB сделана для того что бы видеть как ограничен TB.

Но при отправке этого кода на принтер, переноса строки не возникает, она уходит за край этикетки, и за край объявленного текстбокса. Что-то работает не так.

Обновил прошивку принтера.

T10.15.017559 - была в принтере исходно.
T10.17.019825 - обновил до этой.

Стало еще хуже. Поведение TB не поменялось, но теперь принтер перестал печатать пробелы, все в одну строчку, и не только в ^TB.
Даунгейд прошивки оказался невозможен :(

Вопросы:
- это кривые прошивки или я что-то делаю неправильно в ZPL?
- как восстановить печать пробелов?
- пользуется ли кто-то в реальной жизни печатью через ZPL или все формируют этикетки как картинку, во внешнем софте?
- есть ли интернет-ресурс где можно почитать/проконстультироваться по использованию ZPL?

Доку на ZPL от Zebra и от Honeywell я естественно смотрю, но они местами и не совпадают.
По ^TB разночтений нет, но может быть есть что-то за рамками этой команды, влияющее на ее работу.

Приложены 2 файла. Один - как выглядит на принтере, второй - как в онлайн-визуализаторе. Код ZPL один и тот же.
Миниатюры
Нажмите на изображение для увеличения
Название: 2 - labelary.png
Просмотров: 88
Размер:	11.4 Кб
ID:	11697   Нажмите на изображение для увеличения
Название: 1 - принтер.png
Просмотров: 70
Размер:	28.7 Кб
ID:	11698  
18.01.2022 06:54
На принтере включал "анализатор линии" и смотрел что туда попадает.
Отсебятины нет, пробелы какие передаю - такие и есть. Что передаю в принтер - то он и получает.
Проблемы в интерпретации этих команд или в рендеринге.
18.01.2022 10:57
Не так давно коллеги решали проблемы с пробелами и переносом путем использования другого шрифта.
18.01.2022 11:13
fraks, попробуйте использовать команду ^FB.
Код:
^XA
^CI 28

^FO 30,  30 ^A0,25 ^FDРИМ №5701^FS
^FO 20,  60  ^GB 420,2,2 ^FS

^FO 30,  160  ^GB 410,160,1 ^FS
^FO 30,  160 
^A0,30 
^FB410,160,,
^FDМамонтова Евгения Александровна 123 фываацвафывфыдлвфы фывфыльтдфжыль последнееслово^FS

^XZ
18.01.2022 11:34
Надо понимать, что ZPL (ZSim) для ханивелловских принтеров - язык не родной, это эмулятор. И как любой эмулятор - несовершенен и порой глючит.
Если обновление прошивки не устранило проблему (а как раз эмуляторы в новых прошивках больше всего и фиксятся), то гарантированных методов лечения, увы нет.
Можно попробовать добиться желаемого другими ZPL командами, в некоторых случаях это вполне реально.

Если нет желания тиражировать итоговое решение на другие принтеры - я бы писал не на ZPL, а на родном для этого принтера DP (Direct Protocol)
https://storage.olegon.ru/supermag/u...Hndbuch.pdf.7z
(2,82Мб)
18.01.2022 11:36
Цитата:
pavel_k fraks, попробуйте использовать команду ^FB.
Я про ^FB конечно читал, и пробовал.
Во первых, там другие параметры,и во вторых - работает по другому.
Параметры там такие:

Код:
^FB
  Field Block
  The ^FB command allows you to print text into a defined block type format.
  This command formats an ^FD or ^SN string into a block of text using the origin, font, and rotation specified for the text string.
  The ^FB command also contains an an automatic word-wrap function.

  Format: ^FBa,b,c,d,e

 * a = width of text block line (in dots)
 * b = maximum number of lines in text block
 * c = add or delete space between lines (in dots)
 * d = text justification
 * e = hanging indent (in dots) of the second and remaining lines
Т.е. ширину блока задать можно. Но высота задается количеством строк а не пикселов. А строк - сколько уж там получится.
Если разрешить много - то наедет на объекты ниже.
Если количество строк ограничить, а текст в них не влез - он будет выводиться в последней разрешенной, накладываясь на предыдущий.

10.jpg - это разрешено 6 строк, и вылазим за рамки.
11.jpg - это разрешено 3 строки и строки накладываются друг на друга.

Из плюсов - у ^FB есть выравнивание, например можно выровнять по центру, а у ^TB такого нету.
Впрочем, у ^TB выравнивание можно задать через ^FW.

Так что одно не полностью заменяет другое.

И в доке от Зебры пишут что:
Цитата:
NOTE: ^TB is the preferred command for printing fields or blocks of text, instead of ^FB.
ПРИМЕЧАНИЕ: ^TB является предпочтительной командой для печати полей или блоков текста вместо ^FB.
18.01.2022 11:40
10.png - указали 6 строк и вылезли за желаемую рамку.
20.png - указали 3 строки, и все что больше третей нарисовалось поверх третей.
18.01.2022 11:42
10 - 6 строк и вылезли за границу
20 - 3 строки и все что дальше третей нарисовалось поверх третей. Странный вариант.
Миниатюры
Нажмите на изображение для увеличения
Название: 10.png
Просмотров: 46
Размер:	9.1 Кб
ID:	11700   Нажмите на изображение для увеличения
Название: 11.png
Просмотров: 42
Размер:	8.1 Кб
ID:	11701  
18.01.2022 11:56
Цитата:
grannie Надо понимать, что ZPL (ZSim) для ханивелловских принтеров - язык не родной, это эмулятор. И как любой эмулятор - несовершенен и порой глючит.
Если обновление прошивки не устранило проблему (а как раз эмуляторы в новых прошивках больше всего и фиксятся), то гарантированных методов лечения, увы нет.
Это понятно, но была надежда что тут не так все сложно, и не накосячили.
Но оказалось что реальность более печальна. :(

Цитата:
grannie Если нет желания тиражировать итоговое решение на другие принтеры - я бы писал не на ZPL, а на родном для этого принтера DP (Direct Protocol)
Было желание использовать способ который бы работал на любом принтере этикеток, а ZPL выбран как наиболее распространенный и поддерживаемый.
Сейчас оказалось что есть еще одно требование - техподдержка. К примеру у АТОЛЛовских принтеров с ней должно быть получше в России. Как мне кажется.
И ZPL они тоже поддерживают. Неизвестно правда, насколько качественно и в каком объеме.

Direct Protocol - это я так понимаю чисто хонивеловский, и вряд-ли его кто-то еще поддерживает.
Кроме того, дока по ZPL от зебры написана намного читабельнее чем дока по ZSim от Хонивела.
Справок по ZPL мне кажется найти проще чем по Direct Protocol.

Direct Protocol какой-то очень многословный и с извращениями, типа:
Код:
'Seagull:2.1:DP
INPUT OFF
VERBOFF
INPUT ON
SYSVAR(48) = 0
ERROR 15,"FONT NOT FOUND"
ERROR 18,"DISK FULL"
ERROR 26,"PARAMETER TOO LARGE"
ERROR 27,"PARAMETER TOO SMALL"
ERROR 37,"CUTTER DEVICE NOT FOUND"
ERROR 1003,"FIELD OUT OF LABEL"
SYSVAR(35)=0
OPEN "tmp:setup.sys" FOR OUTPUT AS #1
PRINT#1,"Printing,Media,Print Area,Media Margin (X),0"
PRINT#1,"Printing,Media,Clip Default,On"
CLOSE #1
SETUP "tmp:setup.sys"
KILL "tmp:setup.sys"
CLIP ON
CLIP BARCODE ON
LBLCOND 3,2
CLL
OPTIMIZE "BATCH" ON
PP42,232:PRBUF 2034
18.01.2022 12:02
А есть какой-то способ посмотреть что получится при интерпретировании кода на Direct Protocol без распечатывания на бумаге?
Часовой пояс GMT +3, время: 11:35.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.