如何:模拟 (IPP) 打印机

Posted

技术标签:

【中文标题】如何:模拟 (IPP) 打印机【英文标题】:How to: simulate an (IPP) printer 【发布时间】:2012-04-24 08:16:15 【问题描述】:

我想测试 IPP 应该具备的一些功能(即监控印象数;请参阅this question),但我还没有硬件。如何模拟这样的打印机?是否有虚拟 IPP 打印机的代码?

我将在 Linux 或 Windows 中工作。

【问题讨论】:

【参考方案1】:

Github 上的 IPP Sample Software 是一个成熟的、开源的、IPP-2.2IPP Everywhere 兼容的打印机模拟器。它由标准化 IPP(互联网打印协议)的机构 Printer Working Group (PWG) 提供。

IPP 示例软件可以在任何主要平台上编译:Linux、Windows、macOS。

该软件目前仍处于测试阶段,但已经非常实用。它提供的命令行工具之一是 ippserver。这是您正在寻找的模拟打印机。它比 Apple 的打印机模拟器强大得多——但它没有 GUI。您需要熟悉运行命令行工具。

一旦您可以启动ippserver(使用适当的选项),您的网络上就会拥有一个成熟的虚拟 IPP 打印机实例。您可以使用它来测试任何(或您自己编写的)IPP 客户端软件。

IPP Sample 提供了第二个重要工具 ipptool。这可以用作 IPP 客户端。你可以玩两者来互相测试。看看它在这个 ASCII-cast 中是如何工作的:

如果您想自己尝试并且在 Linux 上,您甚至不需要自己构建它。只需使用我阅读的软件AppImage(由一个单独的可执行文件组成),无需“安装”步骤即可直接运行。方法如下:

    下载它:

    wget https://github.com/KurtPfeifle/ippsample/releases/download/continuous/ippsample-x86_64.AppImage
    

    使 AppImage 可执行(并可选择将其重命名为 ippsample):

    chmod a+x ippsample-x86_64.AppImage
    mv ippsample-x86_64.AppImage ippsample
    

    看看它的内置帮助屏幕:

    ./ippsample --ai-usage
    

    运行它:

    ./ippsample ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.test
    

    (这将运行一个测试套件来验证 IP 地址 xxx.xxx.xxx.xxx 上的 IPP 打印机是否完全符合 IPP-2.0。)

更多测试示例:

    打印作业: ./ippsample ipptool -t -v \ -f my.pdf \ ipp://xxx.xxx.xxx.xxx/ipp/print \ print-job.test (这会将 my.pdf 作为打印作业发送到打印机。)

    验证打印机的 print-uri 支持: ./ippsample ipptool -t -v \ -o document-uri=https://ftp.pwg.org/pub/pwg/candidates/cs-ippeve10-20130128-5100.14.pdf \ ipp://xxx.xxx.xxx.xxx/ipp/print \ print-uri.test

    (这将告诉打印机从 document-uri 获取命名的 PDF 并打印它。)

【讨论】:

ippserver 和ippeveprinter 可以比吗?它必须独立运行,还是有办法进入打印作业处理程序?基本上我希望有一个程序能够监听打印作业,将文本/图像/pdf直接保存到文件中,并可以从属性字段访问目录数据。【参考方案2】:

一个非常好的 IPP 模拟器是 Apples Printer Simulator。在https://developer.apple.com/download/more/ 查找硬件 IO 工具(请参阅this question)

即使它仅适用于 OS X,您仍然可以在 Linux 或 Windows 上针对此网络服务进行测试。打印的页面可以在预览中弹出以供查看。模拟器还支持所需的 IPP 属性job-impressions-completed。该工具可节省大量纸张。

CUPS 不是一个好的模拟器。为了正常工作,它需要一台可以打印的真正打印机。您可以暂停一个队列并测试打印到它。除非您释放队列,否则您不会得到任何impressions-completed > 0。这将导致真实的而非模拟的打印。

【讨论】:

【参考方案3】:

CUPS 为打印机提供 IPP 接口。使用 Java 和 jspi(as mentioned in this question;它有点过时,需要一些修复,例如适应属性的解析语法),您可能有以下代码来访问本地打印机作为 IPP 打印机:

IppPrintService service = new IppPrintService(URI.create("ipp://localhost:631/printers/HL2240D-local"));

CUPS4J 也可用,我认为它可以做同样的事情,但通过它自己的界面而不是通过javax.print

【讨论】:

以上是关于如何:模拟 (IPP) 打印机的主要内容,如果未能解决你的问题,请参考以下文章

隔空打印 ipp lpd区别

Node.js 互联网打印协议 (IPP) API Oauth2 授权

Node.js:如何将打印作业添加到打印机

windows如何检测附近连接wifi的网络打印机?

如何在 Windows XP 中模拟慢速打印机?

lpd打印服务出现错误