2

在更大的应用程序的上下文中,我的小程序需要将一些数据打印到 Zebra 或 Dymo(取决于用户安装的)标签打印机。

我收到的数据是转义形式,我只需要将数据发送到打印机并让它解释它。

搜索我找到了两种解决方案。方法一:

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……

4

2 回答 2

3
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 中很酷

于 2014-07-19T09:49:51.807 回答
0

十六进制打印输出是值得信赖的。调用String.getBytes(encoding),然后使用System.out.format将每个字节打印为十六进制数。

于 2013-05-15T19:21:29.673 回答