Spring til indhold

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

CommandHvad det gørCategoryEvidence
^XA Åbner en etikette. Alt op til ^XZ er én etikette. Etiket format Rendered example
^XZ Lukker etiketten åbnet af ^XA og printer den. Etiket format Rendered example
^PW Sætter etiketbredden i prikker. Etiket format Rendered example
^LL Sætter etiketlængden i prikker. Etiket format Rendered example
^LH Flytter oprindelsen, som hver feltposition måles fra. Etiket format Rendered example
^LS Skifter hvert felt til venstre med det angivne antal prikker. Etiket format Rendered example
^LT Flytter hele etiketten op eller ned med det angivne antal prikrækker. Etiket format Rendered example
^PO Printer labelen normalt (N) eller op-ned (I). Etiket format Rendered example
^PM Spejler hele etiketten vandret når indstillet til Y. Etiket format Rendered example
^PQ Sætter hvor mange etiketter der skal printes; hver tæller som en etiket i forhåndsvisningen. Etiket format Rendered example
^MU Ændrer måleenheden til prikker, tommer eller millimeter. Etiket format Rendered example
^CI Vælger tegnsættet. ^CI28 er UTF-8. Etiket format Rendered example
^FO Sætter feltposition: x, y koordinater i prikker fra det øverste venstre hjørne. Felter og position Rendered example
^FT Positionerer et felt efter dets baseline i stedet for dets øverste venstre hjørne. Felter og position Rendered example
^FD Teksten eller stregkodedataene for det aktuelle felt. Felter og position Rendered example
^FS Afslutter det aktuelle felt. Felter og position Rendered example
^FB Pakker tekst ind i en blok med en bredde, linjetælling og justering. Felter og position Rendered example
^FR Printer feltet hvidt på sort over hvad der end er under det. Felter og position Rendered example
^FH Lader ^FD indeholde hex-escapes som _0D. Felter og position Rendered example
^FW Sætter standardrotationen for de følgende felter. Felter og position Rendered example
^FN Navngiver et variabelfelt i et gemt format. Felter og position Rendered example
^FX En kommentar. Printeren ignorerer alt indtil næste kommando. Felter og position Rendered example
^SN Printer et nummer, der stiger med hver label. Felter og position PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example
^A Vælger skrifttype, rotation og størrelse til det næste tekstfelt. Tekst og skrifttyper Rendered example
^A@ Vælger en skrifttype efter filnavnet på printeren. Tekst og skrifttyper Rendered example
^CF Sætter skrifttype og størrelse, der bruges, når et felt ikke har ^A. Tekst og skrifttyper Rendered example
^TB Indkapsler et tekstfelt indeni en boks med angivet bredde og højde. Tekst og skrifttyper Rendered example
^CW Tildeler et enkelt bogstavsnavn til en skrifttypefil. Tekst og skrifttyper Stores or recalls data; no image of its own
^BY Sætter modulbredden, forholdet mellem bred til smal og højden for de følgende stregkoder. Stregkoder Rendered example
^BC Code 128 stregkode, den mest almindelige på forsendelsesetiketter. Stregkoder Rendered example
^B3 Code 39 stregkode. Stregkoder Rendered example
^B2 Interleaved 2 af 5 stregkode, kun numerisk. Stregkoder Rendered example
^BE EAN-13 detailstregkode. Stregkoder Rendered example
^B8 EAN-8 detailstregkode. Stregkoder Rendered example
^BU UPC-A detailstregkode. Stregkoder Rendered example
^B9 UPC-E detailstregkode. Stregkoder Rendered example
^BQ QR Code. Feltdata starter med fejlkorrigeringsniveauet og inputtilstand, som i ^FDQA,text. Stregkoder Rendered example
^BX Data Matrix 2D stregkode. Stregkoder Rendered example
^B7 PDF417 stablet 2D stregkode. Stregkoder Rendered example
^BO Aztec 2D stregkode. Stregkoder Rendered example
^BD MaxiCode, brugt af UPS. Stregkoder Rendered example
^B0 Aztec 2D stregkode; den samme kommando som ^BO. Stregkoder Rendered example
^BA Code 93 stregkode: tættere end Code 39, med to indbyggede kontroltegn. Stregkoder Rendered example
^BK Codabar stregkode, brugt af biblioteker, blodbanker og nogle kurerer. Stregkoder Rendered example
^BL LOGMARS stregkode, US militærets Code 39 med et obligatorisk kontrolciffer. Stregkoder Rendered example
^B1 Code 11 stregkode, numerisk, brugt på telekommunikationsudstyr. Stregkoder Rendered example
^BM MSI (Modified Plessey) stregkode, numerisk, anvendt på hyldetiketter. Stregkoder Rendered example
^BP Plessey stregkode, numerisk, med et CRC kontrolciffer. Stregkoder Rendered example
^BS Det 2- eller 5-cifrede tillæg, der printes ved siden af en UPC- eller EAN-kode. Stregkoder Rendered example
^BZ US postale stregkoder: POSTNET, PLANET og Intelligent Mail. Stregkoder Rendered example
^B5 USPS PLANET stregkode. Stregkoder Rendered example
^BR GS1 DataBar (tidligere RSS): kompakte GTIN-stregkoder til frugt og grønt samt kuponer. Stregkoder 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, en mindre PDF417 til små etiketter. Stregkoder Rendered example
^GB Tegner en boks eller en linje: bredde, højde, kanttykkelse, farve og afrunding. Grafik Rendered example
^GC Tegner en cirkel: diameter, kanttykkelse og farve. Grafik Rendered example
^GE Tegner en ellipse. Grafik Rendered example
^GD Tegner en diagonal linje. Grafik Rendered example
^GF Indlejrer et bitmapbillede i etiketten (ASCII hex, binær eller Z64). Grafik Rendered example
^GS Printer et registreret, ophavsretligt eller andet symbol. Grafik Rendered example
^DF Gemmer etiketformatet på printeren under et navn. Gemte formater og billeder Rendered example
^XF Henter et gemt format for at udfylde dets ^FN-felter. Gemte formater og billeder Rendered example
~DG Gemmer et billede på printeren under et navn. Gemte formater og billeder Stores or recalls data; no image of its own
^XG Printer et billede gemt med ~DG. Gemte formater og billeder Stores or recalls data; no image of its own
^IM Printer et gemt billede ved den nuværende feltoprindelse. Gemte formater og billeder 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.

Flytter fra 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.

Feedback