我正在使用javax.print.PrintJobListener
来监视打印机作业状态,但无论打印是否成功,我都不会得到printJobCompleted
或printJobFailed/printJobCanceled
> 事件。
我总是收到 printDataTransferCompleted
和 printJobNoMoreEvents
事件,但我无法知道文档是否真的打印了。
有一个建议here检查 printJobNoMoreEvents
事件上的 PrintService
属性并查看打印队列是否为空,但它也不起作用,因为属性不会立即更新,所以即使打印成功,它也会说队列中有 1 个作业,如果打印失败也会出现这种情况。
有人有这方面的经验吗?这是 javax.print 问题,还是特定打印机问题?我在 Linux 上使用 Epson TM-T88V
打印机(从 epson 网站下载驱动程序)。我在 Mac OS X 上也有同样的行为。
最佳答案
javax.print
完全取决于系统的打印系统。在 Linux 和 OS X 上,javax.print
的实现可能使用命令行工具与 CUPS 进行通信。另一方面,CUPS 取决于特定打印机的驱动程序。详细的状态信息不可用或未由所涉及的众多组件之一转发的情况并不罕见。简单的驱动程序只是“一劳永逸”。
如果您的打印机支持 IPP,您可以从 IPP 作业对象读取属性作业状态
。这些可用的 IPP 实现可能会有所帮助:cups4j 或 jspi。
关于javax.print PrintJobListener printJobCompleted 或 printJobFailed 事件从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28188959/