Как создать ZPL в Delphi / C++Builder / Lazarus

22.12.2020

Как создать ZPL в Delphi / C++Builder / Lazarus

Что такое ZPL?

ZPL

Вообще ZPL расшифровывается как язык программирования зебр (Zebra Programming Language). Есть возможность командами создать нужный дизайн печати будь то какая-либо этикетка или же страница.

Благодаря этому этикетка становится независимой от конкретного устройства печати. Принтер получает команды для произведения фигур, рамок, символов и прочего, и он сам знает, как это сделать. Это является основным отличием ZPL!

Zebra Technologies первоначально создала ZPL для осуществления создания и печати этикеток (с штрих кодами, графическими элементами и любым текстом), которые используют в основном для торговой деятельности.

Немного об этапах формирования ZPL:

Сперва через оборудование (ПК или же терминалы, собирающие информацию) на принтер направляются данные, далее процессор Зебра-принтера производит обработку полученной информации и выводит результат на печать.

ZPL

Немного о составлении 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.

Создание ZPL в Delphi / C++Builder / Lazarus

Сразу вопрос - а можно ли отправить просто обычную картинку или “созданный по размеру этикетки” документ из текстового редактора? Да просто “на Canvas нарисовать и послать на принтер — драйвер сам разберётся”? Отправить можно, напечатается, выглядеть даже зачастую будет как настоящий. Единственная проблема - ZPL и Zebra-printers предназначены, прежде всего для создания машиночитаемых, векторных масштабируемых этикеток, и часто результат из-за прохождения этапов растрирования и масштабирования изображений в программе и в драйвере не будет понят сканером штрих-кодов. Если ваши штрих-коды не распознаются сканером, то, чаще всего, у вас проблема из-за растрированного и масштабированного изображения. Давайте же сделаем ZPL из нашего Delphi-приложения или Lazarus-приложения правильно!

Воспользуемся платформой FastReport VCL, поскольку он сохраняет из Delphi сразу в нужный формат (Zebra Programming Language). Но мы можем использовать больше возможностей — добавить в этикетки картинки, таблицы, штрих коды (и это будут правильные, машиночитаемые штрихкоды!). Понятно, что фотографии пейзажей отправлять на “зебра-принтер” смысла нет, но вот картинку вроде той, что в начале статьи — почему бы нет, если она уместна на наших этикетках!)

Есть два варианта сохранения созданного отчета. Первым, является сохранение через окно предварительного просмотра, а второй — сразу через код на Pascal.

Рассмотрим оба варианта.
За работу! На форму кладем не только нужные нам компоненты для создания отчёта, подключения источников данных, но и компонент для ZPL-экспорта!

Сохраняем ZPL из Delphi/RAD Studio Lazarus с предварительным просмотром

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

ZPL

Создаем требуемый документ.

Перед сохранением смотрим в предпросмотре, корректируем все то, что не понравилось.

Нажимаем пункт “сохранить”.

Выбираем “ZPL file”. Я делаю эту статью с подключенными практически всеми фильтрами экспорта. В вашем случае (если у вас подключен ТОЛЬКО фильтр экспорта ZPL) других пунктов (кроме Prepared Report) в этом меню не будет.

 

ZPL

У нас высветилось окошко с настройками экспорта нашего файла.

Настраиваем все так, как нам требуется и нажимаем “ОК”.

 

Далее о настройках:

Page range - диапазон сохранения страниц;
Export Settings:
- Print As Bitmap - печатать как матричное изображение (для штрих-кодов НЕ НАДО этого делать);
- Break lines - ломаные линии;
- Resolution (dpi) - разрешение от 152 до 600 dpi (на самом деле там набор предустановленных значений, ограниченных форматов - мы можем их выбрать - ниже в коде они перечислены);
Save to - сохранение файлом на пк, отправка по почте или же в облачное хранилище;
Open after export - открытие после сохранения.

Сохранение ZPL из кода Delphi / C++Builder / Lazarus.

Экспорт в 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-приложения) достаточно просто. Именно этот способ используется в миллионах торговых точек по всему миру.

VCL Export Lazarus FastReport ZPL Delphi VCL Export Lazarus FastReport ZPL Delphi
10 февраля 2025

Как попробовать FastReport .NET WEB перед покупкой

Протестировав WEB пак перед покупкой, вы сможете сделать осознанный выбор: подходит ли вам FastReport .NET для ваших задач.
22 января 2025

Как подключить РЕД БД к генератору отчетов FastReport .NET

Пошаговая инструкция по подключению РЕД БД к генератору отчётов FastReport .NET. Эффективные методы и рекомендации для создания отчётов на основе данных из базы.
20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.