Veröffentlicht:
ZPL ist eine Druckersprache: Der Drucker selbst rendert sie. Unter macOS und Linux ist das Drucksystem CUPS — und CUPS tut normalerweise das Gegenteil dessen, was ein ZPL-Auftrag braucht: Es schickt jeden Auftrag durch Filter, die Dokumente in Druckerbefehle umwandeln. Ihr Auftrag ist bereits Druckerbefehle; die Warteschlange muss die Bytes unangetastet durchreichen. Genau das macht eine Raw-Warteschlange.
Hängt an der Queue ein Treiber oder Filter, passiert eines von zwei
Dingen: Der Filter weist den Auftrag ab, oder — das klassische Symptom —
der Drucker druckt Ihren ^XA…^XZ-Quelltext als
sichtbaren Text aufs Etikett. Das Etikett ist nicht kaputt; die
Queue hat ZPL für ein Dokument gehalten. Im ZPL lässt sich das nicht
beheben: Es ist eine Queue-Einstellung.
macOS wie Linux bringen lpadmin mit:
sudo lpadmin -p zebra-raw -E -v socket://192.168.1.50:9100 -m raw
-p benennt die Queue, -E aktiviert sie,
-v ist die Geräte-URI (hier die IP des Druckers mit
Raw-Port 9100), und -m raw heißt: kein Treiber, kein
Filter. Für einen USB-Drucker zuerst mit lpinfo -v die URI
ermitteln und die usb://…-Zeile verwenden.
Neuere CUPS-Versionen geben für Raw-Queues eine Deprecation-Warnung aus. Sie funktionieren weiterhin; die Warnung betrifft die künftige Richtung von CUPS, und die Direkt-Socket-Alternative unten hängt gar nicht von CUPS ab.
lp -d zebra-raw etikett.zpl
Müssen Sie eine bestehende Queue mit Treiber verwenden, geht
Durchreichen pro Auftrag: lp -d zebra -o raw etikett.zpl —
eine eigene Raw-Queue ist aber schwerer falsch zu benutzen.
Die Druckerdialoge der Systemeinstellungen wollen einen Treiber oder
AirPrint wählen — beides ist für Dokumente gedacht, nicht für rohes
ZPL; legen Sie die Queue deshalb im Terminal mit lpadmin
an. Wer eine Browser-Oberfläche mag: Das CUPS-Webinterface ist
standardmäßig aus, cupsctl WebInterface=yes schaltet es
ein, dann localhost:631 öffnen.
lpstat -p listet Queues und Zustand,
lpstat -o wartende Aufträge, cancel -a räumt
auf. Ein Auftrag mit Status "completed" heißt nur: CUPS hat die Bytes
übergeben — wie bei Port 9100 selbst ist das kein Beweis für ein korrekt
gedrucktes Etikett. Vor dem Senden das ZPL in den
Online-Viewer einfügen: Papier kennt
kein Zurück.
Für einen einmaligen Auftrag ist das direkte Senden an TCP-Port 9100 einfacher — keine Queue zu konfigurieren; siehe ZPL an einen Netzwerkdrucker senden. Was CUPS beisteuert, ist Spooling: benannte Queues, Reihenfolge, Wiederholungen, Berechtigungen. Teilen sich mehrere Personen oder Systeme einen Drucker, lohnt sich diese Schicht. Zur größeren Treiberfrage — alle drei rohen Wege und wann ein echter Treiber hilft — siehe ZPL ohne Treiber drucken.
Weil an der CUPS-Queue ein Treiber oder Filter hängt, der den ZPL-Quelltext als Dokument behandelt. Die Queue raw anlegen (lpadmin mit -m raw) oder pro Auftrag -o raw übergeben; im ZPL selbst lässt sich eine Queue-Einstellung nicht beheben.
Nein. Die Firmware des Druckers rendert ZPL selbst; die Queue muss die Bytes nur unangetastet durchreichen — genau das tut eine Raw-Queue in CUPS. Ein Treiber übersetzt Dokumente, und ein ZPL-Auftrag ist per Definition keines.
Raw-Queues funktionieren weiterhin; die Warnung betrifft die künftige Richtung von CUPS. Sollte es je ein Problem werden: Direktes Senden an TCP-Port 9100 hängt gar nicht von CUPS ab und erreicht dasselbe Durchreichen.
ZPL ist die Sprache der Zebra-Thermodrucker. Wie die Befehle zu lesen sind, wie ein Etikett aufgebaut wird und welche Fehler am häufigsten vorkommen.
Welche Barcode-Symbologie soll ich wählen?EAN-13, Code 128 oder QR? Praktische Regeln für die Wahl des Barcodes nach Daten, Platz und Lesegerät.
ZPL-Datei ohne Drucker in der Vorschau ansehenEine ZPL-Datei ist nur Text — das Etikett existiert erst, wenn etwas es zeichnet. Drei praktische Wege, ein ZPL-Etikett vor dem Drucker zu sehen.