Union Label journal
Если вместо штрихкода на этикетке вылезает строка из букв и цифр — почти всегда дело не в поломке: принтеру отправили команду на языке, который он не понимает.
Если вместо штрихкода на этикетке появляется строка из букв и цифр, почти всегда дело не в поломке: принтеру отправили команду на языке, который он не понимает.
У термопринтеров нет единого стандарта разметки. Каждый производитель разработал собственный набор команд, и сегодня одновременно используются четыре основных языка печати: ZPL, EPL, TSPL и ESC/POS.
Позже часть производителей добавила поддержку нескольких языков и режимы эмуляции, чтобы упростить замену оборудования без полной переработки шаблонов печати.

Обычный офисный принтер получает от компьютера готовое изображение страницы и переносит его на бумагу. Термопринтер этикеток может работать иначе: он получает текстовую команду, которая сообщает, где нужно напечатать штрихкод, какой текст разместить рядом и сколько экземпляров этикетки необходимо изготовить.
Эту команду формирует драйвер или программа печати, после чего данные напрямую отправляются на порт устройства. Набор таких команд и называется языком принтера. У каждого производителя может быть собственный синтаксис и набор поддерживаемых функций.
| Язык | Разработчик | Особенности | Где применяется |
|---|---|---|---|
| ZPL | Zebra | Блочный язык с широкими возможностями работы с графикой, шрифтами и шаблонами | Принтеры Zebra и совместимые модели |
| EPL | Eltron, позднее Zebra | Относительно простой язык, который по-прежнему используется в старом оборудовании | Старые принтеры Zebra, Eltron и некоторые мобильные модели |
| TSPL | TSC | Размер этикетки задается в миллиметрах, а координаты рассчитываются с учетом разрешения печати | Принтеры TSC и многие совместимые бюджетные модели |
| ESC/POS | Epson | Потоковый язык команд для чековой печати с ограниченными возможностями позиционирования | POS-принтеры, чековые и некоторые мобильные принтеры |
Сегодня границы между языками стали менее жесткими. Многие принтеры других производителей поддерживают эмуляцию ZPL, а часть моделей TSC умеет автоматически определять входящий поток или переключаться между TSPL, ZPL и EPL через настройки устройства.
Однако поддержку определенного языка не стоит воспринимать как гарантию полной совместимости. Даже при работе с одним и тем же ZPL или EPL разные модели могут реализовывать только часть команд.
Из-за этого сложные шаблоны с графикой, нестандартными шрифтами, встроенными объектами и специальными настройками печати иногда требуют доработки после замены оборудования.
Перенос шаблона, написанного на EPL, на устройство с поддержкой только ZPL не работает автоматически. Синтаксис языков различается настолько, что принтер может напечатать пустую этикетку, вывести набор служебных символов или проигнорировать часть команд.
Основные различия между языками хорошо видны на примере печати одного и того же штрихкода Code 128.
^XA
^FO50,50
^BY3
^BCN,100,Y,N,N
^FD123456789012
^FS
^XZ
В этом примере:
^XA открывает формат этикетки;^XZ завершает этикетку;^FO задает координаты объекта;^BY устанавливает параметры штрихкода;^BC определяет тип и параметры Code 128;^FD передает данные для печати;^FS завершает описание поля.SIZE 50 mm,30 mm
BARCODE 50,50,"128",100,1,0,3,3,"123456789012"
Команда SIZE 50 mm,30 mm задает физический размер этикетки. Команда BARCODE объединяет в одной строке координаты, тип штрихкода, высоту, поворот, ширину модулей и данные.
Таким образом, внешне одинаковый результат в ZPL и TSPL достигается разными способами описания.
Логотипы и другие изображения передаются в термопринтер не как обычные графические файлы, а как побитовая карта. Перед печатью изображение преобразуется в монохромный битмап, поскольку термоголовка может только нагревать или не нагревать каждую отдельную точку.
В ZPL для загрузки графики используется команда ~DG с шестнадцатеричным потоком данных. В TSPL для аналогичной задачи применяется команда BITMAP.
В большинстве сетевых термопринтеров команды передаются через TCP-порт 9100 с использованием режима Raw TCP, исторически связанного с технологией HP JetDirect.
Если принтер получает поток команд на неподдерживаемом языке, он обычно не сообщает об ошибке. Вместо этого устройство может:
Еще одна частая причина ошибок — несоответствие драйвера и выбранного языка печати. Даже если принтер поддерживает нужный язык команд, драйвер может формировать задания в другом формате.
Поэтому после замены оборудования иногда достаточно изменить язык печати в настройках или установить подходящий драйвер. Полная переработка шаблонов этикеток требуется не всегда.
Принтеры одной модели из разных партий могут вести себя по-разному: часть устройств печатает этикетки нормально, а часть выводит бессмысленный набор символов.
Причина обычно не в производственном браке. В разных партиях может быть установлен разный язык печати по умолчанию. Например, одна партия работает в режиме ZPL, а другая — в режиме TSPL, хотя внешне и по документации устройства выглядят одинаково.
Проблема диагностируется явным переключением языка при инициализации устройства или проверкой его текущих настроек.
Другой распространенный сценарий: этикетка визуально выглядит нормально, но штрихкод в некоторых случаях не считывается сканером.
Причина может быть не в языке печати, а в том, что координаты и размеры элементов рассчитаны под одно разрешение печатающей головки, например 203 dpi, а задание отправляется на принтер с разрешением 300 dpi.
При неправильном пересчете штрихкод смещается, становится слишком узким, меняет пропорции или выходит за пределы этикетки. Такая проблема часто возникает при переносе шаблонов между принтерами с разным разрешением.

ZPL и TSPL можно отнести к декларативным языкам. Приложение описывает состав и расположение элементов этикетки, а принтер самостоятельно преобразует команды в растровое изображение и передает результат на термоголовку.
ESC/POS ближе к потоковой печати. Устройство выполняет команды последовательно, строка за строкой. Поэтому точное совмещение нескольких элементов часто требует ручного расчета отступов и ограничено возможностями конкретной модели.
Отдельная группа проблем связана с кодировками. Кириллица в разных языках и прошивках обрабатывается по-разному.
В одних случаях таблицу символов необходимо задавать специальной командой в начале файла. В других кодовая страница определяется прошивкой и меняется через настройки или сервисное меню.
Если кодировка программы, команды и принтера не совпадает, русский текст может превратиться в вопросительные знаки, квадраты или нечитаемые символы.
Разные языки используют разные подходы к единицам измерения. ZPL обычно оперирует точками, а в TSPL физические размеры этикетки могут задаваться в миллиметрах.
При этом координаты объектов все равно зависят от разрешения печатающей головки. Поэтому корректный перевод миллиметров в точки необходимо выполнять с учетом конкретного значения dpi.
Для расчета можно использовать формулу:
Количество точек = размер в миллиметрах × dpi / 25,4
Например, 10 мм при разрешении 203 dpi составляют приблизительно 80 точек, а при разрешении 300 dpi — около 118 точек.
Автоматическое распознавание языка команд снижает количество ошибок, при которых принтер не отвечает или печатает текст команд. Однако оно не устраняет различия в разрешении, кодировках, физических размерах этикетки и наборе доступных шрифтов.
Даже если устройство правильно определило, что полученный поток относится к ZPL, а не к TSPL, макет все равно должен учитывать характеристики конкретной модели:
На практике большую часть этих различий берет на себя программа печати этикеток. Пользователь создает макет один раз, а программное обеспечение автоматически формирует команды для выбранной модели принтера с учетом разрешения, кодировки, размера материала и типа штрихкода.
Поэтому пользователю чаще всего достаточно выбрать нужное устройство в настройках, не разбираясь в особенностях ZPL, TSPL, EPL или ESC/POS.
Нет. Жесткой привязки давно нет. Многие современные модели поддерживают несколько языков одновременно и позволяют переключаться между ними с помощью команды, настроек драйвера или сервисного меню.
Стоит распечатать служебную этикетку самодиагностики. На многих моделях для этого необходимо выключить устройство, зажать кнопку подачи этикетки и включить питание.
На служебной этикетке обычно указываются версия прошивки, разрешение печатающей головки, сетевые параметры, активный режим и поддерживаемые языки команд. Точная последовательность запуска самодиагностики зависит от модели принтера.
Можно подготовить отдельный шаблон для каждого языка печати или использовать программу, которая хранит макет в универсальном формате и автоматически формирует команды для выбранной модели принтера.
Скорее всего, устройство работает в другом режиме и воспринимает поступившие команды как обычный текст. Необходимо проверить выбранный язык печати, режим эмуляции, драйвер и способ передачи задания.
Да, если принтер поддерживает ZPL и принимает задания через Raw TCP. В большинстве случаев поток команд отправляется на IP-адрес принтера через TCP-порт 9100.
Не всегда. Если программа печати автоматически пересчитывает координаты и размеры, шаблон может продолжить работать. При прямой отправке команд ZPL, EPL или TSPL обычно требуется проверить размеры, координаты, штрихкоды и графические элементы.
ZPL, EPL, TSPL и ESC/POS решают похожую задачу — управляют печатью, — но используют разный синтаксис и рассчитаны на разные типы оборудования.
ZPL широко применяется в промышленных и настольных принтерах этикеток, EPL остается актуальным для части старого оборудования, TSPL распространен среди принтеров TSC и совместимых моделей, а ESC/POS чаще используется в чековой и POS-печати.
Современные принтеры могут поддерживать несколько языков и режимы эмуляции, однако полная совместимость шаблонов не гарантируется. При переносе печати необходимо учитывать не только язык команд, но и разрешение устройства, размеры этикетки, кодировку, шрифты и особенности конкретной прошивки.