Вообще ZPL расшифровывается как язык программирования зебр (Zebra Programming Language). Есть возможность командами создать нужный дизайн печати будь то какая-либо этикетка или же страница.
Благодаря этому этикетка становится независимой от конкретного устройства печати. Принтер получает команды для произведения фигур, рамок, символов и прочего, и он сам знает, как это сделать. Это является основным отличием ZPL!
Zebra Technologies первоначально создала ZPL для осуществления создания и печати этикеток (с штрих кодами, графическими элементами и любым текстом), которые используют в основном для торговой деятельности.
Сперва через оборудование (ПК или же терминалы, собирающие информацию) на принтер направляются данные, далее процессор Зебра-принтера производит обработку полученной информации и выводит результат на печать.
Мерки для печати производятся в точках, ибо без точного значения будет довольно-таки трудно что-то сделать, не получив ошибок и сбоев. Следует изучить документацию печатного оборудования и узнать какая у него плотность точек (DPI).
Создается сам дизайн следующими командами:
1. Код должен начинаться с тега ^XA, а заканчиваться же ^XZ;
2. А вот тег ^FX предваряет комментарии;
3. ^CF x, y, z – настройки шрифта по умолчанию: сам шрифт, высота и ширина;
4. ^FO x,y - отступы слева и сверху;
5. ^FS – конец строки;
6. Вывести данные с настроенными величинами можно так:
FD<текст>
Блок текста:
FB<ширина>,<количество строк>,<пробелы между строками>,<выравнивание текста>,< отступ для второй или последующей строки>
<положение текста> :
L - по левому краю,
R - по правому краю,
C - по центру,
J - растянуть текст по ширине поля;
Создание прямоугольников:
GB<ширина>,<высота>,<толщина линии>,<цвет линии>,<скругление углов>
Цвет линии: B (черный) или W (белый)
Скругление углов указывается значением от 0, до 8.
7. Штрихкод (а ZPL и Zebra-принтер - созданы прямо для штрих-кодов!) состоящий из трех команд:
размеры штрих кода (BY<ширина>,<соотношение толщин линий>, <высота штрих кода>);
его настройки:
BC<ориентация>,
<высота штрих кода в точках>,
<печатать ли расшифровку кода>,
<расшифровка кода штрих кодом>,
<режим> <ориентация> — N – нормальная ориентация;
R – на 90 градусов по часовой стрелке;
I – на 180 градусов;
B – на 270 градусов;
<печатать ли расшифровку кода>,
<расшифровка кода над штрих кодом> — значения Y (да) или N (нет); <режим> — по умолчанию N.
8. Вывод штрих-кода на печать осуществляется через команду - FD<информация>
На самом деле всё не настолько просто, но в общих чертах дает представление о языке ZPL.
Сразу вопрос - а можно ли отправить просто обычную картинку или “созданный по размеру этикетки” документ из текстового редактора? Да просто “на Canvas нарисовать и послать на принтер — драйвер сам разберётся”? Отправить можно, напечатается, выглядеть даже зачастую будет как настоящий. Единственная проблема - ZPL и Zebra-printers предназначены, прежде всего для создания машиночитаемых, векторных масштабируемых этикеток, и часто результат из-за прохождения этапов растрирования и масштабирования изображений в программе и в драйвере не будет понят сканером штрих-кодов. Если ваши штрих-коды не распознаются сканером, то, чаще всего, у вас проблема из-за растрированного и масштабированного изображения. Давайте же сделаем ZPL из нашего Delphi-приложения или Lazarus-приложения правильно!
Воспользуемся платформой FastReport VCL, поскольку он сохраняет из Delphi сразу в нужный формат (Zebra Programming Language). Но мы можем использовать больше возможностей — добавить в этикетки картинки, таблицы, штрих коды (и это будут правильные, машиночитаемые штрихкоды!). Понятно, что фотографии пейзажей отправлять на “зебра-принтер” смысла нет, но вот картинку вроде той, что в начале статьи — почему бы нет, если она уместна на наших этикетках!)
Есть два варианта сохранения созданного отчета. Первым, является сохранение через окно предварительного просмотра, а второй — сразу через код на Pascal.
Рассмотрим оба варианта.
За работу! На форму кладем не только нужные нам компоненты для создания отчёта, подключения источников данных, но и компонент для ZPL-экспорта!
Преимущество метода - мы видим, что сохраняем, имеем возможность сравнить в превью с результатом в ZPL. И отлаживаем это у себя на компьютере, а не у несчастной жертвы клиента на его оборудовании, когда проект уже вроде бы готов.
Создаем требуемый документ.
Перед сохранением смотрим в предпросмотре, корректируем все то, что не понравилось.
Нажимаем пункт “сохранить”.
Выбираем “ZPL file”. Я делаю эту статью с подключенными практически всеми фильтрами экспорта. В вашем случае (если у вас подключен ТОЛЬКО фильтр экспорта ZPL) других пунктов (кроме Prepared Report) в этом меню не будет.
У нас высветилось окошко с настройками экспорта нашего файла.
Настраиваем все так, как нам требуется и нажимаем “ОК”.
Page range - диапазон сохранения страниц;
Export Settings:
- Print As Bitmap - печатать как матричное изображение (для штрих-кодов НЕ НАДО этого делать);
- Break lines - ломаные линии;
- Resolution (dpi) - разрешение от 152 до 600 dpi (на самом деле там набор предустановленных значений, ограниченных форматов - мы можем их выбрать - ниже в коде они перечислены);
Save to - сохранение файлом на пк, отправка по почте или же в облачное хранилище;
Open after export - открытие после сохранения.
Экспорт в ZPL: | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
procedure TForm1.Button18Click(Sender: TObject); begin {Формируем отчет. Перед экспортом отчёт необходимо обязательно сформировать} frxReport1.PrepareReport(); {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы сформированного отчета} frxZPLExport1.PageNumbers := '2-3'; {Устанавливаем, нужно ли экспортировать отчет в виде изображения} frxZPLExport1.PrintAsBitmap := True; {Устанавливаем, нужно ли последовательность символов конца строки в конец каждой строки} frxZPLExport1.BreakLines := True; {Устанавливаем разрешение. Возможные значения: d6_dpmm_152_dpi, d8_dpmm_203_dpi, d12_dpmm_300_dpi, d24_dpmm_600_dpi, test1to1} frxZPLExport1.ZplDensity := d6_dpmm_152_dpi; {Устанавливаем, нужно ли открывать результирующий файл после экспорта} frxZPLExport1.OpenAfterExport := False; {Устанавливаем, нужно ли отображать прогресс экспорта(показывать, какая страница в данный момент экспортируется)} frxZPLExport1.ShowProgress := False; {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта} frxZPLExport1.ShowDialog := False; {Устанавливаем имя результирующего файла. Обратите внимание на то,} {что если не установить имя файла и отключить показ диалогового окна фильтра экспорта,} {то всё равно будет отображён диалог выбора имени файла} frxZPLExport1.FileName := 'C:\Output\test.zpl'; {Экспортируем отчёт} frxReport1.Export(frxZPLExport1); end; |
Как видим, создавать и печатать Zebra-этикетки из Delphi (в Windows-приложениях) и из Lazarus (Linux-приложения) достаточно просто. Именно этот способ используется в миллионах торговых точек по всему миру.