Маркировка: Язык EZPL принтеров GODEX и программа GoLabel

Число просмотров: 12 493 

Принтер Godex G500 и напечатанные этикетки на EZPL

Принтер Godex G500 и напечатанные этикетки на EZPL

Всем привет! Вот блин когда я ради прикола делал себе расклад на Таро на тему того, какой из принтеров мне брать: WAGO SmartPrinter или GODEX G500, который я в итоге и купил, то там про Godex было сказано что он будет родным чем-то. И тогда я ещё тупил как это читать в раскладе и о чём речь шла =) В итоге оказалось, что я с этим принтером разве что только ещё не спал в обнимку. Я с ним постоянно таскаюсь и чего-нибудь печатаю или генерирую новые идеи о том, как бы его применить. Если вы помните предыдущий пост про него (на который я ссылку давал в начале абзаца), то вы видели что я печатал на Godex маркировку для модульки, кабелей и прочих штуковин в щитах. У меня появились идеи применить его ещё и для того, чтобы печатать всякие этикетки на коробки с материалами, на папки с документами по щитам (чтобы не потерять) и для кучи всего другого.

Но встал один вопрос: как сократить геморрой, связанный с постоянной перенастройкой свойств принтера в Windows под разные этикетки и параметры печати? Конечно же, этот вопрос я решил (потому что большинство материала на блоге как раз и пишется в состоянии «Я — сделал! И могу вам сделать так же!»), но я хочу показать вам то, как я дошёл до своих решений и с чем столкнулся.

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

Различные типы и форматы этикеток для печати

Различные типы и форматы этикеток для печати

Некоторое время (довольно небольшое) я делал всё, как описывал в прошлых постах: брал WAGO SmartScript, подбирал там шаблон и макет этикетки, менял текст и печатал всё это на принтере. У меня начали собираться файлы шаблонов. Каждый из них я открывал руками, менял там данные на те, которые мне нужны сейчас, настраивал принтер и печатал. Вроде всё шло ровно и гладко и мне даже нравилось, но внутри точил какой-то червь, который вкрадчиво говорил мне, что СТОЛЬКО возни ради того, чтобы напечатать одну этикетку на папку с документами — это хрень и что надо думать дальше, как это всё автоматизировать и упрощать!

Ну а потом — я ЗАДОЛБАЛСЯ, после того как раз пять поделал такие этикетки, и стал изучать тему принтеров маркировки глубже, чтобы упростить себе задачу. Ничего пока не понятно, да? ;) В чём был геморрой? А вот я сейчас и расскажу. Итак, если мы хотим сделать какую-то этикетку в любой программе (можно хоть в Word), то сначала нам надо её отрисовать и несколько раз протестировать, как она печатается: не вылезает ли за ленту этикеток, всё ли печатается, ничего ли не теряется? После того, как мы изведём несколько метров этикеток, мы получим наш шаблон. Положим, он будет выглядеть вот как-то так:

Разработка этикетки в программе WAGO SmartScript

Разработка этикетки в программе WAGO SmartScript

Это скриншот заготовки двух этикеток в WAGO SmartScript. Каждый раз, когда нам надо напечатать какие-нить этикетки на материалы, нам надо открывать наш шаблон и вручную набивать тексты — как там звали контрагента, какой у него номер заказа был и прочее. И это у меня ещё простенькая этикетка, для тестирования! А вот когда я начал печатать шильдики на щиты — то тогда и начал плакать, заполняя данные вручную из своей 1Ски для каждого щита. Всего лишь ради одной-двух наклеек.

Но это ещё не вся часть геморроя. Ведь этикетки у меня же РАЗНЫЕ! Например есть 100х60 для печати шильдиков на крупные щиты. А есть 100х35 для материалов или 58х30 для мелких наклеек на папки с документами. Для КАЖДОЙ из них надо было создать свои настройки печати и подогнать принтер и шаблон под них. Вон, сколько их пришлось добавить. И это ещё хорошо, что в драйверах Godex есть фича экспорта-импорта этих настроек. Иначе было бы совсем плохо.

Настройка драйверов принтера под нужный формат печати

Настройка драйверов принтера под нужный формат печати

Дальше мы берём наши этикетки и заправляем их в принтер.

Установка этикеток нужного формата в принтер

Установка этикеток нужного формата в принтер

…но и это ещё не всё! Если мы печатаем из-под Windows, то после этого принтер надо почти всегда калибровать! Для этого мы выключаем его питание, зажимаем кнопку, включаем питание. После того как принтер пикнет, отпускаем кнопку. И принтер радостно пролистывает некоторое количество ленты с этикетками (от нескольких сантиметров до метра), подстраивая датчики под их размеры.

Куча этикеток ушла в труху при калибровке принтера

Куча этикеток ушла в труху при калибровке принтера

Ну а потом можно печатать наши две или четыре этикетки на материалы.

Напечатанная этикетка из программы WAGO SmartScript

Напечатанная этикетка из программы WAGO SmartScript

Полезным от этого всего было то, что задания печати оставались в очереди принтера (для этого в Windows-настройках печати надо поставить галочку «Сохранять задания после печати») и при желании их можно было повторить ещё раз (выбрав из контекстного меню пункт «Перезапустить»).

Задание печати от WinPrint осталось в системе

Задание печати от WinPrint осталось в системе

Вот честно. Вы бы расстроились, купив принтер, в котором есть тьма возможностей (и сетка, и большой рулон риббона, и большая ширина печати), и КАЖДЫЙ РАЗ при смене этикеток выкидывая ТАКОЙ кусок этикеток в помойку? А если это будут этикетки для модульки, которых на таком кусок может быть штук 100 из рулона в 3000 штук?

Огромный расход этикеток при печати WinPrint

Огромный расход этикеток при печати WinPrint

И вообще, вас бы радовал весь этот геморрой с перенастройкой свойств принтера для каждого типа этикеток? Меня дико не радовал и я даже пытался себе врать, что я типа принимаю этот принтер таким какой он есть и что на самом деле всё хорошо и так и надо, и ничего не поделаешь. И что все остальные системы печати из 1С, из специальных программ якобы сложные, потому что там есть какой-то язык программирования EZPL, нужны какие-то компоненты и что наверное там каждую точечку этикетки надо будет программировать или нудно вычислять, какая ширина текста будет в точках, чтобы правильно его рисовать… А самое «страшное», чего я боялся — что все мои этикетки в итоге смогут быть только простыми и лаконичными, и что кроме текста ничего в них не напишешь.

Но я ошибался, потому что может быть лет десять назад именно всё так и было (когда я админил на Фабрике АБТ), но сейчас всё проще и интереснее. Но перед тем, как радоваться новым интересностям, я расскажу немного теории, чтобы опять же тот, кто читает этот пост, не боялся и знал, с чем он столкнётся. Ну а вообще именно Godex меня пропёр своей техподдержкой, своей лаконичностью и удобностью, что я с их принтерами работать дальше и хочу и буду рекомендовать их всем, кто спросит.

Итак, для любого принтера (даже обычного) есть два способа печати. Один из них можно обозвать как WinPrint, а другой как RAW. Мы чаще всего пользуемся именно WinPrint’овским способом, когда печатаем при помощи штатных диалогов «Печать…», где можно выбрать число копий, двухстороннюю печать и прочие настройки принтера. Windows создаёт для нас задание печати, следит за тем, пошло ли оно на принтер и управляет самим принтером. Если почитать программерские книжки по поддержке печати в Windows, то там будет рассказано о том, как операционная система считывает метрики принтера, страницы, печатаемого документа. Как программы получают размеры TrueType-шрифтов, как это всё правильно масштабируется и рисуется на DC (Device Context или Canvas в Deplhi) принтера так же как на экране.

Технически в этом случае на принтер передаётся огромный метафайл (картинка в формате EMF), который принтер поточечно выводит на бумагу или этикетку, совершенно не зная про конкретные шрифты, про страницу и прочее. И вот для всего этого принтеру и требуются настройки бумаги и полей. В том числе такие же настройки требуются и для этикеточного принтера. А если их задать неправильно — то мы получим или плохо отмасштабированную этикетку или хрен знает что. Поэтому для этого способа печати как раз-таки и надо будет постоянно лазить в настройки дров и калибровать принтер под текущие этикетки.

А ещё иногда бывают проблемы с масштабированием. Например Visio на обычных принтерах умеет масштабировать всё так, что даже точные миллиметры соблюдаются, а на Godex масштаб всегда сбивается в 100 раз меньше. Зато тут у нас есть куча удобных галочек и ещё и Windows штатно следит за заданиями печати, и может их даже нам на память сохранить, как я выше и показывал.

Но те, кто знакомы со всякими промышленными (и не очень) принтерами, знают что у некоторых принтеров есть свой собственный язык команд. Насколько я знаю — у HP это язык PCL. Такой же по смыслу язык есть у Adobe с своих PDF и других продуктах. Эти языки я обозвал у себя в посте типом RAW, потому что если мы общаемся с принтером таким языком, то на него передаются низкоуровневые команды, а не какой-нибудь там отрисованный метафайл.

Мда, кривоватое пояснение получилось. В общем, у некоторых принтеров есть способ забить на WinPrint нафиг и работать с принтером совсем-совсем напрямую. Загрузить в него JPEG и сказать: «А нарисуй-ка его вот тут!» или загрузить шрифт(ы) и попросить его написать ими текст. В обычных принтерах такое используется, скорее всего, во всякой полиграфии. А вот для принтеров этикеток и штрих-кодов такой способ работы наоборот — самый что ни на есть основной!

Самое главное — это то, что такие команды принтер понимает НАПРЯМУЮ без Windows. Поэтому в этом случае никакие настройки драйверов (размер бумаги и прочее) не действуют ВООБЩЕ. Для нас это очень-очень хорошо, потому что мы сможем моментально перенастраивать принтер на нужную нам этикетку программно!

Так вот у GODEX есть свой собственный язык команд — EZPL (EZ Programming Language), при помощи которого с принтером можно делать что угодно: он становится как послушная зверушка. Я попробую свести в кучу всё, что узнал про этот язык. Большинство этой информации подходит ко всем другим принтерам (Zebra, например). Ну разве только что команды будут различаться.

  • Команды чаще всего текстовые и пишутся английскими буквами со специальными управляющими символами — например «^H10».
  • Все координаты объектов даются в точках. Если нам нужны миллиметры — то надо будет самостоятельно пересчитать точки в миллиметры в зависимости от текущего разрешения принтера.
  • Команды можно давать как на терминал — сразу пачкой, частями. В конце всего даётся специальная команда, которая и заставляет принтер напечатать то, что вы в него понапосылали. У Godex это команда «E» (без управляющего символа).
  • В этом случае принтер ВООБЩЕ не знает ни о каких шрифтах или картинках. Поэтому всё, что вы хотите на нём печатать — вам придётся в него загрузить руками. Вот хотите напечатать JPEG-логотип? Загружайте его в принтер, и печатайте. Это — самое главное отличие от технологии WinPrint, где на принтер просто посылается готовая картинка. Со шрифтами — точно также. Можно загрузить в принтер TrueType-шрифт, и он будет его рисовать и масштабировать сам.
  • Память принтера ограничена и построена на базе Flash-технологии. Поэтому слишком много в него непоназагружаешь — или не хватит места, или если постоянно загружать всё подряд, внутренняя флешка сдохнет. Но обычно этого не требуется, потому что в итоге, когда с принтером осваиваешься и затачиваешь его под свои нужды, из шрифтов будет нужно два-три или пять, а из картинок — чуть ли не один логотип, и больше ничего.
  • Внутри память принтера разбита на ячейки, которые обозначаются буквами английского алфавита A-Z. И в командах и пишется что-то типа «ATA» — текст шрифтом из ячейки «A».
  • Все штрих-коды рисуются самим принтером тоже командами. Поэтому можно забыть про всякие платные обработки рисования штрих-кодов для 1С, например.
  • Через эти команды можно настроить все-все, даже системные параметры принтера: и нагрев, и скорость печати и кучу всего ещё.
  • А самое главное в том, что если мы меняем размер этикетки командами EZPL, то принтеру нафиг не нужна перекалибровка! Если мы поменяли размер и заправили новые этикетки, то первую-вторую из них он напечатает криво, а потом сразу сам подстроится под новый размер! И прощай, длинные метры ленты! УРА! Иногда бывают и косяки, и не всегда принтер перестраивается гладко. Но одна перекалибровка на десяток смен этикеток — это вам не каждый раз по метру ленты выкидывать!

И вот тут я испужался: это ж придётся читать PDF на 200 страниц на английском, потом изучать всякие координаты, команды и пробовать, пробовать… Но оказалось всё гораздо проще. Конкретно у Godex вместе с принтером идёт программа GoLabel, в которой можно проделать всё тоже самое, что можно делать командами принтера. И вот про неё я сегодня порасказываю.

Единственное, что у этой программы дерьмовое — это интерфейс. Вот насколько Godex красиво написал свои драйвера для принтера, в которых очень много настроек, удобных окошек, настолько плохо у него сделана GoLabel. Самое главное — в ней нет функции отмены последнего действия (Ctrl+Z или Alt+Backspace). Случайно ткнул мышкой не туда — и сдвинул какую-нибудь рамку этикетки. Ну а сами менюшки и рабочая область сделаны под мудацкий ленточный интерфейс, в котором хер что найдёшь: без надписей кнопки непонятны, потому что использованы нестандартные значки, а с надписями кнопки отжирают огромную часть экрана.

Но временно (потому что потом я покажу, как я сделал кучу шаблонов) от этой программы никуда не деться, потому что при помощи неё можно сделать кучу низкоуровневых настроек принтера: например, настроить IP-адрес для того, чтобы он работал по сети, а не по USB. Программа может работать в один момент времени только с одним принтером. Каким именно — надо указать в настройках программы «Основной -> Настройки Печати -> Интерефейс принтера».

Внимание! Если принтер сетевой, то программа коннектится к принтеру по TCP/IP и для неё надо создать правило в файерволле. Если правила не будет и файерволл будет блокировать доступ программы к сетке, то она будет показывать ошибку подключения к принтеру и сразу же падать. Видать разработчики где-то в коде решили не делать парочку проверок на ошибки открытия порта TCP/IP в расчёте «А, ну если тут прошло — то уже ничего не будет».

Главное окно программы поделено на выбор всяких объектов для рисования и на область команд справа. Эта область команд и есть самая главная фишка программы, и нам она потом очень-очень пригодится для создания своих шаблонов.

Программа GoLabel: рабочая область для рисования этикетки

Программа GoLabel: рабочая область для рисования этикетки

Сразу же при запуске программа спрашивает нас, этикетку какого размера мы хотим создать. Рисует она её странно: левые-правые поля показывает верно, а верх-низ куда-то смещает за границы этикетки. Поэтому я указываю только левые-правые поля, а верх-низ — нет.

Программа GoLabel: настройка размеров этикетки

Программа GoLabel: настройка размеров этикетки

На другой вкладке можно настроить ещё и тип этикетки. Если вы помните прошлый пост, то такие же настройки были в драйверах принтера. Но там их пришлось бы менять каждый раз, а в GoLabel они будут храниться для каждой этикетки персонально.

Программа GoLabel: настройка типа этикетки

Программа GoLabel: настройка типа этикетки

Также в GoLabel есть все системные команды принтера. Принтер можно откалибровать, перезагрузить, закачать в принтер какие-нибудь объекты или удалить их оттудова. Интерфейс программы всё-таки ужасен. Он напоминает мне полукривые поделки на Visual Basic, увешанные тьмой компонентов =)

Программа GoLabel: меню для системных настроек принтера

Программа GoLabel: меню для системных настроек принтера

При помощи GoLabel можно настроить самое главное — IP-адрес принтера, чтобы он работал по сети. Я у себя подсел на сетевые принтеры и давно забыл про USB кроме флешек. Сейчас даже всякие контроллеры по сетке прогаются.

Программа GoLabel: настройки IP-адреса принтера

Программа GoLabel: настройки IP-адреса принтера

Если хочется — то ещё можно настроить принтер так, чтобы он и EMail слал при всяких ошибках или работал по SNMP. И напоминаю, при этом принтер стоит около 20-22 тыр!

Программа GoLabel: настройки SNMP и EMail-уведомлений от принтера

Программа GoLabel: настройки SNMP и EMail-уведомлений от принтера

Чтобы чего-нибудь делать с нашей этикеткой, надо выбрать какой-нибудь объект (линию, прямоугольник, штрих-код или текст) слева на панели и нажать на него один раз мышкой. А после этого ткнуть мышкой в этикетку. Сразу откроется окно всех возможных настроек для элемента. Я выбрал обычный штрих-код по EAN13, но вариантов этих кодов — навалом. Для каждого штрих-кода настраиаются его высота, ширина и поворот.

Настройки для обычного штрихкода

Настройки для обычного штрихкода

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

Изменение расположения элементов этикетки

Изменение расположения элементов этикетки

Технически в EZPL это реализовано по местоду «Кто первый встал — того и тапки». Что первым нарисовали — то и будет под следующим нарисованным. Также можно рисовать всякие другие штрих-коды. Например QR-код, который сейчас везде популярен. Это код, который может содержать многострочный текст. Сейчас у нас удобно кодировать в него какой-нибудь URL: с информацией про товар, объект или чего-нибудь подобное.

Настройки для отрисовки QR-кода

Настройки для отрисовки QR-кода

Размер QR-кода напрямую зависит от количества данных, которые в нём закодированы. Чем длиньше строка текста — тем больше сам код по ширине и высоте. Поэтому проверяйте размер кода на максимально длинной строке данных, чтобы он у вас потом за край этикетки не вылез. Для меня ещё и ещё раз было удивительно то, что принтер все эти коды генерирует сам. Например для QR-кода ему достаточно дать команду типа «W6,14,5,2,Q,8,5,16,0 https://cs-cs.net«, и всё будет нарисовано аппаратно.

Теперь поразбираемся со шифтами. В них есть много наворотов и разных типов шрифтов:

  • Встроенные шрифты. Это шрифты, которые зашиты в принтер намертво. Точнее, один шрифт, который зашит в нескольких размерах.
  • Загруженные шрифты. В этом случае шрифт в принтер грузится как картинка bmp, и поэтому можно выбрать только один шрифт и только одного размера. Зато этим шрифтом можно фигачить многострочный текст автоматически (принтер сам будет переносить буквы на новую строку).
  • Шрифты TrueType. Здесь в принтер грузится шрифт целиком, и принтер сам меняет его размер как нам надо. Но многострочный текст в этом случае напечатать будет нельзя, и надо будет переносить его самостоятельно, разбивая всё на строки руками. Зато шрифт можно загрузить один раз и использовать в нужных размерах без заморочек.

Настройки вывода шрифтов и возможность загрузить свои шрифты

Настройки вывода шрифтов и возможность загрузить свои шрифты

В любом случае кнопка «Загрузить шрифт» выводит окно выбора шрифта (я показал для TrueType) и окно выбора, куда этот шифт грузить ( в какую ячейку памяти). Для разных типов шрифтов есть свои ячейки памяти. Для обычных шрифтов они будут обозначаться префиксом «V» («VA», «VB», «VC» и так далее), а для TrueType — «T» («TA», «TB», «TC» и так далее).

Загрузка своих шрифтов в принтер

Загрузка своих шрифтов в принтер

Ну а после того как шрифт загружен — можно выбрать его для вывода текста. Мне хватило парочки шрифтов Tahoma и Tahoma Bold для всех своих задач.

Вывод текста загруженными шрифтами

Вывод текста загруженными шрифтами

По такому же приницпу устроена и загрузка картинок. По возможности картинку лучше заранее перевести в чёрно-белый режим и сохранить в каком-нибудь формате без потери качества (bmp или gif). Картинки в принтере хранятся по текстовым именам, как файлы. Ну и понятно что память принтера под это всё ограничена несколькими мегабайтами, так что особо там не развернуться.

Внимание! GoLabel тяжко переживает перенос принтера на другой компьютер. Я тестировал принтер на втором компьютере и у меня не получилось настроить GoLabel так, чтобы она увидела те объекты, которые уже загружены в принтере. Показать она их смогла, а вот подставить их в списки выбора шрифтов (TA, TB) и рисовать макет этикетки — не смогла. Поэтому мне пришлось на втором компе заново загружать все шрифты только для того, чтобы их увидела GoLabel.

Ну, после мелких тестов, у меня получилась вот такая этикетка.

Тестовый макет этикетки в GoLabel

Тестовый макет этикетки в GoLabel

Нажимаем на печать и получаем её же на выходе из принтера. Только вы видите, что наша этикетка уехала вверх: верхней рамки не видно.

Распечатали тестовую этикетку из GoLabel

Распечатали тестовую этикетку из GoLabel

Это происходит из-за того, что принтер не всегда точно определяет границу этикеток. Иногда этикетку может перекашивать и по горизонтали, если вы её неровно заправили. Так как мне нравятся рамочки, то я просто делаю отступы со всех краёв побольше, чтобы по краям этикетки оставался запас места.

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

Процесс подгонки и создания новой этикетки для принтера

Процесс подгонки и создания новой этикетки для принтера

И тут надо остановиться и задуматься. Это вот всё красиво. Мы сдизайнили и отладили печать одной этикетки. Теперь мы можем напечатать десяток или сотню её копий и обклеить товар. Но что делать, если надо печатать этикетки с меняющимся текстом (например на разные товары или на модульку для щита)?

А пожалуйста! В GoLabel есть и такая фишка. Она может брать данные из какой-нибудь базы или XLS-таблицы и подставлять их в нужные места. Смысл примерно такой: мы скрамливаем программе файл с данными. Она считывает его и берёт оттуда названия всех полей. А потом позволяет подставлять эти называния полей в нужные места текста. Печатать этикетки можно выборочно, отбирая галочками нужные записи данных.

Для примера у меня валялся файл от одного из щитов. Это обычная таблица Экселя, в которой первые строки содержат названия «полей» данных. У меня в нём только одно поле — маркировка модульки.

XLS-файл источника данных

XLS-файл источника данных

В GoLabel прямо при редактировании текста на вкладке «Источник данных» можно выбрать опцию «База данных». И сразу же появится кучка окон, одним из которых будет окно подключения к нужной нам базе данных или файлу.

Подключение из GoLabel к внешнему источнику данных

Подключение из GoLabel к внешнему источнику данных

После этого можно выбрать «таблицу» и «поля» базы. Для XLS это будут названия листов и заголовки столбцов.

Выбор полей источника данных для печати

Выбор полей источника данных для печати

Эти данные можно отфильровать (вкладка «Запрос») или отсортировать (вкладка «Сортировка»). А в конце можно посмотреть на то, что получилось.

Считанные данные из XLS-файла

Считанные данные из XLS-файла

Теперь надо взять наши же текстовые поля (или штрих-коды) и, выбрав базу данных, нажать кнопку «Вставить поле». Поле можно вставить или вместо текста или прямо в текст. Оно указывается порядковым номером с префиксом «^F», например «^F00» — первое поле, «^F01» — второе и так далее.

Добавление полей из источника данных в этикетку

Добавление полей из источника данных в этикетку

Если такие поля есть и база данных открыта, то у GoLabel в верхнем меню появляются кнопки перемещения по записям, и можно пролистывать все этикетки, которые получатся при использовании базы данных. А при печати можно выбрать, какие записи из базы печатать: достаточно поставили или поснимать галочки:

Возможность печати нескольких разных этикеток

Возможность печати нескольких разных этикеток

Вот благодаря этой фишке при помощи GoLabel можно печатать разные переменные данные. Даже в принципе можно накрутить какую-нибудь 1С или обработку, которая подготовит XLS или DBF, и натравить на него GoLabel для печати. Вот это даже будет похоже на автоматизацию. Правда всё равно придётся вручную открывать файлы и тратить на это время.

Попутно замечу ещё вот что. GoLabel шлёт команды на принтер напрямую, и поэтому задания печати в Windows не формируются: Windows вообще в этот момент не знает, что на принтере печатают.

А теперь — главный гвоздь GoLabel, ради которого всё затевалось. Справа от области, где мы рисуем этикетку, есть небольшая панелька — окно команд. И при помощи кнопок, а конкретно — кнопки «Export» — можно ВСЮ текущую этикетку (и ещё и настройки бумаги, принтера) вытащить в виде тех самых команд принтера на EZPL! Благодаря этому можно нарыть часть команд даже не читая документацию по EZPL. Например команда ^H отвечает за нагрев, а ^S — за скорость печати (их на скриншоте ниже не видно). Все штрих- и QR-коды точно так же кодируются обычным текстом, так что поменять значение кода проблем не составит.

Экспорт команд этикетки на языке EZPL

Экспорт команд этикетки на языке EZPL

И так как все эти команды фигачатся открытым обычным текстом, то мы можем это использовать! Например, скопировать их оттуда и создать какой-нибудь шаблон для печати. Всё, что нам надо — создать текстовый файл и разобраться с кодировками. А это может сделать любой-любой скрипт или любой язык программирования.

После этого например 1Ска может сделать вот такой вот файл, в котором содержатся команды принтера. И отправить его на принтер! И принтер будет печатать, причём ему (как я уже писал выше) будет плевать на настройки Windows. И вот это вот — самое крутое!

Файл с тестовыми командами EZPL, сгенерированный из 1C

Файл с тестовыми командами EZPL, сгенерированный из 1C

По поводу кодировок. Можно перевести принтер и все текстовые поля в кодировки UTF8 (как сделано по умолчанию). Но так как у меня 1Ска выдаёт всё в Windows-1251, то я подгрузил в принтер вместе со шрифтами нужные кодовые таблицы (они есть в комплекте GoLabel) и перенастроил принтер и шрифты на Windows-1251.

Первое, что я сделал — ради прикола набил на 1С обработочку, которая умела переключать скорость принтера (той командой «^Sx») и печатать несколько копий текстовой этикетки.

Тестовая обработка, которая генерирует файл команд из 1C

Тестовая обработка, которая генерирует файл команд из 1C

Ну и побаловался с ней, потратив часть рулона =) Зато получил удовольствие: нажимаешь кнопочку — и принтер сразу печатает!

Тестовые этикетки, распечатанные на EZPL из 1С

Тестовые этикетки, распечатанные на EZPL из 1С

Но не всё так просто, как кажется. Дело в том, что просто так отправить команды на принтер получится, если он подключен у вас по RS-232 (COM-порт). Тогда порт можно открыть как файл и высылать туда все данные напрямую. Ну или сделать что-то типа «Copy Commands.txt COM1» в батничке. А вот как быть с USB или LAN? И я решил эту задачу! Но расскажу я про это в другом посте!

4 Отзывов на “Маркировка: Язык EZPL принтеров GODEX и программа GoLabel”


  • Спасибо, очень полезная статья, для тех, кто сомневается, какой принтер купить.

    Был момент, когда докупал принтеры и взял как раз Годекс. Исплевался и оставил до программиста. Потом принтер сгорел в пожаре и больше я к нему не возвращался.

    Поскольку с принтерами, например, Зебра, идет нормально ПО, в котором можно печатать все, что угодно, без калибровки, монтировки, сноровки и прочей шнуровки.
    Дороже на пять копеек, но любая девочка в офисе разберется.

    Респект за подробный отчет и потраченное время.

  • 2 CS  [Москва]

    Да и тебе за забавную историю спасибо! Я иногда прихожу к выводу, что каждый находит себе что-то по душе. Вот мне Godex по душе пришёлся,а Zebra показалсь попсовой и некрасивой. И я думаю, что у меня по аналогии с твоей историей с ней бы не сложилось.
    А в статье у меня получается как обычно и как везде: я от чего-то пропираюьс, вычленяю из этого общие принципы (как устроено и как работает) и предлагаю действовать по аналогии. Вот!

  • 3 Sagitta

    большое спасибо тебе ДОБРЫЙ ЧЕЛОВЕК, помог разобраться с этими долбаными шрифтами… благодаря Вам мой кошмар с программированием этикеток на 1100 EZта закончился…

  • 4 CS  [Москва]

    Sagitta На здровье!

Оставить отзыв

Вы должны войти на блог, чтобы оставить комментарий.