1

我正在尝试打印到连接到运行 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()。现在打印机打印正常,但同样,一些未执行的命令和布局变得凌乱,看起来字符集错误,因为重音字符也不起作用

4

0 回答 0