ZPL расшифровывается как Zebra Programming Language, и предназначен для принтеров термоэтикеток. По самому языку выпущено несколько талмудов в pdf формате, но если их использовать как справочники, то можно сделать и что-нибудь полезное.
Например:
Этикетка размером 100×100 мм, без штрихкода, печатаем температурный признак: Хитрость в том, что символа градуса нет на родном ASCII, поэтому мы используем маленькую букву «о» и печатаем её отдельным полем на той же примерной высоте, что и текст большим шрифтом.
^XA ^CF0,100,100 ^FO0,180 ^FD+2 +8 C^FS ^A@N,50,50,B:TIMES.FNT ^FO345,170 ^FDo^FS ^XZ
^XA В данному случае это команда принтеру «Начало новой этикетки»
^CFx, INT, INT устанавливают шрифт и его размер
^FOx,y значат «создать текстовое поле (в данном примере отступ составит 0 точек по оси X, и 180 по оси Y)»
^FDsome_text^FS -Само поле, содержащее текст
^A@N,50,50,B:TIMES.FNT — Повторная смена шрифта
^XZ — Признак окончания этикетки
Примерно тоже самое, но другой текст и другой цвет этикетки:
^XA ^CF0,90,90 ^FO0,180 ^FD+8 +15 C^FS ^A@N,50,50,B:TIMES.FNT ^FO350,170 ^FDo^FS ^XZ
Что касается штрихкодов — не намного сложнее.
^XA ^FO25,0 ^BY2 ^BCN,48,N ^FD07718134706^FS ^FO95,53 ^CF0,35,N ^FD07718134706^FS ^XZ
Все тоже самое, но появляется команда ^BCN — и указывает Зебре печатать следующее текстовое поле штрихкодом (а так же тип и высоту штрихкода — длину указать нельзя, она вычисляется в зависимости от данных в соответствии со стандартом). Вот пример получившейся этикетки (размер 46х11 мм):
И еще необходимо иметь в виду, что зебры чувствительны к символам перевода строк, пробелам и т.п.. И если где-то что то упустить, то результат будет абсолютно непредсказуемым (