Отправка штрих-кода на принтер Zebra из приложения Java
Я создаю приложение java, которое извлекает идентификатор пользователя из базы данных, преобразует его в штрих-код, а затем отправляет его на принтер. Я планирую использовать принтер Zebra, и мне было интересно, есть ли у кого-нибудь опыт печати на принтер Zebra из приложения Java; если да, не могли бы вы поделиться некоторым кодом, делающим это возможным?
спасибо заранее, Tumaini
2 ответов
существует два способа работы с принтерами Zebra. Первый-печатать как на обычном принтере. Основы печати Java хорошо объяснены в официальный учебник. Конец страницы будет обработан принтером как конец стикера. Недостатком такого подхода является то, что вся живопись должна выполняться руками. Т. е. вы не можете использовать способность штрихкодирования внутреннего принтера.
второй-это запись команд ZPL непосредственно на принтер. Что-то вроде этого:--4-->
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 имеет ZPL II, но тогда вы можете использовать EPL
руководство по программированию EPL2 для Zebra
код:
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;
}