如何:模拟(IPP)打印机

时间:2012-04-12 00:32:05

标签: printing simulate ipp-protocol

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

我将在Linux或Windows中工作。

3 个答案:

答案 0 :(得分:2)

一个非常好的IPP模拟器是苹果打印机模拟器。在https://developer.apple.com/download/more/查找硬件IO工具(请参阅this question

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

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

答案 1 :(得分:2)

Github上的IPP Sample Software是完全成熟的,开源的 IPP-2.2 IPP Everywhere 打印机模拟器。它由Printer Working Group(PWG)提供,它是对IPP(互联网打印协议)进行标准化的机构。

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

该软件目前仍处于测试阶段,但已经非常实用。它附带的命令行工具之一是 ippserver 。这是您要寻找的模拟打印机。它比Apples Printer Simulator功能强大得多-但它没有GUI。您需要熟悉运行命令行工具。

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

IPP示例附带第二个重要工具, ipptool 。这可以用作IPP客户端。您可以同时玩耍以相互测试。在此ASCII广播中查看其工作原理:

asciicast

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

  1. 下载它:

    wget https://github.com/KurtPfeifle/ippsample/releases/download/continuous/ippsample-x86_64.AppImage
    
  2. 使AppImage可执行文件 (并可选地将其重命名为 ippsample ):

    chmod a+x ippsample-x86_64.AppImage
    mv ippsample-x86_64.AppImage ippsample
    
  3. 看看其内置的帮助屏幕:

    ./ippsample --ai-usage
    
  4. 运行它:

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

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

更多测试示例:

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

  2. 验证打印机的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并进行打印。)

答案 2 :(得分:1)

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

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

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