QRkoder

ZPL (язык печати этикеток) — принцип работы и применение

Zebra Programming Language — текстовый командный язык принтеров этикеток. Макет описывается набором команд между ^XA и ^XZ, QR-код ставится командой ^BQ с указанием масштаба модуля и уровня коррекции. Поддерживается Zebra и эмулируется большинством конкурентов.

Что такое ZPL

ZPL (Zebra Programming Language, актуальная редакция — ZPL II) описывает этикетку не картинкой, а текстом команд. Принтер получает поток вида ^XA…^XZ и сам рисует поля, шрифты и коды на своей плате. Драйвер Windows при этом не нужен: файл можно отправить в raw-порт 9100 по TCP, в USB как в устройство печати или через COM/LPT.

Отсюда главное свойство языка — предсказуемость. Одна и та же строка ZPL даёт на любой совместимой модели тот же оттиск с точностью до точки, тогда как печать через драйвер зависит от версии Windows и масштабирования. Для кодов это критично: сдвиг модуля на половину точки ломает геометрию символа.

Zebra придумала ZPL в 1980-х, но сегодня его понимают TSC, Godex, Honeywell, Sato, Атол и Mertech — обычно как режим эмуляции рядом с родным языком (TSPL, DPL, EPL).

Как устроен шаблон

Команды делятся на форматные (начинаются с ^, действуют внутри этикетки) и управляющие (начинаются с ~, действуют на принтер сразу). Координаты задаются в точках печатающей головки от левого верхнего угла, поэтому один и тот же шаблон на 203 и 300 dpi даёт разный физический размер: 800 точек — это 100 мм на 203 dpi и 67,7 мм на 300 dpi.

  • ^XA / ^XZ — начало и конец описания одной этикетки;
  • ^PW / ^LL — ширина и длина в точках;
  • ^FO x,y — позиция поля; ^FD — данные; ^FS — конец поля;
  • ^MTT / ^MTD — термотрансфер или прямая термопечать;
  • ^PR — скорость, ~SD — яркость (0-30), ^PQ — тираж;
  • ^CI28 — кодировка UTF-8, без неё кириллица в ^FD выводится мусором.

Как в ZPL ставится QR-код

За QR отвечает команда ^BQa,b,c,d,e: a — поворот, b — модель символа (2 — стандартная, 1 — устаревшая), c — масштаб модуля от 1 до 10, d — уровень коррекции, e — маска. Уровень коррекции и режим ввода дублируются префиксом в данных: ^FDMA,ссылка^FS, где M — коррекция Medium, A — автоматический выбор режима кодирования.

Рабочий пример этикетки 104×50 мм на головке 203 dpi:

^XA
^CI28
^PW832
^LL406
^MTT
^PR4
^FO40,40^BQN,2,6^FDMA,https://qrkoder.ru/r/a1b2^FS
^FO300,60^A0N,36,36^FDЗаказ 10482^FS
^PQ100
^XZ

Здесь ^PW832 — это 832 / 8 = 104 мм, ^LL406 — 50,75 мм. Масштаб 6 при 203 dpi даёт модуль 6 × 0,125 = 0,75 мм, символ версии 3 занимает 29 × 0,75 = 21,8 мм плюс зона тишины 3 мм с каждой стороны. Уменьшать масштаб ниже 3 (0,375 мм) бессмысленно: код формально напечатается, но контраст и равномерность просядут до нижних классов. Физику размера модуля разбираем отдельно — см. размер модуля QR-кода.

Уровень коррекции в ^FD выбирают по условиям: L — гладкая этикетка в помещении, M — стандарт логистики, Q и H — если поверх кода ляжет скотч. Рост коррекции с L до H увеличивает версию символа примерно на треть при том же содержимом, а с ней и физический размер.

Где ZPL встречается на практике

  • Серийная печать из учётной системы. 1С, WMS и самописные скрипты формируют по блоку ^XA…^XZ на каждую единицу — уникальный код в каждой этикетке, никакой ручной вёрстки. Это классический случай серийной генерации QR.
  • Маркировка и поставки. Коды для «Честного знака» и этикетки коробов для маркетплейсов формируются на лету и уходят в принтер потоком по 9100 порту.
  • Отладка. Команда ~HS возвращает статус принтера, а ^HH выводит текущую конфигурацию — быстрее, чем искать причину пустой этикетки методом перебора. Про носители и стойкость оттиска — в термине термоэтикетка с QR.

Заведите динамический QR-код перед серийной печатью: в этикетку уходит короткий постоянный адрес, а целевую ссылку и UTM можно менять после того, как тираж уже разъехался по складам.

Частые вопросы

Чем ZPL отличается от EPL и TSPL?

EPL — предшественник ZPL от Eltron, команд для 2D-кодов в нём почти нет, встречается на старых моделях. TSPL — родной язык принтеров TSC с другим синтаксисом. ZPL стал фактическим стандартом, поэтому TSC, Godex и Атол держат режим его эмуляции: макет, написанный под Zebra, печатается на них без правок.

Какой масштаб модуля ставить в ^BQ?

На 203 dpi минимум 3 (0,375 мм), комфортно 5-6. На 300 dpi можно опуститься до 4 (0,339 мм). Масштаб задаётся целым числом точек, поэтому подобрать произвольный размер в миллиметрах нельзя — только ближайшее кратное. Проверяйте итоговую сторону символа: она растёт вместе с длиной данных.

Почему кириллица в ZPL превращается в мусор?

По умолчанию принтер работает в однобайтовой кодировке CP850. Нужно поставить ^CI28 в начале этикетки и передавать данные в UTF-8, а также загрузить TTF-шрифт с русскими глифами командой ~DU и вызывать его через ^A@N. Встроенные шрифты A-H кириллицу не содержат.

Как отправить ZPL на принтер без драйвера?

Сетевые модели слушают raw-порт 9100: файл достаточно передать сокетом, командой netcat или скриптом на любом языке. USB-принтер виден системе как устройство печати, куда можно писать напрямую. Драйвер нужен только графическим приложениям, которые не умеют формировать текст команд.

Можно ли посмотреть результат ZPL, не печатая?

Да, существуют онлайн-рендереры ZPL, которые возвращают PNG или PDF по отправленному коду. Для проверки вёрстки этого достаточно, но качество печати они не показывают: контраст, растискивание и равномерность модулей зависят от головки, риббона и материала, а не от разметки.

Самойлов Андрей Иванович — Эксперт по QR-кодам и SaaS-маркетингу

Автор материала

Андрей Самойлов

Эксперт по QR-кодам и SaaS-маркетингу. 10 лет в SaaS, маркетинге и ИТ.

Об авторе и все материалы

Создавайте QR-коды бесплатно

Динамические QR-коды с аналитикой, дизайном и без ограничений по сканированиям.

Начать бесплатно