Файлы с расширением .zpl представляют собой текстовые документы, содержащие инструкции на языке Zebra Programming Language (ZPL). Этот язык используется принтерами этикеток Zebra и многими другими совместимыми устройствами для формирования макета печати. Часто разработчики сталкиваются с ситуацией, когда нужно увидеть содержимое этикетки без наличия физического принтера под рукой. Рассмотрим подробно, как это сделать, и разберем нюансы работы с кириллицей.
Для начала проанализируем структуру файла. Если мы откроем такой файл обычным текстовым редактором (например, Блокнотом или Notepad++), мы увидим набор команд, начинающихся с символа ^ или ~. Каждая команда отвечает за определенное действие: установка шрифта, печать штрихкода, отрисовка линий или вывод текста.
Основные управляющие команды, которые мы можем встретить:
^XA — начало формата этикетки.^XZ — конец формата этикетки.^FO — установка позиции (Field Origin).^A0 — выбор встроенного масштабируемого шрифта.^FD — данные поля (Field Data).^FS — разделитель полей (Field Separator).Если принтера нет, мы можем воспользоваться специализированными визуализаторами. Разберем наиболее популярные варианты:
Часто при просмотре ZPL-файла в онлайн-визуализаторах русский текст отображается некорректно («кракозябрами»). Выясним причину этой проблемы. По умолчанию ZPL настроен на латиницу. Чтобы принтер или программа-эмулятор поняли, что мы используем кириллицу, нужно явно указать кодовую страницу.
Рассмотрим, как изменить кодировку в коде. Сразу после команды ^XA необходимо добавить команду ^CI (Change International Font). Для работы с UTF-8 используйте ^CI28. Если ваш текст в кодировке Windows-1251, попробуйте ^CI17.
Пример корректного начала файла для поддержки русского языка:
^XA
^CI28
^FT100,100^A0N,50,50^FDПривет, мир!^FS
^XZ
В предоставленном примере кода мы видим использование шрифтов с префиксом E:, например, E:ARIAL8B.FNT. Это означает, что шрифт не является стандартным для принтера, а был загружен в его энергонезависимую память. Рассмотрим, почему визуализаторы могут его не показывать:
Поскольку у онлайн-сервиса нет доступа к памяти вашего конкретного принтера, он не знает, как выглядит этот шрифт, и может заменить его стандартным или выдать ошибку. Чтобы «увидеть» этикетку в отладочном режиме, попробуйте временно заменить вызов внешнего шрифта на стандартный встроенный шрифт Zebra ^A0.
Проанализируем пример замены:
Было: ^FT39,846^A@B,33,36,E:ARIAL8B.FNT^FH\^FDКПБ 2.0 макси^FS
Стало: ^FT39,846^A0B,33,36^FH\^FDКПБ 2.0 макси^FS
Многие пользователи утверждают, что «у них в 1С все открывается». Как правило, это реализовано через интеграцию с API визуализаторов. Мы можем программно отправить ZPL-текст на сервер и получить готовую картинку этикетки для вывода на форму 1С.
Разберем алгоритм реализации такого просмотра в 1С:
Пример функции для получения картинки из ZPL-кода (упрощенно):
Функция ПолучитьКартинкуЭтикетки(ТекстZPL)
Сервер = "api.labelary.com";
Ресурс = "/v1/printers/8dpmm/labels/4x6/0/"; // Параметры плотности печати и размера
НТТРЗапрос = Новый HTTPЗапрос(Ресурс);
НТТРЗапрос.УстановитьТелоИзСтроки(ТекстZPL);
Соединение = Новый HTTPСоединение(Сервер,,,,,, Новый ЗащищенноеСоединениеOpenSSL());
Ответ = Соединение.ОтправитьДляОбработки(НТТРЗапрос);
Если Ответ.КодСостояния = 200 Тогда
Возврат Ответ.ПолучитьТелоКакДвоичныеДанные();
КонецЕсли;
Возврат Неопределено;
КонецФункции
В вашем файле встречаются блоки, начинающиеся с ^GFA. Это команды для вывода графики (логотипов или специальных символов) в бинарном виде. Зачастую они кодируются алгоритмом сжатия (например, :Z64:). Если при просмотре вы не видите логотипа, это означает, что визуализатор не поддерживает данный тип сжатия. В 1С такие данные обычно генерируются автоматически при помощи специальных внешних компонент при формировании макета.
Важный совет: Если структура файла кажется нарушенной (например, несколько блоков ^XA...^XZ), попробуйте разделить файл на части. Некоторые простые просмотрщики могут обрабатывать только одну этикетку за раз. Оставьте только ту часть кода, которая находится между второй парой ^XA и ^XZ, чтобы увидеть основное содержимое этикетки.
Подводя итог, просмотр ZPL без принтера — задача вполне решаемая. Главное — правильно настроить кодировку кириллицы через ^CI28 и использовать надежные инструменты визуализации или интеграцию через API для отображения макетов прямо в интерфейсе 1С.