使用 CUPS 打印,我的应用程序何时可以退出?

Posted

技术标签:

【中文标题】使用 CUPS 打印,我的应用程序何时可以退出?【英文标题】:Printings using CUPS, when can my app quit? 【发布时间】:2008-09-16 20:29:25 【问题描述】:

我有一个使用 cups 进行打印的 linux 应用程序,但我注意到如果我打印然后立即退出我的应用程序,我的打印输出永远不会出现。所以我假设我的应用程序必须等待它真正从打印机中退出才能退出,那么有谁知道如何判断它何时完成打印??

我正在使用 libcups 打印我的应用程序生成的 postscript 文件。所以我使用命令打印文件,然后返回到我的应用程序。所以我的应用程序认为该文档在我猜它还没有到达打印机队列时已经关闭。因此,与其让我的所有用户都必须在屏幕上查看系统托盘中的打印机图标,我宁愿有一个代码解决方案,所以如果他们在它真正被发送之前尝试退出,我可以提醒他们这个事实.此外,我生成的文件是一个临时文件,因此很高兴知道它何时完成,以便我可以删除它。

【问题讨论】:

除了打印后记,你如何打印?你使用的是 libcups 还是命令行工具? 我的代码生成一个 postscript 文件,然后使用 libcups 打印它。我没有使用命令行。 【参考方案1】:

只要您的 CUPS Web 界面 (localhost:631) 或其他可以查看 CUPS 所见内容的内容显示您 CUPS 收到了工作,您就可以退出应用程序。

【讨论】:

【参考方案2】:

使用lprlpq 之类的后台打印服务怎么样?

【讨论】:

lpr 本身不是后台打印服务。这是一个将作业发送到实际打印假脱机服务的客户端命令。 lpq 本身不是后台打印服务。这是向实际打印假脱机服务发送查询的客户端命令。实际的打印假脱机服务是lpd。或在 CUPS 中:cupsd.【参考方案3】:

您当然不需要等到纸张从打印机中取出。但是,您需要等到 cupsd 在其假脱机区域(通常是/var/spool/cups/)中完全接收到您的临时文件。

如果您在命令行上打印(使用 CUPS lplpr 命令之一),如果 shell 提示符返回,您就会知道作业正在进行中(该命令甚至会报告作业的 CUPS 作业 ID已发送),如果退出代码 ($?) 为 0。

您没有指明您使用 libcups 的哪个部分和哪个函数调用来实现您想要的。如果我必须这样做,我会使用 IPP 函数cupsSendRequest 然后cupsGetResponse 来知道结果。

【讨论】:

我正在调用 cupsPrintFile 函数。【参考方案4】:

当您退出时,您的应用可能尚未完成打印。如果您使用 evince 打印 PDF 或其他文档,这是一个已知的错误 - 没有视觉确认打印操作正在进行中。如果已提交打印作业,系统托盘中将出现一个打印机图标,直到实际打印完成。您可以单击系统托盘中的打印机图标,查看当前正在运行和待处理的作业。

【讨论】:

以上是关于使用 CUPS 打印,我的应用程序何时可以退出?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CUPS 和 nodejs 打印作业

使用中的 CUPS 打印机

更改 CUPS 打印机名称

有没有办法使用 CUPS 库获取打印机的字节命令列表?

pycups 或 cups 中的订阅如何工作?

使用 Cups Api 检测打印机状态变化