データベースからuserIdを取得し、それをバーコードに変換してからプリンターに送信するJavaアプリケーションを作成しています。Zebraプリンターを使用することを計画していますが、JavaアプリケーションからZebraプリンターに印刷した経験がある人はいないかと思いました。もしそうなら、これを可能にするいくつかのコードを共有できますか?
よろしくお願いします、Tumaini
データベースからuserIdを取得し、それをバーコードに変換してからプリンターに送信するJavaアプリケーションを作成しています。Zebraプリンターを使用することを計画していますが、JavaアプリケーションからZebraプリンターに印刷した経験がある人はいないかと思いました。もしそうなら、これを可能にするいくつかのコードを共有できますか?
よろしくお願いします、Tumaini
Zebraプリンターを操作するには2つの方法があります。1つ目は、通常のプリンターと同じように印刷することです。Java印刷の基本は、公式チュートリアルで詳しく説明されています。ページの終わりは、プリンターによってステッカーの終わりとして扱われます。このアプローチの欠点は、すべての塗装を手作業で行わなければならないことです。つまり、内部プリンタのバーコード機能を使用することはできません。
2つ目は、ZPLコマンドを直接プリンターに書き込むことです。このようなもの:
PrintService pservice = ... // acquire print service of your printer
DocPrintJob job = pservice.createPrintJob();
String commands = "^XA\n\r^MNM\n\r^FO050,50\n\r^B8N,100,Y,N\n\r^FD1234567\n\r^FS\n\r^PQ3\n\r^XZ";
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
Doc doc = new SimpleDoc(commands.getBytes(), flavor, null);
job.print(doc, null);
欠点は、ZPL(Zebraプログラミング言語)を学ぶ必要があることです。簡単ですが、画像やカスタムフォントなどは頭痛の種になる可能性があります。プログラミングマニュアルは、Zebraサイトのパート1およびパート2で無料で入手できます。
すべてのZebraプリンタにZPLIIがあるわけではありませんが、EPLを使用できます
Zebra.pdfのEPL2プログラミングガイド(コメントセクションのリンク)
コードサンプル:
private static boolean printLabel(PrintService printService, String label) {
if (printService == null || label == null) {
System.err.println("[Print Label] print service or label is invalid.");
return false;
}
String czas = new SimpleDateFormat("d MMMMM yyyy'r.' HH:mm s's.'").format(new Date());
String command =
"N\n"+
"A50,50,0,2,2,2,N,\""+label+"\"\n"+
"B50,100,0,1,2,2,170,B,\""+label+"\"\n"+
"A50,310,0,3,1,1,N,\""+czas+"\"\n"+
"P1\n"
;
byte[] data;
data = command.getBytes(StandardCharsets.US_ASCII);
Doc doc = new SimpleDoc(data, DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
boolean result = false;
try {
printService.createPrintJob().print(doc, null);
result = true;
} catch (PrintException e) {
e.printStackTrace();
}
return result;
}