Um es für die Nachwelt festzuhalten, wie man einen seriellen
Zebra Labeldrucker (in diesem Fall das Modell
Zebra 105Se) dazu bekommt mit ZPL (
Zebra Programming Language) erstellte Labels über die Komandozeile zu drucken, hier ein kurzes HowTo:
Vorraussetzungen:
- Der Drucker ist per seriellem Kabel an den PC angeschlossen
- Auf dem PC läuft ein Linux
- CUPS ist installiert und lauffähig
Getestet und funktional mit folgenden Druckern:
Zebra 105Se (Seriell)
Zebra ZM400 (USB)
Schritt 1 - Drucker in CUPS hinzufügen:
Die folgenden Einstellungen sind für den hier benutzten Drucker passend, diese müssen evtl. individuell angepasst werden:

- /dev/ttyS0, da der Drucker am ersten COM-Port hängt
- Baud-Rate: 19200
- Bits: 8
- Parität: keine
- Flow: DTR/DSR
Klicken auf "Testseite drucken" sollte dazu führen, dass der Drucker ein leeres Label druckt.
Schritt 2 - Drucken über die Komandozeile:
Da CUPS auch Befehle für Kommandozeile bereitstellt, kann man den Drucker auf über diese ansprechen.
Wir erstellen eine Datei, welche den ZPL-Code für das zu druckende Label beinhaltet:
vi /tmp/testlabel.zpl
Dort tragen wir folgenden Code ein:
^XA
^CI6
^FO600,470^A0R,80,80^FR^FDTtile^FS
^FO380,75^A0R,60,60^FR^FDThis is a label-test...^FS
^FO340,140^A0R,18,18^FR^FDvery small text^FS
^FO180,290^A0R,40,40^FR^FDmore text^FS
^FO40,20^FR^GB0,1160,770^FS
~HS^XZ
Um das Label zu drucken, führen wir folgenden Befehl auf der Shell aus, was dazu führen sollte, dass der Drucker ein Label mit weißem Text auf schwarzem Hintergrund druckt:
lp -o raw -d Zebra105SE < /tmp/testlabel.zpl
Erkärung der Parameter:
- Der Befehl lp sendet oder ändert Druckaufträge
- Der Parameter -d Zebra105SE gibt an, dass der Drucker mit dem Namen Zebra105SE benutzt werden soll
- -o raw gibt an das der zu druckende Inhalt ohne Filter direkt an den Drucker geschickt werden soll
- Der zu druckende Inhalt steht in der Datei /tmp/testlabel.zpl, welche in den lp-Befehl gestreamt wird
Schritt 3 - Drucken in einem Java-Programm:
Für manche mag das Drucken von ZPL-Code in Dateien über die Kommandozeile schon ausreichen, hier noch ein kurzes Beispiel, wie das Drucken aus eine Java-Programm funktionieren könnte:
import java.io.IOException;
import java.io.OutputStream;
public class ZebraTest {
static String label="^XA"+
"^CI6"+
"^FO600,470^A0R,80,80^FR^FDTtile^FS"+
"^FO380,75^A0R,60,60^FR^FDThis is a label-test...^FS"+
"^FO340,140^A0R,18,18^FR^FDvery small text^FS"+
"^FO180,290^A0R,40,40^FR^FDmore text^FS"+
"^FO40,20^FR^GB0,1160,770^FS"+
"~HS^XZ";
public static void main(String[] args) {
try {
Process process=Runtime.getRuntime().exec("lp -o raw -d Zebra105SE");
OutputStream os=process.getOutputStream();
os.write(label.getBytes());
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Kommentare