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
| Command | Ce face | Category | Evidence |
|---|---|---|---|
^XA |
Deschide o etichetă. Tot ce este până la ^XZ este o etichetă. | Format etichetă | Rendered example |
^XZ |
Închide eticheta deschisă de ^XA și o tipărește. | Format etichetă | Rendered example |
^PW |
Setează lățimea etichetei în puncte. | Format etichetă | Rendered example |
^LL |
Setează lungimea etichetei în puncte. | Format etichetă | Rendered example |
^LH |
Mută originea de la care se măsoară fiecare poziție de câmp. | Format etichetă | Rendered example |
^LS |
Mută fiecare câmp la stânga cu numărul dat de puncte. | Format etichetă | Rendered example |
^LT |
Mută întreaga etichetă în sus sau în jos cu numărul dat de rânduri de puncte. | Format etichetă | Rendered example |
^PO |
Tipărește eticheta normal (N) sau cu susul în jos (I). | Format etichetă | Rendered example |
^PM |
Reflectă întreaga etichetă orizontal când este setat pe Y. | Format etichetă | Rendered example |
^PQ |
Setează câte etichete să se imprime; fiecare este numărată ca o etichetă în previzualizare. | Format etichetă | Rendered example |
^MU |
Schimbă unitatea de măsură în puncte, inci sau milimetri. | Format etichetă | Rendered example |
^CI |
Selectează setul de caractere. ^CI28 este UTF-8. | Format etichetă | Rendered example |
^FO |
Setează poziția câmpului: coordonate x, y în puncte din colțul din stânga sus. | Câmpuri și poziție | Rendered example |
^FT |
Poziționează un câmp după linia de bază în loc de colțul din stânga sus. | Câmpuri și poziție | Rendered example |
^FD |
Textul sau datele codului de bare ale câmpului curent. | Câmpuri și poziție | Rendered example |
^FS |
Încheie câmpul curent. | Câmpuri și poziție | Rendered example |
^FB |
Împachetează textul într-un bloc cu o lățime, număr de linii și aliniere. | Câmpuri și poziție | Rendered example |
^FR |
Tipărește câmpul alb pe negru peste ceea ce este sub el. | Câmpuri și poziție | Rendered example |
^FH |
Permiteți ^FD să conțină escape-uri hexagonale precum _0D. | Câmpuri și poziție | Rendered example |
^FW |
Setează rotația implicită pentru câmpurile care urmează. | Câmpuri și poziție | Rendered example |
^FN |
Numeste un câmp variabil într-un format stocat. | Câmpuri și poziție | Rendered example |
^FX |
Un comentariu. Imprimanta ignoră totul până la următoarea comandă. | Câmpuri și poziție | Rendered example |
^SN |
Tipărește un număr care se incrementează pentru fiecare etichetă. | Câmpuri și poziție | PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example |
^A |
Selectează fontul, rotația și dimensiunea pentru următorul câmp de text. | Text și fonturi | Rendered example |
^A@ |
Selectează un font după numele său de fișier de pe imprimantă. | Text și fonturi | Rendered example |
^CF |
Setează fontul și dimensiunea utilizate atunci când un câmp nu are ^A. | Text și fonturi | Rendered example |
^TB |
Împachetează un câmp de text într-o cutie cu lățime și înălțime date. | Text și fonturi | Rendered example |
^CW |
Atribuie un nume format dintr-o literă unui fișier de font. | Text și fonturi | Stores or recalls data; no image of its own |
^BY |
Setează lățimea modulului, raportul larg-îngust și înălțimea pentru codurile de bare care urmează. | Coduri de bare | Rendered example |
^BC |
Cod de bare 128, cel mai comun pe etichetele de expediere. | Coduri de bare | Rendered example |
^B3 |
Cod de bare 39. | Coduri de bare | Rendered example |
^B2 |
Cod de bare intercalat 2 din 5, numeric doar. | Coduri de bare | Rendered example |
^BE |
Cod de bare EAN-13 pentru retail. | Coduri de bare | Rendered example |
^B8 |
Cod de bare EAN-8 pentru retail. | Coduri de bare | Rendered example |
^BU |
Cod de bare retail UPC-A. | Coduri de bare | Rendered example |
^B9 |
Cod de bare retail UPC-E. | Coduri de bare | Rendered example |
^BQ |
QR Code. Datele câmpului încep cu nivelul de corecție a erorilor și modul de intrare, ca în ^FDQA,text. | Coduri de bare | Rendered example |
^BX |
Cod de bare 2D Data Matrix. | Coduri de bare | Rendered example |
^B7 |
Cod de bare 2D PDF417 stivuit. | Coduri de bare | Rendered example |
^BO |
Cod de bare 2D Aztec. | Coduri de bare | Rendered example |
^BD |
MaxiCode, folosit de UPS. | Coduri de bare | Rendered example |
^B0 |
Cod de bare 2D Aztec; aceeași comandă ca ^BO. | Coduri de bare | Rendered example |
^BA |
Cod de bare Cod 93: mai dens decât Cod 39, cu două caractere de control încorporate. | Coduri de bare | Rendered example |
^BK |
Cod de bare Codabar, folosit de biblioteci, bănci de sânge și câțiva curieri. | Coduri de bare | Rendered example |
^BL |
Cod de bare LOGMARS, Codul 39 al armatei americane cu o cifră de control obligatorie. | Coduri de bare | Rendered example |
^B1 |
Cod de bare Cod 11, numeric, folosit pe echipamente telecom. | Coduri de bare | Rendered example |
^BM |
Codul de bare MSI (Modified Plessey), numeric, utilizat pe etichetele de raft. | Coduri de bare | Rendered example |
^BP |
Cod de bare Plessey, numeric, cu o cifră de control CRC. | Coduri de bare | Rendered example |
^BS |
Adăugarea de 2 sau 5 cifre imprimate lângă un cod UPC sau EAN. | Coduri de bare | Rendered example |
^BZ |
Coduri de bare poștale din SUA: POSTNET, PLANET și Intelligent Mail. | Coduri de bare | Rendered example |
^B5 |
Cod de bare USPS PLANET. | Coduri de bare | Rendered example |
^BR |
GS1 DataBar (fost RSS): coduri de bare GTIN compacte pentru produse și cupon. | Coduri de bare | 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, un PDF417 mai mic pentru etichete mici. | Coduri de bare | Rendered example |
^GB |
Desenează o cutie sau o linie: lățime, înălțime, grosimea bordurii, culoare și rotunjire. | Grafice | Rendered example |
^GC |
Desenează un cerc: diametru, grosimea bordurii și culoare. | Grafice | Rendered example |
^GE |
Desenează o elipsă. | Grafice | Rendered example |
^GD |
Desenează o linie diagonală. | Grafice | Rendered example |
^GF |
Înglobează o imagine bitmap în etichetă (ASCII hex, binar sau Z64). | Grafice | Rendered example |
^GS |
Tipărește un simbol înregistrat, copyright sau alt simbol. | Grafice | Rendered example |
^DF |
Stochează formatul etichetei pe imprimantă sub un nume. | Formate și imagini stocate | Rendered example |
^XF |
Recuperează un format stocat pentru a umple câmpurile ^FN. | Formate și imagini stocate | Rendered example |
~DG |
Stochează o imagine pe imprimantă sub un nume. | Formate și imagini stocate | Stores or recalls data; no image of its own |
^XG |
Tipărește o imagine stocată cu ~DG. | Formate și imagini stocate | Stores or recalls data; no image of its own |
^IM |
Tipărește o imagine stocată la originea câmpului curent. | Formate și imagini stocate | 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.
| Group | Commands |
|---|---|
| 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.
| Command | Symbology or feature | What the engine does today |
|---|---|---|
^B4 | Code 49 | No bars; the data is printed as text (Labelary doesn't draw it either). |
^BB | CODABLOCK | No symbol; the data is printed as text (Labelary doesn't draw it either). |
^BT | TLC39 | No symbol; the data is printed as text (Labelary doesn't draw it either). |
Known differences
- A format with no fields, such as
^XA^XZ, returns400 ERROR: No labels found in the ZPLinstead of a blank image. - Fonts: Zebra's font 0 (CG Triumvirate Bold Condensed) can't be bundled, so
^A0is drawn with Roboto Condensed Bold, with spacing calibrated per character. The bitmap fonts^AA–^AHare drawn with DejaVu Sans Mono. Text widths can differ by a few dots from a given printer. - An RFID write (
^RFfollowed by^FD…^FS) draws its data as text; a printer encodes it in the tag and prints nothing. - EPL reverse text (the
Rflag ofA) 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.
Trecerea de la 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.