2008-09-16 41 views
2

我有一个使用杯子打印的Linux应用程序,但我注意到,如果我打印,然后立即退出我的应用程序,我的打印输出从不出现。所以我认为我的应用程序必须等待它退出之前才真正从打印机中出来,所以有人知道如何分辨打印完成时的情况?使用CUPS打印,我的应用什么时候可以退出?

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

+0

除了打印postscript,你如何打印?你使用libcups还是命令行util? – 2008-09-17 12:10:51

+0

我的代码生成一个postscript文件,然后使用libcups打印它。我没有使用命令行。 – KPexEA 2008-10-13 17:27:34

回答

0

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

1

只要您的CUPS网页界面(localhost:631)或其他一些关于CUPS看到的内容显示CUPS接收到该作业,就可以退出该应用程序。

1

如何使用打印假脱机服务如lpr & lpq

+0

`lpr`本身不是打印假脱机服务。这是将作业发送到实际打印假脱机服务的客户端命令。 `lpq`本身不是打印假脱机服务。这是将查询发送到实际打印假脱机服务的客户端命令。 实际的打印假脱机服务将是`lpd`。或者在CUPS:`cupsd`。 – 2010-06-24 17:31:41

1

您当然不需要等到纸张不在打印机中。但是,您需要等待临时文件完全收到cupsd中的后台打印文件(通常为/var/spool/cups/)。

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

您不指出libcups的哪个部分以及您正在使用哪个函数来实现您想要的功能。如果我必须这样做,我会使用IPP功能cupsSendRequest,然后cupsGetResponse来了解结果。

相关问题