javax.print PrintJobListener printJobCompleted 或 printJobFailed 事件从未被调用

标签 java printing

我正在使用javax.print.PrintJobListener来监视打印机作业状态,但无论打印是否成功,我都不会得到printJobCompletedprintJobFailed/printJobCanceled > 事件。 我总是收到 printDataTransferCompletedprintJobNoMoreEvents 事件,但我无法知道文档是否真的打印了。

有一个建议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/

相关文章:

python-3.x - 如何使用 Python 3 打印彩色输出?

java - 无法运行程序 "adb": error=13, 权限被拒绝

java - Java 中的 public、protected、package-private 和 private 有什么区别?

java - 使用正则表达式搜索不 protected 记录器

java - 使用 Java 编辑 PDF 文件

android - 为Android选择热敏打印机

java - 将 java jar stdout & stderr 记录到 linux 中的文件

java - 如果调用的方法采用可变数量的参数,如何使用 Invoke()

java - 打印数组时出错

javascript - mozilla firefox 打开子窗口时缺少垂直滚动条