Как просмотреть файл ZPL и настроить его отображение в 1С

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

Файлы с расширением .zpl представляют собой текстовые документы, содержащие инструкции на языке Zebra Programming Language (ZPL). Этот язык используется принтерами этикеток Zebra и многими другими совместимыми устройствами для формирования макета печати. Часто разработчики сталкиваются с ситуацией, когда нужно увидеть содержимое этикетки без наличия физического принтера под рукой. Рассмотрим подробно, как это сделать, и разберем нюансы работы с кириллицей.

Что такое ZPL и как он устроен

Для начала проанализируем структуру файла. Если мы откроем такой файл обычным текстовым редактором (например, Блокнотом или Notepad++), мы увидим набор команд, начинающихся с символа ^ или ~. Каждая команда отвечает за определенное действие: установка шрифта, печать штрихкода, отрисовка линий или вывод текста.

Основные управляющие команды, которые мы можем встретить:

Инструменты для визуального просмотра ZPL

Если принтера нет, мы можем воспользоваться специализированными визуализаторами. Разберем наиболее популярные варианты:

  1. Онлайн-сервис Labelary: Это самый простой и популярный способ. Мы просто копируем текст из файла и вставляем его в окно редактора на сайте. Сервис мгновенно рендерит картинку этикетки.
  2. ZPL Designer: Локальное программное обеспечение, которое позволяет не только просматривать, но и редактировать макеты в визуальном режиме.
  3. Расширения для VS Code: Если вы занимаетесь разработкой постоянно, установите расширение "ZPL Viewer". Оно позволяет видеть результат отрисовки прямо рядом с кодом.

Решение проблемы с кириллицей и кодировкой

Часто при просмотре 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С

Многие пользователи утверждают, что «у них в 1С все открывается». Как правило, это реализовано через интеграцию с API визуализаторов. Мы можем программно отправить ZPL-текст на сервер и получить готовую картинку этикетки для вывода на форму 1С.

Разберем алгоритм реализации такого просмотра в 1С:

  1. Получаем текст ZPL-файла в строковую переменную.
  2. Формируем HTTP-запрос к API (например, к Labelary).
  3. Отправляем POST-запрос, в теле которого содержится наш ZPL-код.
  4. Получаем ответ в формате PNG или PDF.
  5. Отображаем полученный двоичный контент в поле картинки на форме.

Пример функции для получения картинки из 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С.

← На главную