我正在尝试打印到连接到运行 Windows 的机器的热敏 USB 打印机,从一个 Web 服务中一一接收到的命令列表。问题是我需要创建一个接收所有数据的 PrintJob,而不是接收每个 byte[] 的作业。这是我的代码:
...//communicated with webserver and received data using "message" variable
PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();
System.out.println("Default printer: " + defaultPrintService.getName());
if (defaultPrintService != null) {
sendMessage("connected"); //send message to the server to start receiving data to print
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
while (!message.contentEquals("done")) {
try {
message = (String) in.readObject();
if (!message.contentEquals("done")) {
Doc doc = new SimpleDoc(message.getBytes(), flavor, null);
DocPrintJob job = defaultPrintService.createPrintJob();
job.print(doc, null);
}
} catch (Exception e) {
// Handle exception
e.printStackTrace();
}
}
那里发生的情况是,windows 为收到的每条消息创建一个打印作业(好吧,我从一开始就知道),这需要几分钟来打印一些行。
另一个问题是,如果我通过网络直接打印到打印机,它打印得很好。通过 USB,它只打印一些命令,如换行和剪纸,而不是文本(就像通过网络一样)。
我错过了什么?
谢谢大家!
更新
我已将所有收到的字符串连接成一个字符串,他们试图从该字符串中打印 getBytes()。现在打印机打印正常,但同样,一些未执行的命令和布局变得凌乱,看起来字符集错误,因为重音字符也不起作用