Проектирование этикеток Zebra (ZPL)

Принтеры этикеток Zebra не понимают обычные документы. Вместо этого они читают небольшой набор текстовых команд, называемых ZPL (Zebra Programming Language). Дизайн ZPL — это просто блок текста, который сообщает принтеру, что разместить на этикетке и где: строку текста здесь, цену там, QR-код в углу.

Эта страница объясняет ZPL с нуля, чтобы Вы могли читать, редактировать и создавать собственные этикетки товаров без посторонней помощи. Вы проектируете этикетку в разделе Настройки ‣ Принтеры, в поле Пользовательский дизайн этикеток товаров Zebra (см. Настройка принтера).

Совет

Вы редко начинаете с чистого листа. Gem Logic предоставляет каждой этикетке рабочий дизайн по умолчанию. Самый быстрый способ обучения — открыть этот шаблон, изменить что-то одно, сохранить и посмотреть на изображение предпросмотра. Повторяйте до тех пор, пока результат не будет выглядеть правильно.

Быстрый старт

  1. Перейдите в Настройки ‣ Принтеры и найдите поле Пользовательский дизайн этикеток товаров Zebra.

  2. Внесите небольшое изменение (например, переместите строку или увеличьте размер цены).

  3. Нажмите Сохранить. Gem Logic автоматически сгенерирует изображение предпросмотра этикетки.

  4. Посмотрите на предпросмотр. Если оно неверно, скорректируйте и сохраните снова.

Во время экспериментов ничего не отправляется на реальный принтер — предпросмотр генерируется из Вашего дизайна, так что Вы можете безопасно вносить изменения до печати хотя бы одной этикетки.

Как устроена этикетка ZPL

Каждая этикетка начинается с ^XA и заканчивается ^XZ. Всё, что находится между ними, описывает этикетку. Команда всегда начинается с символа каретки ^ (или иногда тильды ~).

^XA            (start of the label)
... commands that build the label ...
^XZ            (end of the label)

Внутри самый распространённый шаблон — «перейти на позицию, затем напечатать что-то там»:

^FO50,30^FDHello^FS

Эта единственная строка означает: перейти на позицию 50,30 и напечатать текст «Hello». В деталях:

  • ^FO50,30Field Origin: переместиться в позицию x=50, y=30 (верхний левый угол того, что идёт следующим).

  • ^FDHelloField Data: фактическое содержимое для печати.

  • ^FSField Separator: отмечает конец этого фрагмента. Всегда закрывайте поле с помощью ^FS.

Это составляет 90% проектирования этикеток: серия строк «позиция + содержимое», сложенных вместе.

Размер этикетки, точки и миллиметры

Принтеры Zebra измеряют всё в точках, а не в миллиметрах. Большинство принтеров этикеток печатают с разрешением 203 DPI, что означает:

  • 1 мм ≈ 8 точек

  • 1 дюйм = 203 точки

Таким образом, этикетка шириной 56 мм и высотой 13 мм имеет ширину около 448 точек и высоту 104 точки.

Область печати задаётся двумя командами:

  • ^PWPrint Width, ширина печати, в точках.

  • ^LLLabel Length, длина этикетки (высота), в точках.

^PW448        (label is 448 dots wide ≈ 56 mm)
^LL104        (label is 104 dots tall ≈ 13 mm)

Важно

Физический размер этикетки также берётся из полей Ширина этикетки продукта и Длина этикетки продукта рядом с дизайном. Держите их в соответствии с Вашим реальным запасом этикеток. Переменная {label_length} заполняется автоматически из поля длины, поэтому дизайн по умолчанию использует ^LL{label_length}.

Позиционирование: координатная сетка

Представьте этикетку как сетку. Точка 0,0 — это левый верхний угол. Первое число — x (расстояние вправо), второе — y (расстояние вниз), оба в точках.

^FO0,0        top-left corner
^FO200,0      200 dots to the right, same height
^FO0,40       left edge, 40 dots down

Чтобы переместить элемент, измените его числа ^FO. Большее x = дальше вправо; большее y = дальше вниз. Так Вы помещаете SKU на одну строку, а металл на следующую: задайте им одинаковый x, но больший y во второй строке.

Добавление и изменение размера текста

Перед печатью текста обычно выбирают размер шрифта. Самый простой способ — ^CF0,h (Change default Font, изменить шрифт по умолчанию), где h — высота символов в точках:

^CF0,28               use ~28-dot-tall text from here on
^FO50,30^FDPrice^FS   print "Price" at 50,30 in that size

Каждый ^FD ... ^FS после ^CF использует этот размер, пока Вы не зададите другой. Чтобы смешать размеры на одной этикетке, установите ^CF0,28 перед большим текстом и ^CF0,14 перед маленьким.

Совет

Чтобы добавить новую строку текста, Вы не нажимаете Enter — Вы добавляете другое позиционированное поле ниже. Скопируйте существующую строку, задайте ей большее значение y и измените её содержимое.

Вставка данных о продукте

Дизайн этикетки используется повторно для каждого продукта, поэтому Вы не вводите SKU или цену вручную. Вместо этого Вы вставляете переменные в фигурных скобках, и Gem Logic заменяет их реальными данными каждого продукта при печати этикетки.

^FO1,8^FD{item_sku}^FS          prints this product's SKU
^FO180,50^FD{currency}{price}^FS prints e.g. €129

Те же переменные отображаются в виде кликабельных значков прямо под полем дизайна в приложении, так что Вы можете видеть, какие доступны, пока редактируете.

Доступные переменные

Продукт

  • {brand}: название бренда

  • {product_title}: название продукта

  • {item_sku}: SKU продукта

  • {ean_code}: штрихкод EAN (используется для QR-кода)

  • {price} и {currency}: цена и символ валюты

  • {serial_number}: серийный номер

  • {year_of_manufacture}: год производства

  • {supplier_product_reference}: продуктовая ссылка поставщика

  • {supplier_reference}: ссылка поставщика

Материалы и драгоценные камни

  • {material_1}{material_5}: полное описание материала (вес, название и характеристики драгоценного камня)

  • {material_only_1}{material_only_5}: только название материала или драгоценного камня

Атрибуты

  • {attribute_1}{attribute_5}: атрибут в формате название: значение

  • {attribute_name_1}{attribute_name_5}: только название атрибута

  • {attribute_value_1}{attribute_value_5}: только значение атрибута

Размеры

  • {weight}, {length}, {width}, {height}, {diameter}, {size}, {thickness}, {quality}

Коллекции

  • {collections}: коллекции, к которым относится изделие

Категории

  • {categories}: категории, к которым относится изделие, разделённые запятыми

Страна происхождения

  • {country_of_origin}: страна происхождения изделия

Чистота

  • {clarity}: чистота драгоценного камня изделия

Код стоимости

  • {encoded_cost}: закупочная стоимость, преобразованная в Ваш личный код стоимости (буквы задаются в Конфигурация ‣ Основные настройки), чтобы реальная стоимость не была читаема на этикетке.

RFID (требуется только для этикеток с RFID-метками)

  • {item_sku_epc_hex}: SKU, закодированный как значение EPC для RFID-чипа

  • {item_sku_epc_word_count}: длина EPC, используемая командой ZPL RFID

Макет

  • {label_length}: заполняется автоматически на основании настройки длины этикетки

QR-коды и штрихкоды

QR-код добавляется командой ^BQN, за которой следует поле данных, начинающееся с QA,:

^FO0,30^BQN,2,2^FDQA,{ean_code}^FS
  • ^FO0,30 — позиция QR-кода.

  • ^BQN,2,2 — QR-код. Последнее число — это размер (увеличение). Увеличьте его (3, 4, 5…) для более крупного кода, который легче сканировать; уменьшите, чтобы сэкономить место.

  • ^FDQA,{ean_code}^FS — данные внутри кода. Здесь кодируется EAN изделия.

Для классического одномерного штрихкода используйте вместо этого ^BCN (Code 128):

^FO20,20^BCN,60,Y,N,N^FD{ean_code}^FS

60 — высота штрихкода в точках, а Y выводит читаемый номер под кодом.

Стандартный дизайн с пояснениями

Вот исходный дизайн, который предоставляет Вам Gem Logic, с пояснениями по каждой строке. Прочитав его, Вы быстрее всего поймёте, как элементы сочетаются друг с другом.

^XA
^MD20
^CI28
^LL{label_length}
^LH0,0
^CF0,18
^FO180,8^FD{brand}^FS
^CF0,14
^FO50,45^FD{material_2}^FS
^FO50,60^FD{material_3}^FS
^FO180,27^FD{material_1}^FS
^CF0,28
^FO180,50^FD{currency}{price}^FS
^CF0,16
^FO1,8^FD{item_sku}^FS
^FO1,23^FD{supplier_product_reference}^FS
^FO50,60^FD{supplier_reference}^FS
^FO0,30^BQN,2,2
^FDQA,{ean_code}^FS
^XZ

Построчно:

  • ^XA — начало этикетки.

  • ^MD20 — интенсивность печати. Увеличьте значение, если этикетки выглядят блёклыми, уменьшите, если текст размазан.

  • ^CI28 — кодировка символов, чтобы и акценты печатались корректно.

  • ^LL{label_length} — высота этикетки, заполняется автоматически из настройки длины.

  • ^LH0,0 — исходная позиция: начало координат находится в левом верхнем углу.

  • ^CF0,18 — размер текста ~18 точек для следующих строк.

  • ^FO180,8^FD{brand}^FS — марка, вблизи верхнего края.

  • ^CF0,14 — с этого места текст мельче.

  • ^FO50,45^FD{material_2}^FS, ^FO50,60^FD{material_3}^FS, ^FO180,27^FD{material_1}^FS — три материала.

  • ^CF0,28 — крупный текст для цены.

  • ^FO180,50^FD{currency}{price}^FS — цена, например €129.

  • ^CF0,16 — средний текст.

  • ^FO1,8^FD{item_sku}^FS — SKU, вверху слева.

  • ^FO1,23^FD{supplier_product_reference}^FS — артикул поставщика.

  • ^FO50,60^FD{supplier_reference}^FS — ссылка на поставщика.

  • ^FO0,30^BQN,2,2 затем ^FDQA,{ean_code}^FS — QR-код (внизу слева) и его данные (EAN).

  • ^XZ — конец этикетки.

Предупреждение

В ZPL нет построчных комментариев — не используйте точку с запятой ; для добавления примечаний. ZPL понимает только команды, начинающиеся с ^ (или ~), поэтому всё, что следует за ;, интерпретируется как часть значения команды (или как случайные данные этикетки). Именно это вызывает ошибки вроде «Value „20;“ is not a valid number» или «Ignored unrecognized content», а случайный ; может незаметно сместить или сломать Ваш макет.

Чтобы оставить примечание, используйте команду комментария ^FX, закрывая её ^FS. Принтер игнорирует всё, что находится внутри:

^FX brand, near the top ^FS
^FO180,8^FD{brand}^FS

Единственное правило: комментарий ^FX не может содержать ^ или ~ — эти символы завершают комментарий и начинают следующую команду.

Распространённые изменения

Увеличить цену

Найдите ^CF0,28 перед строкой {price} и увеличьте число, например ^CF0,40.

Переместить элемент

Измените числа в ^FO. Чтобы сместить марку вниз, увеличьте второе число в ^FO180,8 (то есть 8).

Добавить новую строку текста

Скопируйте строку ^FO…^FD…^FS, задайте ей бо́льшее значение y, чтобы она располагалась ниже, и измените содержимое или переменную.

Увеличить QR-код

Увеличьте последнее число в ^BQN,2,2 (попробуйте ^BQN,3,3). Если код обрезается, дайте ему больше места или сдвиньте его влево/вверх с помощью ^FO.

Добавить разделительную линию

Используйте графический блок. ^FO0,40^GB540,2,2^FS рисует тонкую горизонтальную линию шириной 540 точек.

Предварительный просмотр и тестирование перед печатью

У Вас есть два простых способа проверить дизайн перед использованием реальных этикеток:

  • В Gem Logic: каждый раз при сохранении под полем дизайна появляется изображение предварительного просмотра этикетки. Используйте его как основной инструмент для обратной связи.

  • Онлайн: вставьте ваш ZPL в бесплатный просмотрщик Labelary, чтобы увидеть мгновенный рендер для различных размеров этикеток. (Сначала замените {variables} на примерный текст, поскольку Labelary не знает ваши данные о продукте.)

Если реальная этикетка выглядит неправильно — обрезанный текст, QR-код не сканируется, неверный размер — см. раздел об этикетках в Устранение неполадок.

Краткий справочник команд

Команда

Что она делает

^XA / ^XZ

Начало / конец этикетки. Всё находится между ними.

^PW

Ширина печати в точках.

^LL

Длина этикетки (высота) в точках.

^LH

Исходная точка этикетки — точка начала координат (обычно 0,0).

^FO x,y

Начало поля — позиционирует следующий элемент в точке x,y.

^CF0,h

Устанавливает высоту шрифта по умолчанию (h точек) для следующего текста.

^FD ... ^FS

Данные поля — содержимое для печати — закрывается разделителем поля.

^FX ... ^FS

Комментарий — игнорируется принтером. Не может содержать ^ или ~.

^MD

Интенсивность печати (затемнение). Чем выше, тем темнее.

^BQN,m,m

QR-код; последнее число — размер. Данные начинаются с QA,.

^BCN,h,...

Штрихкод Code 128; h — высота в точках.

^GB w,h,t

Нарисовать прямоугольник или линию (ширина, высота, толщина в точках).

^CI28

Кодировка символов, чтобы символы вроде печатались корректно.

Полное описание языка можно найти в руководстве по командам ZPL от Zebra, но перечисленных выше команд достаточно для печати почти любых этикеток изделий.