Отправка штрих-кода на принтер Zebra из приложения Java - PullRequest
10 голосов
/ 16 февраля 2012

Я создаю Java-приложение, которое извлекает идентификатор пользователя из базы данных, преобразует его в штрих-код, а затем отправляет его на принтер.Я планирую использовать принтер Zebra, и мне было интересно, есть ли у кого-нибудь опыт печати на принтере Zebra из приложения Java;Если да, не могли бы вы поделиться кодом, который делает это возможным?

Заранее спасибо, Тумани

Ответы [ 2 ]

9 голосов
/ 16 февраля 2012

Существует два способа работы с принтерами Zebra. Первый - это печать на обычном принтере. Основы печати Java хорошо объяснены в официальном учебном пособии . Конец страницы будет считаться принтером как конец наклейки. Недостатком этого подхода является то, что все рисование должно быть сделано руками. То есть Вы не можете использовать функцию штрих-кодирования внутреннего принтера.

Второй - писать команды 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 .

8 голосов
/ 04 октября 2012

Не каждый принтер 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;
}
...