Langkau ke kandungan

ZPL compatibility of the OpenZPL engine

The OpenZPL engine draws the 64 ZPL commands of the command reference, one of them partially, and skips the ones that configure the printer. The barcode and text commands listed under “Not supported yet” don't draw correctly today.

Tested 2026-10-26 with openzpl-api 10d0497 at 8 dpmm.

How we test

Every example on this site is a fixture: a short synthetic label that the engine renders to a PNG when the site is built. If a fixture's ZPL changes and its image isn't rendered again, the build fails, so the image always shows what the engine does with that exact code.

The 140 fixtures are public in fixtures.json, with their size, density and image, under CC0. Use them to test any ZPL renderer.

A preview isn't a print. Darkness, media, firmware and the fonts installed on a printer change the result, so check critical labels on the printer itself.

Drawn

CommandApa yang dilakukannyaCategoryEvidence
^XA Membuka satu label. Segala-galanya hingga ^XZ adalah satu label. Format Label Rendered example
^XZ Menutup label yang dibuka oleh ^XA dan mencetaknya. Format Label Rendered example
^PW Menetapkan lebar label dalam titik. Format Label Rendered example
^LL Menetapkan panjang label dalam titik. Format Label Rendered example
^LH Menggerakkan asal yang setiap kedudukan medan diukur dari. Format Label Rendered example
^LS Menggeser setiap medan ke kiri sebanyak nombor titik yang diberikan. Format Label Rendered example
^LT Menggerakkan keseluruhan label ke atas atau ke bawah mengikut bilangan baris titik yang diberikan. Format Label Rendered example
^PO Mencetak label secara normal (N) atau terbalik (I). Format Label Rendered example
^PM Mencerminkan keseluruhan label secara mendatar apabila ditetapkan ke Y. Format Label Rendered example
^PQ Menetapkan berapa banyak label untuk dicetak; setiap satu dianggap sebagai label dalam pratonton. Format Label Rendered example
^MU Menukar unit ukuran kepada titik, inci atau millimeter. Format Label Rendered example
^CI Memilih set watak. ^CI28 adalah UTF-8. Format Label Rendered example
^FO Menetapkan kedudukan medan: koordinat x, y dalam titik dari sudut kiri atas. Medan dan posisi Rendered example
^FT Meletakkan medan mengikut garis dasar dan bukannya sudut kiri atas. Medan dan posisi Rendered example
^FD Data teks atau kod bar bagi medan semasa. Medan dan posisi Rendered example
^FS Menamatkan medan semasa. Medan dan posisi Rendered example
^FB Membungkus teks ke dalam blok dengan lebar, bilangan baris dan penjajaran. Medan dan posisi Rendered example
^FR Mencetak medan putih di atas hitam ke atas apa sahaja yang berada di bawahnya. Medan dan posisi Rendered example
^FH Membolehkan ^FD mengandungi pelarian heks seperti _0D. Medan dan posisi Rendered example
^FW Menetapkan putaran lalai untuk medan yang berikut. Medan dan posisi Rendered example
^FN Menamakan medan pembolehubah dalam format tersimpan. Medan dan posisi Rendered example
^FX Sebuah komen. Pencetak mengabaikan segala-galanya hingga perintah seterusnya. Medan dan posisi Rendered example
^SN Mencetak nombor yang meningkat pada setiap label. Medan dan posisi PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example
^A Memilih fon, putaran dan saiz untuk medan teks seterusnya. Teks dan fon Rendered example
^A@ Memilih fon berdasarkan nama failnya pada pencetak. Teks dan fon Rendered example
^CF Menetapkan fon dan saiz yang digunakan apabila sesuatu medan tiada ^A. Teks dan fon Rendered example
^TB Membungkus medan teks dalam kotak dengan lebar dan tinggi tertentu. Teks dan fon Rendered example
^CW Memberikan nama satu huruf kepada fail fon. Teks dan fon Stores or recalls data; no image of its own
^BY Menetapkan lebar modul, nisbah lebar-ke-sempit dan tinggi untuk kod bar yang mengikuti. Kod bar Rendered example
^BC Kod 128, kod bar yang paling biasa pada label penghantaran. Kod bar Rendered example
^B3 Kod bar Kod 39. Kod bar Rendered example
^B2 Kod bar Interleaved 2 daripada 5, hanya nombor. Kod bar Rendered example
^BE Kod bar runcit EAN-13. Kod bar Rendered example
^B8 Kod bar runcit EAN-8. Kod bar Rendered example
^BU Kod bar runcit UPC-A. Kod bar Rendered example
^B9 Kod bar runcit UPC-E. Kod bar Rendered example
^BQ Kod QR. Data medan bermula dengan tahap pembetulan ralat dan mod input, seperti dalam ^FDQA,text. Kod bar Rendered example
^BX Kod bar 2D Matrix Data. Kod bar Rendered example
^B7 Pita kod bar 2D PDF417 bertindan. Kod bar Rendered example
^BO Kod bar Aztec 2D. Kod bar Rendered example
^BD MaxiCode, digunakan oleh UPS. Kod bar Rendered example
^B0 Kod bar 2D Aztec; arahan yang sama seperti ^BO. Kod bar Rendered example
^BA Kod bar Kod 93: lebih padat daripada Kod 39, dengan dua watak semak terbina dalam. Kod bar Rendered example
^BK Kod bar Codabar, digunakan oleh perpustakaan, bank darah dan beberapa kurier. Kod bar Rendered example
^BL Kod bar LOGMARS, Kod 39 tentera A.S. dengan digit semak mandatori. Kod bar Rendered example
^B1 Kod bar Kod 11, numerik, digunakan pada peralatan telekom. Kod bar Rendered example
^BM Kod bar MSI (Modified Plessey), nombor, digunakan pada label rak. Kod bar Rendered example
^BP Kod bar Plessey, numerik, dengan digit cek CRC. Kod bar Rendered example
^BS Tambahan 2 atau 5 digit dicetak di sebelah kod UPC atau EAN. Kod bar Rendered example
^BZ Kod bar pos AS: POSTNET, PLANET dan Mail Pintar. Kod bar Rendered example
^B5 Kod bar USPS PLANET. Kod bar Rendered example
^BR GS1 DataBar (dahulu RSS): kod bar GTIN padat untuk hasil pertanian dan kupon. Kod bar PartialGS1 DataBar types 1 to 6 are drawn. Type 6 (Expanded) encodes the data as written and scans the same as Labelary's, but its last characters can differ; types 7 to 12 (UPC/EAN composites) print the data as text. Rendered example
^BF MicroPDF417, PDF417 yang lebih kecil untuk label kecil. Kod bar Rendered example
^GB Melukis kotak atau garis: lebar, tinggi, ketebalan sempadan, warna dan bulatan. Grafik Rendered example
^GC Melukis bulatan: diameter, ketebalan sempadan dan warna. Grafik Rendered example
^GE Melukis elips. Grafik Rendered example
^GD Melukis garis diagonal. Grafik Rendered example
^GF Menyematkan imej bitmap dalam label (ASCII hex, binari atau Z64). Grafik Rendered example
^GS Mencetak simbol berdaftar, hak cipta atau simbol lain. Grafik Rendered example
^DF Menyimpan format label pada pencetak di bawah nama. Format dan imej yang disimpan Rendered example
^XF Memanggil format yang disimpan untuk mengisi medan ^FNnya. Format dan imej yang disimpan Rendered example
~DG Menyimpan imej pada pencetak di bawah nama. Format dan imej yang disimpan Stores or recalls data; no image of its own
^XG Mencetak imej yang disimpan dengan ~DG. Format dan imej yang disimpan Stores or recalls data; no image of its own
^IM Mencetak imej yang disimpan pada asal medan semasa. Format dan imej yang disimpan Stores or recalls data; no image of its own

Ignored on purpose

These commands set up the printer, not the label. The API accepts them and renders the label as if they weren't there; we checked that the image is byte-identical without them.

GroupCommands
Media and sensors^MM, ^MN, ^MT, ^MF, ~JS
Speed, darkness and tear-off^PR, ~SD, ^MD, ~TA
Calibration and printer state~JC, ~JA, ~JR, ^JU, ~HS
Network, RFID setup and host queries^NC, ^NI, ^RS, ~HI, ~HM

Not supported yet

Each one was tested by placing it in a label at 8 dpmm. None of them fails the request: the label renders, without the symbol.

CommandSymbology or featureWhat the engine does today
^B4Code 49No bars; the data is printed as text (Labelary doesn't draw it either).
^BBCODABLOCKNo symbol; the data is printed as text (Labelary doesn't draw it either).
^BTTLC39No symbol; the data is printed as text (Labelary doesn't draw it either).

Known differences

  • A format with no fields, such as ^XA^XZ, returns 400 ERROR: No labels found in the ZPL instead of a blank image.
  • Fonts: Zebra's font 0 (CG Triumvirate Bold Condensed) can't be bundled, so ^A0 is drawn with Roboto Condensed Bold, with spacing calibrated per character. The bitmap fonts ^AA–^AH are drawn with DejaVu Sans Mono. Text widths can differ by a few dots from a given printer.
  • An RFID write (^RF followed by ^FD…^FS) draws its data as text; a printer encodes it in the tag and prints nothing.
  • EPL reverse text (the R flag of A) gets a black box the size of the character cells, as on the printer; it can run past the last character because the substitute font is narrower than EPL's bitmap fonts.

Berpindah dari Labelary

The API keeps Labelary's v1 paths and headers, so most clients only change the host. See Migrate from Labelary for the tested differences and OpenZPL vs Labelary for the comparison.

Maklumbalas