что такое epl и zpl
Небольшой путеводитель по ZPL
Добрый день, Хабрахабр.
Благодаря тепло принятой прошлой публикации, я могу опубликовать здесь эту статью. Спасибо всем, кто ставил плюсы.
По долгу службы мне частенько приходится формировать отчеты для этикеточных принтеров семейства Zebra.
Зебры они такие
Механизм формирования этикеток выглядит следующим образом: сначала с машины пользователя (компьютер, терминал сбора данных) на принтер отправляется специальным образом оформленная строка, затем внутренний процессор принтера обрабатывает эту строку, и выводит ее на печать.Но язык, на котором формируется строка для принтера (называется ZPL) на первый взгляд вызывает у непосвящённых нервную икоту и мандраж.
Прошу под кат, всех кто хочет разобраться в данном вопросе.
Пример:
А на печать выводится такой аккуратный бейджик:
Давайте разберемся, что же написано в этом коде, и рассмотрим основные элементы.
Первую часть своего выступления я посвящу разбору синтаксиса этого языка, в объеме достаточном для создания этикеток удовлетворительного качества. Во-второй части, приведу примеры кода на Java и VisualBasic, для того, чтобы отправить этикетку на печать самостоятельно. На основе этих примеров, вы сможете самостоятельно построить свою програму, для печати.
Часть 1. Синтаксис ZPL
Во первых, все измерения в ZPL указываются в точках (points). Поэтому, для более ясного представления вы должны посмотреть в документации на принтер, какая у вас плотность точек на единицу измерения длины.
Сначала кратко пробежимся по основным командам, затем рассмотрим их более подробно в связке.
1. Начало и конец ZPL-кода:
^XA – начало кода, ^XZ – конец кода;
2.Отступы для последующего содержимого:
^FO x,y где: x – отступ от левого края, y – отступ сверху;
3.Разделитель полей:
^FS — обозначает конец определения поля. Буквально можно считать его сигналом конца строки;
4.2. Вывод текста с параметрами указанными в предыдущем пункте:
^FD
Повернем, и изменим шрифт:
Изменим шрифт на S:
Обязательно запомните, что разные шрифты могут выглядеть по разному, в отношении размеров, как можно видеть выше. Я чаще всего использую шрифт S.
5.Блок текста:
Изменим код, чтобы было две строки, и расстояние между строчками сделаем в 10 точек:
А теперь сделаем отступ для второй строки в 30 точек влево:
6. Рисование прямоугольников:
Если хотим нарисовать просто линию, то рисуем прямоугольник с высотой равной 0:
7.Штрихкод состоит из трех команд – первая задает его размеры, вторая настройки и третья — содержание:
^BC – штрихкод в стандарте 128 (подробнее Code_128); Есть также еще несколько форматов, но ввиду того, что мне не приходилось ими пользоваться, в данной статье они рассматриваться не будут, и рекомендую посмотреть информацию по ним в официальной документации поставляемой к принтерам Zebra;
7.3. Вывод штрихкода на печать:
^FD
К сожалению, штрихкод нельзя поместить в «коробку», как текст, чтобы отцентрировать по ширине этикетки, и поэтому приходится шаманить с полями и отступами.
Перевернем, и укажем печатать расшифровку сверху (сейчас получилось снизу):
На этом остановимся на рассмотрении основных элементов ZPL, и перейдем к части второй, в которой вкратце рассмотрим механизм отправки информации на принтер.
Часть 2. Печать
Механизм передачи проще некуда. Для этого, мы должны знать IP, где находится принтер, и порт. Далее, формируем поток, который отправляем по указанному адресу, и получаем на выходе этикетку.
Пример на Visual Basic:
Как видите, ничего сложного. Надеюсь, что моя статья, облегчит путь отважным укротителям Зебр.
Засим позвольте откланяться. Жду советов, критики и поддержки.
Принтеры штрих кодов в автоматизации торговли
Принтеры штрих кодов и этикеток занимают важное место в процессе автоматизации торгово-складской деятельности. С помощью таких устройств можно организовать процесс этикетирования на малом, крупном или среднем предприятии.
Принтеры различаются по скорости, длине, ширине, разрешению и типу печати, а также поддержке различных интерфейсов, опций и аксессуаров. В этой статье мы расскажем начинающим автоматизаторам о том, какие бывают принтеры этикеток и как эффективнее их использовать, а также, почему стоит выбрать то или иное устройство.
По способу печати различают 2 основных типа принтеров: термо- и термотрансферные. Каждый из этих типов имеет свои особенности. Выбирать то или иное устройство необходимо исходя из конкретных условий.
• Настольные Принтеры данного класса занимают немного места в оснащении рабочих мест и имеют оптимальную производительность.
Как правило, они широко используются в офисах, на небольших предприятиях, где потребность в печати не превышает 5000 этикеток в сутки.
К настольным термопринтерам следует отнести Godex DT2/DT4, Zebra GK420D. Среди наиболее популярных компактных устройств термотрансферной печати выделяют Godex G300/G330, G500/G530.
• Промышленные Для оснащения крупных предприятий существуют целые линейки промышленных принтеров штрихкода.
Такие устройства имеют высокую производительность и возможность для установки специальных аксессуаров: намотчиков и держателей этикеток, роторного резака и т.д. Особый интерес на рынке вызвали такие модели как Godex EZ6200 plus, EZ6300 plus, EZ2200.за счет оптимального соотношения цены и качества.
• Мобильные Мобильные принтеры имеют немаловажное преимущество – компактный размер. Устройства могут работать автономно или от сети.
Они могут оснащаться как поддержкой беспроводных интерфейсов Wi-Fi (Sewoo LK-P11SW), так и Bluetooth (Sewoo LK-P11SB).
Термопечать
Термопринтеры имеют привлекательную стоимость и невысокую стоимость обслуживания. В качестве расходных материалов нужна только термобумага. Срок службы таких этикеток до момента выцветания составляет несколько месяцев, в зависимости от температурных условий. Однако стоимость печати и расходных материалов очень доступная. Оптимальным выбором термопринтер станет для оснащения кассы быстрого обслуживания или изготовления билетов, где этикетка изготавливается на несколько часов или дней, а впоследствии утилизируется. Термоэтикетку можно определить, проведя ногтем по ее поверхности, в результате чего должен остаться черный след.
Термотрансферная печать
Технологии термотрансферной печати применяются в промышленных условиях. Высокое качество, долговечность и устойчивость к истираниям объясняется технологиями термопереноса. То есть, в отличие от термопечати здесь идет использование красящего слоя (риббона). Срок службы термотрансферных этикеток может составлять несколько лет. Еще один плюс – разнообразие материалов, включая печать на синтетических, нейлоновых лентах, глянце и т.д. Как правило еще их называют полуглянцевыми. Бумажные этикетки для термотрансферной печати используются чаще за счет доступной стоимости и применяются для локальных инвентаризаций и маркировки. Однако синтетические имеют более высокую устойчивость к влаге и истираниям.
Термотрансферные принтеры могут выпускаться как в компактном настольном корпусе, так и в промышленных сериях для большого объема печати.
Сравнительная характеристика термо- и термотранферной печати.
термопечать | термотрансферная печать | |
носители | термобумага | нейлоновые, синтетические, полимерные этикетки, |
расходные материалы | только термоэтикетки | термотрансферные этикетки, риббоны |
риббоны | не используются | воск (WAX), смола (RESIN), воск+смола (WAX+RESIN) |
разрешение печати | 203/300 dpi (от модели) | 203/300 dpi (от модели) |
срок службы этикетки | несколько месяцев | несколько лет |
стойкость краски к истираниям, механическим воздействиям, критическим условиям | низкая | высокая |
средний ресурс печатной головки | около 50 км | около 50 км. |
наиболее популярные принтеры | Godex DT2, Godex DT4, ZEBRA GK420d (USB+RS232+LPT) | Godex G300/330, Godex G500/G530, Godex RT700/730. |
Программирование принтеров
Современные принтеры этикеток поддерживают работу с программными продуктами 1С различных версий. Для того чтобы распечатывать этикетки из программы достаточно установить Windows драйвер. Также для тех, кто привык работать с Linux, существуют драйверы для этой ОС.
У каждого производителя принтеров этикеток есть специальное ПО.
Если сравнивать программное обеспечение этих 2 марок, то у Godex преимуществ больше.
Принтеры Zebra оснащены тестовым ПО ZebraDezigner. Полные версии в комплект не входят, и их необходимо приобретать за дополнительную плату. У принтеров Zebra управление устройствами выполняется с помощью языков программирования ZPL и EPL.
Принтеры Godex оснащаются бесплатной программой GoLabel, а набор команд задается на специальном языке программирования Godex EZPL, при этом устройства способны распознавать и языки ZPL и EPL. При этом принтеры поддерживают режим автопереключения.
Программа GoLabel позволяет создавать и редактировать макеты этикеток, синхронизироваться с базой 1С. Программа оснащена широким набором базовых шрифтов и поддерживает загрузку дополнительных, что позволяет полностью обслуживать принтер и делать даже сложные макеты этикеток. В отличие от профессиональной программы Bartender, она полностью бесплатна и имеет достаточно широкий функционал, включая работу с SQL. GoLabel — комплексное ПО для подключения принтера, осуществления настроек, работы с макетами, загрузке шрифтов и т.д.
Язык описания печатных страниц
ZPL – Zebra Programming Language – язык описания печатных страниц, так называемый PDL (Page Description Language). Существует множество PDL. Практически каждый производитель принтеров имеет свой язык описания страниц. Такой язык позволяет описать страницу высокоуровневыми командами, которые будут интерпретированы принтером в низкоуровневые. Наиболее известный PDL – PostScript от компании Adobe. PDL позволяет описывать страницу объектами. Что делает программу не зависимой от конкретной аппаратной платформы печатающего устройства. Принтер получает команды на печать квадрата, символа или линии и нас не волнует, как это будет реализовано. Принтер сам знает, как это сделать. Вот в чем главное достоинство PDL.
Американская компания Zebra Technologies разработала ZPL главным образом для создания и печати этикеток. Этикетки могут содержать текст, штрих коды и простую графику. Такие этикетки печатаются специальными Zebra принтерами, которые применяются в торговле для печати квитанций и чеков.
Существует два стандарта: ZPL и ZPL ll.
Отличия
Основной причиной развития ZPL II было существенное сокращение времени между тем, когда принтер начинает получать данные и когда первый символ поступит на печатать. Это было сделано прежде всего путем изменения способа написания программ ZPL.
Стандарт ZPL II совместим со стандарт ZPL не на 100%. Но различия между ZPL II и ZPL минимальны. И, уже существующие программы на ZPL можно с легкостью модифицировать до уровня ZPL ll. Есть и обратная совместимость. То есть вы можете писать программы на ZPL ll под принтеры ZPL, естественно учитывая старый синтаксис.
Итак, вот два основных отличия между ZPL ll и ZPL:
1. В ZPL II данные форматируются сразу же как получены. А в стандартном ZPL форматирование не начнется пока не будет получена команда завершения форматирования ^XZ.
2. В ZPL ll появилось много новых команд:
^ JM, ^ LH, ^ LL, ^ LR, ^ LS, ^ PM, ^ PO, ^ PR и ^ PF
Синтаксис
Но, рассматривать язык программирования без примеров пустое занятие. Поэтому, я приведу код программы для печати простой этикетки, и мы рассмотрим синтаксис.
И получим в итоге такой талон для контроля доставки:
Как видите код начинается с тэга (команды) ^XA и заканчивается тэгом ^XZ. Код разделен комментариями на четыре секции для удобства рассмотрения.
1) В первой секции выводится логотип компании и ее юридические данные:
Понятно, что тэг ^FX означает комментарий.
^CF x, y, z – настройки шрифта по умолчанию: шрифт, высота и ширина.
Далее рисуем логотип из четырех кругов:
^GC x,y – нарисовать круг. Диаметр – x, толщина рамки – y.
^FD – поле данных.
2) Во второй секции новых тегов нам не попадается.
3) В третьей секции мы добавляем штрих код:
^BY x,y,z – ширина, ширина полос, высота.
4) В четвертой секции появился еще один тэг:
^GB x,y,z – прямоугольник. Ширина, высота, толщина рамки.
Вот таким небольшим набором тэгов мы описали всю печатную страницу. Согласитесь, ничего сложного. Нужно просто подбирать расстояние в точках. Все измерения тут именно в точках.
Конечно, мы рассмотрели очень малую часть команд ZPL, но теперь у вас есть некоторое представление об этом языке.
В интернете есть множество онлайн интерпретаторов ZPL кода. Так что вы всегда можете протестировать его визуально.
Быстрая печать этикеток (ZPL, EPL, TSPL, EZPL, GEPL, TSPL-EZ)
С вводом маркировки товаров для многих стал актуальным вопрос печати на принтерах этикеток. К сожалению, стандартная печать этикеток через формируемый табличный документ оставляет желать лучшего как по скорости работы, так и по качеству печати. И здесь приходит на помощь печать этикеток с помощью внутренних команд принтера. Различные производители торгового оборудования включают поддержку разных языков для своих устройств, но принцип печати везде один: формируем код на встроенном языке и отправляем его на принтер.
В параметре «СистемноеИмяПринтера» передаем имя принтера как он называется в системе. Общий доступ к принтеру открывать не требуется. Если используется сетевой принтер, то указываем полный путь к принтеру.
Пример использования
Для использования загружаем компоненту в общий макет вашей конфигурации. В моем примере он называется ме_LabelPrinterComponent. Формируем необходимый код этикетки и отправляем на печать через соответствующий метод компоненты.
Универсальное расширение конфигурации
Для компоненты сделано расширение, которое можно загрузить в любую конфигурацию. Компонента загружена в общий макет «ме_LabelPrinterComponent». При первом вызове функции 1С сама установит компоненту на компьютере пользователя. Работа поддерживается как на толстом, так и на тонком клиенте.
В модуле «ме_ПечатьЭтикеток» добавлены две функции, одна используется для отправки на печать этикетки. Вторая позволяет получить список установленных в системе принтеров. Для получения списка принтеров используется COM-объект WScript.Network. При первом вызове этого метода потребуется разрешить подключение этой библиотеки. Чтобы скрыть это уведомление отключите безопасный режим для этого расширения.
Для тестирования печати добавлена обработка. Она позволяет отправить на принтер любой текст, в том числе этикетку на внутреннем языке принтера.
Расширение можно подключить к любой конфигурации на управляемых формах. Для обычных форм компонента также будет работать, только потребуется перенести общий модуль, макет и обработку в Вашу конфигурацию.
Работа компоненты была протестирована на следующих платформах:
Протестировано на следующих конфигурациях:
Планы на развитие функционала:
1. Добавить функцию получения списка принтеров
2. Добавить отправку на печать с получением ответа от принтера (Нужно для получения данных RFID. При наличии подходящего принтера)
Внимание: В текущей версии компоненты есть проблема при печати на сетевой принтер. Пока не исправил.
Печать этикеток в формате ZPL/EPL
Данная компонента создана для отправки данных на принетры этикеток. Другие способы отправки данных на принтер (Например с использованием команд net use и copy) не работали, в случае когда принтер был подключен к компьютеру в сети.
Данный способ позволяет быстро выводить на печать этикетки, используя команды обрабатываемые принтером.
Компонента создана с использованием Native API, поэтому должна работать только на 1С 8. Тестировалась только на версии 1С предприятия 8.2.
1. Установка и регистрация компоненты
Для работы данной компоненты необходмио наличие установленного NET.Framework 4. Скопируйте файлы из архива в каталог на локальном компьютере (Например C:AdmCOM). Регистрация компоненты в системе выполняется с помощью комнадного файла:
2. Настройка принтера для работы
Для печати на принтере с использованием команд ZPL (EPL) необходимо закачать нужные шрифты и изображения на принтер, используя ПО поставляемое с вашим принтером. Я закачиваю данные на принтеры используя программу «Zebra Designer Font and Graphics Downloader» из состава «Zebra Setup Utilities».
Предоставляем общий доступ к принтеру по сети.
Обращение к принтеру будет осуществляться по адресу принтера: «\Имя компьютераИмя принтера» или «Имя принтера», если используется локальный принтер.
3. Подготовка этикетки для печати на принтере
Этикетка формируется в виде команд принтера для печати нужного текста и изображений.
Пример этикетки в формате ZPL:
Описывать команды ZPL и EPL не буду. Этой информации много в интернете.
Формирование этикетки производится по макету:
В приложенной обработке есть пример формирования этикетки и отправки на принтер. Обработка проверялась на УПП, но должна работать и на других конфигурациях.
4. Описание функций библиотеки
Функция «SendRawDataStringToPrinter», («ОтправитьСтрокуДанныхНаПринтер»)
Описание:
Отправляет строку данных в порт принтера. В строке передаются команды для печати эткетки.
Параметры:
Адрес порта — Строка, Имя принтера
Команда — Строка, Команды для отправки на порт.
Возвращаемое значение:
Истина — Данные отправлены на печать упешно
Функция «SendRawDataFileToPrinter», («ОтправитьФайлДанныхНаПринтер»)
Описание:
Отправляет файл в порт принтера. В текстовом файле передаются команды для печати этикетки.
Параметры:
Адрес порта: — Строка, Имя принтера
Имя файла — Имя файла для отправки на принтер.
Возвращаемое значение:
Истина — Данные отправлены на печать упешно
Функция «BackgroundSendRawDataFileToPrinter», («ФоноваяОтправкаФайлаДанныхНаПринтер»)
Описание:
Фоновая отправка файла на принтер. Компонента вернет управление 1С не дожидаясь окончания печати. Используется при отправке на печать большого числа этикеток.
Параметры:
Адрес порта: — Строка, Имя принтера
Имя файла — Имя файла для отправки на принтер.
Возвращаемое значение:
Истина — Данные отправлены на печать упешно
5. Пример работы с библиотекой
Отвечая на комментарии, понял что нужно все-таки выложить простенький примерчик работы с библиотекой:
// Для Управляемых форм сначала подключаем компоненту