Overslaan naar inhoud

ZPL compatibility of the OpenZPL engine

The OpenZPL engine draws the 51 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-20 with openzpl-api 689632b 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 116 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

CommandWat het doetCategoryEvidence
^XA Opent een etiket. Alles tot ^XZ is één etiket. Etiketformaat Rendered example
^XZ Sluit het label geopend door ^XA en print het. Etiketformaat Rendered example
^PW Stelt de labelbreedte in punten in. Etiketformaat Rendered example
^LL Stelt de labellengte in punten in. Etiketformaat Rendered example
^LH Verplaatst de oorsprong waar elke veldpositie vanaf wordt gemeten. Etiketformaat Rendered example
^LS Verschuift elk veld naar links met het opgegeven aantal punten. Etiketformaat Rendered example
^LT Verplaatst het hele etiket omhoog of omlaag met het opgegeven aantal puntregels. Etiketformaat Rendered example
^PO Print het etiket normaal (N) of ondersteboven (I). Etiketformaat Rendered example
^PM Spiegelt het hele etiket horizontaal wanneer ingesteld op Y. Etiketformaat Rendered example
^PQ Stelt in hoeveel labels er afgedrukt moeten worden; elke telt als een label in de voorbeeldweergave. Etiketformaat Rendered example
^MU Wijzigt de maateenheid naar stippen, inches of millimeters. Etiketformaat Rendered example
^CI Kiest de tekenset. ^CI28 is UTF-8. Etiketformaat Rendered example
^FO Stelt de veldpositie in: x, y-coördinaten in punten vanaf de linkerbovenhoek. Velden en positie Rendered example
^FT Plaatst een veld op zijn basislijn in plaats van op de bovenste linkerkant. Velden en positie Rendered example
^FD De tekst- of barcodegegevens van het huidige veld. Velden en positie Rendered example
^FS Eindigt het huidige veld. Velden en positie Rendered example
^FB Voorziet tekst van een blok met een breedte, regelcount en uitlijning. Velden en positie Rendered example
^FR Print het veld wit op zwart over wat eronder ligt. Velden en positie Rendered example
^FH Laat ^FD hex escapes bevatten zoals _0D. Velden en positie Rendered example
^FW Stelt de standaardrotatie in voor de volgende velden. Velden en positie Rendered example
^FN Noemt een variabel veld in een opgeslagen formaat. Velden en positie Rendered example
^FX Een opmerking. De printer negeert alles tot de volgende opdracht. Velden en positie Rendered example
^SN Print een nummer dat bij elk etiket toeneemt. Velden en positie PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example
^A Kiest het lettertype, de rotatie en de grootte voor het volgende tekstveld. Tekst en lettertypen Rendered example
^A@ Kiest een lettertype op basis van de bestandsnaam op de printer. Tekst en lettertypen Rendered example
^CF Stelt het lettertype en de grootte in die worden gebruikt wanneer een veld geen ^A heeft. Tekst en lettertypen Rendered example
^CW Kent een een-letter naam toe aan een lettertypebestand. Tekst en lettertypen Stores or recalls data; no image of its own
^BY Stelt de modulebreedte, de verhouding breed-tot-smal en de hoogte in voor de daaropvolgende barcodes. Streepjescodes Rendered example
^BC Code 128-streepjescode, de meest voorkomende op verzendlabels. Streepjescodes Rendered example
^B3 Code 39-streepjescode. Streepjescodes Rendered example
^B2 Interleaved 2 van 5 streepjescode, alleen numeriek. Streepjescodes Rendered example
^BE EAN-13 retail barcode. Streepjescodes Rendered example
^B8 EAN-8 retail barcode. Streepjescodes Rendered example
^BU UPC-A detailbarcode. Streepjescodes Rendered example
^B9 UPC-E detailbarcode. Streepjescodes Rendered example
^BQ QR Code. De veldgegevens beginnen met het foutcorrectieniveau en de invoermodus, zoals in ^FDQA,text. Streepjescodes Rendered example
^BX Data Matrix 2D barcode. Streepjescodes Rendered example
^B7 PDF417 gestapelde 2D-barcode. Streepjescodes Rendered example
^BO Aztec 2D-barcode. Streepjescodes Rendered example
^BD MaxiCode, gebruikt door UPS. Streepjescodes Rendered example
^GB Tekent een doos of een lijn: breedte, hoogte, randdikte, kleur en afronding. Graphics Rendered example
^GC Tekent een cirkel: diameter, randdikte en kleur. Graphics Rendered example
^GE Tekent een ellips. Graphics Rendered example
^GD Tekent een diagonale lijn. Graphics Rendered example
^GF Voegt een bitmapafbeelding in het label in (ASCII hex, binair of Z64). Graphics Rendered example
^GS Print een geregistreerd, auteursrechtelijk of ander symbool. Graphics Rendered example
^DF Slaat de labelindeling op de printer op onder een naam. Opgeslagen indelingen en afbeeldingen Rendered example
^XF Haal een opgeslagen formaat op om de ^FN-velden te vullen. Opgeslagen indelingen en afbeeldingen Rendered example
~DG Slaat een afbeelding op de printer op onder een naam. Opgeslagen indelingen en afbeeldingen Stores or recalls data; no image of its own
^XG Print een afbeelding opgeslagen met ~DG. Opgeslagen indelingen en afbeeldingen Stores or recalls data; no image of its own
^IM Print een opgeslagen afbeelding op de huidige veldorigine. Opgeslagen indelingen en afbeeldingen 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
^TBText blockText is drawn on one line; the block doesn't wrap. Use ^FB instead.
^B0Aztec (alias)No symbol drawn. ^BO, the other Aztec command, is drawn.
^B1Code 11No bars; the data is printed as text.
^B4Code 49No bars; the data is printed as text.
^B5Planet CodeNo bars; the data is printed as text.
^BACode 93No bars; the data is printed as text.
^BBCODABLOCKNo symbol; the data is printed as text.
^BFMicroPDF417No symbol; the data is printed as text.
^BKANSI CodabarNo bars; the data is printed as text.
^BLLOGMARSNo bars; the data is printed as text.
^BMMSINo bars; the data is printed as text.
^BPPlesseyNo bars; the data is printed as text.
^BRGS1 DataBarNo symbol; the data is printed as text.
^BSUPC/EAN extensionsNo bars; the data is printed as text.
^BTTLC39No symbol; the data is printed as text.
^BZPOSTALNo bars; the data is printed as text.

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.

Moving from 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