ZPL-Tutorial: Befehle, Beispiele und Vorschau. Sieh dir den kostenlose ZPL Vorschau online an.

Was eine Zebra wirklich spricht. Gestalte im Browser und kopiere dann das ZPL.

ZPL-Tutorial: Befehle und Beispiele

Veröffentlicht: · 9 Min. Lesezeit · Referenz

Dieses ZPL-Tutorial erklärt die paar Befehle hinter jedem Zebra-Etikett: ^XA und ^XZ für Anfang und Ende, ^FO zum Platzieren eines Felds, ^A0 für die Schrift, ^FD und ^FS für die Daten sowie ^BC und ^BQ für Barcodes. Zu jedem gibt es ein Beispiel, das du in einen Viewer einfügen kannst.

Brauchst du eine Vorschau? Öffne die kostenlose ZPL Vorschau und füge deinen ^XA-Code ein. Willst du das Etikett zuerst erstellen, nimm den kostenlosen Etiketten-Editor. Ohne Anmeldung.

Was ZPL ist

Jedes Etikett, das eine Zebra druckt, ist ein winziges Programm in ZPL, der Zebra Programming Language.

Der Drucker nimmt keine PDFs oder Word-Dateien an. Er nimmt ZPL-Befehle, einen nach dem anderen, bis er eine Markierung erreicht, die sagt: Das Etikett ist fertig. Dann legt der Druckkopf los.

Um zu drucken, musst du kein ZPL lernen. Der kostenlose Etiketten-Editor schreibt es für dich. Die Grundlagen helfen trotzdem, aus zwei Gründen:

Am Ende kannst du einen ZPL-String ansehen und ungefähr erkennen, welches Etikett daraus wird. Der letzte Teil zeigt, wie Copy ZPL funktioniert, damit du es in deine eigene Pipeline einbauen kannst.

Der Aufbau eines ZPL-Etiketts

Das einfachste mögliche ZPL-Etikett sieht so aus:

// Start a label
^XA

// Move to position (50, 50) and print "Hello World"
^FO50,50^A0N,36,36^FDHello World^FS

// End the label, fire the printer
^XZ

Jedes Etikett, egal wie komplex, beginnt mit ^XA und endet mit ^XZ. Alles dazwischen ist eine Folge von Befehlen.

Jeder Befehl besteht aus einem Zirkumflex (^) und zwei Buchstaben, die ihn benennen, plus optionalen Parametern, getrennt durch Kommas.

Das Beispiel nutzt das absolute Minimum:

Punkte, DPI und warum sich Koordinaten seltsam anfühlen

Alle Koordinaten und Größen in ZPL sind in Punkten (Dots) angegeben, der physischen Auflösung des Druckkopfs. Drei DPI-Stufen decken fast alles ab:

Das klingt nach einem Detail, verändert aber den Druck. Derselbe ZPL-String landet auf Druckern mit unterschiedlicher DPI an unterschiedlichen Stellen.

Ein ^FO100,100 setzt dein Feld auf einem 203-DPI-Drucker etwa einen halben Zoll nach innen. Auf einem 600-DPI-Drucker setzt derselbe Befehl es nur etwa 0.17 Zoll nach innen. ZPL hat keine Ahnung, was ein Zoll ist. Alles sind Punkte.

Deshalb merkt sich mylabelmaker die DPI des aktiven Druckers und rendert in der nativen Auflösung des Druckers. Warum deine Zebra bei 300 DPI unscharf druckt erzählt die ganze Geschichte.

Die ZPL-Befehle, die du am häufigsten siehst

Befehl Was er macht
^XABeginn des Etiketts. Immer das Erste.
^XZEnde des Etiketts. Wenn der Drucker das sieht, druckt er.
^PW nDruckbreite in Punkten. Optional, Standard ist die Breite des eingelegten Etiketts.
^LL nEtikettenlänge in Punkten. Dasselbe Prinzip für die Höhe.
^PQ nPrint Quantity (Druckmenge). ^PQ3 bedeutet „drucke 3 Exemplare dieses Etiketts“.
^FO x,yField Origin. Wo das Nächste platziert wird.
^FD textField Data. Der eigentliche Inhalt eines Text- oder Barcode-Felds.
^FSField Separator. „Ich bin mit diesem Feld fertig.“
^A0N,h,wSkalierbare Schrift 0, Drehung N (normal), Höhe h Punkte, Breite w Punkte.
^BCCode-128-Barcode.
^BQQR-Code.
^BY w,r,hStandardwerte für Barcode-Felder festlegen (Modulbreite, Verhältnis, Höhe).
^GFAGraphic Field, ASCII. Der mächtigste Befehl. Bettet eine 1-Bit-Bitmap direkt ins ZPL ein.
^MD nMedia Darkness (Druckschwärze). 0 bis 30. Steuert, wie dunkel gedruckt wird. (Höher = dunkler.)
^PR nPrint Rate (Druckgeschwindigkeit). Zoll pro Sekunde, die der Kopf zurücklegt. Niedriger = schärfer, höher = schneller.
~JRDrucker zurücksetzen (selten nötig).

Mit nur diesen Befehlen kannst du ein komplettes Etikett von Hand schreiben. Ein kleines Produktetikett mit Name, Preis und Barcode hat etwa zehn Zeilen.

Füge einen kurzen Auftrag ein und sieh dir das ZPL im Browser an, um ^FO, ^A, ^BC oder ^BQ vor dem Drucken zu prüfen.

Ein ZPL-Beispiel, Zeile für Zeile

Hier ein umfangreicheres Etikett, so wie mylabelmaker es erzeugt, wenn du ein Versandetikett gestaltest:

^XA
^MD12
^PR4
^PW812
^PQ1
^FO0,0
^GFA,121800,121800,150,[hex bitmap data omitted]^FS
^XZ

Dieses ^GFA ist der Standardweg von mylabelmaker. Es rendert die ganze Arbeitsfläche (Text, Barcodes, QR, Formen, Bilder) in der nativen DPI des Druckers zu einer Bitmap und sendet sie als ein einziges Grafikfeld.

So stimmt das gedruckte Etikett am zuverlässigsten mit dem Bildschirm überein, weil die druckereigene Schriftdarstellung, Barcode-Erzeugung und alle Firmware-Eigenheiten umgangen werden.

Gut zu wissen: Die Alternative ist ZPL, das die eingebauten Schriften des Druckers (^A0) und seine Barcode-Encoder (^BC, ^BQ) nutzt. Solche Strings sind kleiner, binden dich aber an die Schriften, die auf deinem Drucker geladen sind, und an seine eigene Barcode-Umsetzung. Mit vorab gerendertem ^GFA liefert dasselbe ZPL auf jeder Zebra mit gleicher DPI ein identisches Ergebnis.

ZPL aus mylabelmaker holen

Nichts davon musst du selbst schreiben. Der Editor erzeugt das ZPL für alles, was du gestaltest. So holst du es dir:

  1. Öffne https://app.mylabelmaker.com. Ohne Anmeldung.
  2. Wähle eine Größe und füge Text, Barcodes, QR-Codes oder Bilder ein, was das Etikett eben braucht.
  3. Öffne die Druckereinstellungen (das Zahnrad) und nutze Auto-detect (automatisch erkennen), damit das Etikett in der tatsächlichen DPI deines Druckers gerendert wird.
  4. Klicke oben rechts im Editor auf Options und dann auf Copy ZPL (ZPL kopieren). Der komplette ^XA … ^XZ-String für das aktuelle Etikett landet in deiner Zwischenablage.
  5. Füge ihn ein, wo du ihn brauchst: in eine Textdatei, einen Druckserver, eine Anfrage an deine Fulfillment-API, eine Chatnachricht.
mylabelmaker Save Options ▾ Copy ZPL Export label Import label
Das Options-Menü in der Kopfzeile des Editors. Copy ZPL legt das native ZPL für das aktuelle Etikett in deine Zwischenablage. Um den kopierten Code zu prüfen, bevor er an einen Drucker geht, füge ihn in die ZPL Vorschau online ein.

Variablen und Stapeldruck

Wenn du einen Stapeldruck aus einer CSV oder einem Google Sheet startest, erzeugt mylabelmaker für jede Zeile einen eigenen ZPL-String mit den Werten dieser Zeile und sendet sie nacheinander.

Copy ZPL kopiert nur die aktuelle Zeile. Praktisch, um eine Zeile in deinem Backend zu testen, bevor du es auf die ganze Tabelle loslässt.

ZPL aus deinem eigenen Code senden

Sobald du den String hast, kann dein Backend ihn an eine Zebra senden: über einen TCP-Socket (Port 9100 bei Netzwerkdruckern), über die localhost-API des Browser-Print-Hilfsprogramms oder über einen beliebigen Zebra-Druckserver.

Das einfachste Beispiel, ein ZD621 im Netzwerk unter 192.168.1.50:

# Python
import socket
zpl = "^XA^FO50,50^A0N,36,36^FDHello^FS^XZ"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.50", 9100))
s.send(zpl.encode("utf-8"))
s.close()

Das ist schon das ganze Muster. In jeder Sprache: TCP-Socket zur IP des Druckers auf Port 9100 öffnen, die ZPL-Bytes schreiben, schließen. Der Drucker druckt, sobald er ^XZ sieht.

Die Kurzliste zum Überfliegen von ZPL

Wenn du ZPL liest, das jemand anderes erzeugt hat, ein früherer Entwickler oder ein geerbtes System, begegnen dir diese:

ZPL auf einen Blick

  • ^XA … ^XZ umschließt jedes Etikett.
  • ^FO x,y positioniert das nächste Feld.
  • ^A0N,h,w wählt Schrift und Größe.
  • ^FD … ^FS enthält und beendet die Daten eines Felds.
  • ^BC ist Code 128, und ^BQ ist QR.
  • ^GFA bettet eine Bitmap ein.
  • ^PQ ist die Menge, ^MD die Druckschwärze und ^PR die Geschwindigkeit.

Alles andere ist eine Variante davon oder ein Spezialbefehl, etwa für RFID-Codierung, Statusabfragen oder die Druckerkonfiguration. Die offizielle ZPL-II-Referenz, ein kostenloses PDF von Zebra, enthält die ausführliche Fassung, falls du sie je brauchst.

Das Fazit

ZPL ist eine kleine, schlichte ASCII-Befehlssprache, die es seit den 1990ern gibt und die nicht so bald verschwinden wird.

Du musst es nicht schreiben. Der Editor kümmert sich um die Eigenheiten (DPI-Umrechnung, Schriftrasterung, Barcode-Codierung, Bitmap-Packen) und sendet einen sauberen ^XA … ^XZ-String an deinen Drucker.

Du musst kein ZPL schreiben, aber wenn du weißt, was im String steht, kannst du Fehler besser finden.

Es hilft auch, wenn du ein Backend anbindest oder wenn jemand fragt, was die Etikettensoftware eigentlich macht.

Fragen zu diesem ZPL-Tutorial

Was sind die grundlegenden ZPL-Befehle?

^XA beginnt ein Etikett und ^XZ beendet es. ^FO legt fest, wohin das nächste Feld kommt, ^A0 wählt Schrift und Größe, ^FD enthält die Daten und ^FS beendet das Feld. ^BC ist ein Code-128-Barcode und ^BQ ein QR-Code.

Warum druckt dasselbe ZPL auf einer anderen Zebra anders?

ZPL rechnet in Punkten, nicht in Zoll. Ein 203-DPI-Drucker hat 203 Punkte pro Zoll und ein 600-DPI-Drucker 600, deshalb landen dieselben Koordinaten an einer anderen Stelle. Stimme die DPI auf den Drucker ab.

Muss ich ZPL lernen, um auf einer Zebra zu drucken?

Nein. Der kostenlose Etiketten-Editor schreibt das ZPL für alles, was du erstellst. Die Grundlagen helfen, wenn du ein Etikett debuggst oder ZPL aus einem Backend sendest.

Wie kopiere ich ZPL aus mylabelmaker?

Gestalte das Etikett und klicke dann auf Options und Copy ZPL. Der komplette String von ^XA bis ^XZ für das aktuelle Etikett landet in deiner Zwischenablage. Ist eine Tabelle geladen, wird die aktuelle Zeile kopiert.

Wie sehe ich ZPL vor dem Drucken in der Vorschau?

Füge den Code in die kostenlose ZPL Vorschau ein, und sie zeigt dir ein Bild des Etiketts im Browser. Ohne Anmeldung.

ZPL überspringen und das Etikett gestalten

Zeichne das Etikett im Editor und drucke es. Das ZPL wird für dich geschrieben, und du kannst es jederzeit herauskopieren. Ohne Anmeldung.

Kostenlosen Etiketten-Editor öffnen