从 iOS 应用程序取消或刷新 AirPrint 作业
Posted
技术标签:
【中文标题】从 iOS 应用程序取消或刷新 AirPrint 作业【英文标题】:Cancel or Flush AirPrint Jobs from iOS App 【发布时间】:2020-01-09 01:23:16 【问题描述】:ios 有一个称为 AirPrint 的打印功能,它不需要安装特定的设备驱动程序。我的 iOS 应用程序通过 AirPrint 打印图像数据,但有时 AirPrint 的打印队列卡住了。 AirPrint 的打印队列是先进先出的,如果第一个作业由于临时网络故障等原因留下,下一个作业将不会发送到打印机。
因此,我希望刷新打印队列,或取消死作业以防卡在打印队列中。我知道我们可以在 Print Center(iOS 打印系统的后台应用程序)中取消打印作业,但我希望在我自己的 iOS 应用程序中执行此操作。
问题:
(1) 我们可以从 iOS 应用程序中取消或清除 AirPrint 的打印队列中的打印作业吗? (如果你有 Swift 的示例代码来做这样的事情,我真的很感激!)
(2) 有谁知道打印作业超时需要多长时间?
欢迎提出任何建议。
AirPrint 参考: https://developer.apple.com/library/archive/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/Printing/Printing.html#//apple_ref/doc/uid/TP40010156-CH12-SW2
【问题讨论】:
【参考方案1】:iOS 中有一个 UI 可用于 PrintJob 管理。所以可能有可用的 API。
如果 iOS-PrintJob 返回 ipp job-uri,您可以在应用中实现打印作业管理。您必须实现 ipp 协议并支持 Cancel-Job 操作。
iOS 使用 CUPS 作为 ipp 客户端。我通过针对我自己的 AirPrint 实现运行测试来分析 iOS 的行为。使用的 http User-Agent 是“CUPS/2.3.4 (iOS 14.4.2; iPad8,3) IPP/2.0”
iOS 只关心成功的打印作业提交。 它确实通过 Get-Job-Attributes 操作查询作业状态。 iOS 提供一个允许用户监视(和控制)打印作业的 UI 是有道理的。我们应该为 iOS @Apple 提交错误或功能请求。
iOS 还会查询打印机状态。在我的测试中,当我停止我的 AirPrint 服务器时,我会收到打印机离线的通知,并且我可以选择取消或重试。
当打印机状态为“停止”且原因为“暂停”时,打印中心可用!
总结: 作业监视和控制可通过打印中心进行。 打印中心是否显示取决于 AirPrint 实现。
【讨论】:
以上是关于从 iOS 应用程序取消或刷新 AirPrint 作业的主要内容,如果未能解决你的问题,请参考以下文章
从 uiwebview (iOs) 打印本地 html 文件