Правильный способ отправки escape-кодов (необработанных данных) на принтер

В контексте более крупного приложения мой апплет должен распечатать некоторые данные на принтере этикеток Zebra или Dymo (в зависимости от того, что установлено пользователем).

Данные, которые я получаю, находятся в экранированной форме, данные, которые мне просто нужно отправить на принтер и позволить ему их интерпретировать.

Поискав, я нашел два решения. Способ 1:

byte[] printdata;
PrintService pservice = PrintServiceLookup.lookupDefaultPrintService(); //or get the printer in some other way
DocPrintJob job = pservice.createPrintJob();
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
Doc doc = new SimpleDoc(printdata, flavor, null);

и способ 2:

PrintStream printStream = new PrintStream(new FileOutputStream(“LPT1”));
printStream.print(“Hello World”);
printStream.close();

Мне это нужно для кроссплатформенной работы с принтерами, использующими USB или последовательный порт. Каков правильный способ реализовать такое поведение?

Одна проблема с методом 2 заключается в том, что мне нужно будет найти URL-адрес принтера таким же образом...


person Enoon    schedule 19.11.2012    source источник


Ответы (2)


public String rawprint(String printerName, String conte) {
    String res = "";
    PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
    printServiceAttributeSet.add(new PrinterName(printerName, null));
    PrintService printServices[] = PrintServiceLookup.lookupPrintServices(null, printServiceAttributeSet);
    if (printServices.length != 1) {
        return "Can't  select printer :" + printerName;
    }
    byte[] printdata = conte.getBytes();
    PrintService pservice = printServices[0];
    DocPrintJob job = pservice.createPrintJob();
    DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
    Doc doc = new SimpleDoc(printdata, flavor, null);
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    try {
        job.print(doc, aset);
    } catch(Exception e){
        res = e.getMessage();

    }
    return res;
}

Классно работает в javafx

person Dexter Varela Campos    schedule 19.07.2014
comment
Я последовал вашему ответу, но не смог распечатать файл изображения. - person Lokesh Pandey; 11.09.2017

Шестнадцатеричные распечатки заслуживают доверия. Вызовите String.getBytes(encoding), затем используйте System.out.format для печати каждого байта в виде шестнадцатеричного числа.

person mcandre    schedule 15.05.2013