9

我有一个您无法为其安装驱动程序的设备/设备。我想通过让用户添加 IP 地址来添加支持网络/IPP/AirPrint 打印机的功能。

由于我不是通过 Windows 打印(将使用 IPP),我自己如何使用 IPP?是否有 ac# 客户端(或任何 Windows 库)允许您使用 IPP 协议与 IPP 打印机进行交互?

4

2 回答 2

9

有一些 IPP 客户端实现和 IPP 库可用于不同的编程语言(java/php/python)。一个实用的解决方案可能是使用http://cups.org/software.phpipptool上的可用解决方案。创建一个名为的ipp 命令文件printjob.ipp

{
 OPERATION Print-Job
 GROUP operation-attributes-tag
  ATTR charset attributes-charset utf-8
  ATTR language attributes-natural-language en
  ATTR uri printer-uri $uri
 FILE $filename
}

现在您应该能够使用以下选项打印 PDF 文件:

ipptool -tv -f mydoc.pdf ipp://192.168.2.207 printjob.ipp

确保打印机(或打印服务器)支持您发送的文档格式。我假设您熟悉如何在应用程序中执行外部命令。

即使它ipptool是由 CUPS 提供的,它也适用于任何 IPP 打印机。检查RFC 3510或您的打印机文档以获取适当的打印机 uri-scheme 或使用ippfind.

经验丰富的开发人员应该能够以他们喜欢的编程语言和生态系统来实现打印作业操作。我已经用 100 行代码在 kotlin 中实现了上面的用例:https ://github.com/gmuth/ipp-printjob-kotlin 。

这是我在 Java 中的最小 PrintJob 实现:https ://github.com/gmuth/ipp-printjob-java

于 2015-01-28T20:44:16.277 回答
1

IPP 示例软件

同时IPP 示例软件(包括ipptool上面提到的)是 Github 上的一个单独项目。它现在由标准化 IPP(互联网打印协议)的机构打印机工作组(PWG) 主持。

虽然该软件目前仍处于测试阶段,但已经非常实用。它提供了两个主要的命令行工具:

  1. ippserver. 启动它(使用适当的选项),您将在网络上拥有一个成熟的 IPP 服务器实例,用作虚拟 IPP 打印机(或托管多个虚拟 IPP 队列的 IPP 服务器),您可以使用它来测试任何(或您自己) -written) IPP 客户端软件反对。

  2. ipptool. 这是一个 IPP 客户端程序,它可以将 IPP 请求的任意组合发送到网络上的任何 IPP 实例(CUPS 服务器、ippserver支持 IPP 的打印机硬件)并验证其响应。该软件附带了一些准备好的文本文件,其中包含示例 IPP 请求,所有.test文件名都带有后缀。

出于您的目的,您可以运行以下命令:

  1. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print get-printer-attributes.test. 此命令将查询任何 IPP 打印机有关其支持的 IPP 属性的信息。这应该包括一个项目,说明其假定的IPP 版本支持。例如报告为ipp-versions-supported (1setOf keyword) = 1.0,1.1,2.0.

  2. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-1.1.test. 此命令将对打印机运行完整的验证套件,以测试其实际IPP-1.1 合规性。

  3. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.test. 此命令将对打印机运行完整的验证套件,以测试其实际IPP-2.0 合规性。

  4. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.test. 此命令将对打印机运行完整的验证套件,以测试其实际IPP-2.0 合规性。

  5. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.1.test. 此命令将对打印机运行完整的验证套件,以测试其实际IPP-2.2 合规性。

  6. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.2.test. 此命令将对打印机运行完整的验证套件,以测试其实际IPP-2.2 合规性。

  7. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-everywhere.test. 此命令将对打印机运行完整的IPP Everywhere(这是最新的 IPP 标准)验证套件,以测试其真实世界的IPP Everywhere 合规性。


IPP 示例软件的 AppImage

为了方便你们进行此类测试,我从 IPP 示例软件创建了一个现成的可执行 AppImage,它应该能够在所有 x86_64 Linux 发行版上直接运行(无需“安装”!)。

您可以在(几乎)任何 Linux 系统上使用它,而无需安装 CUPS 或 ippsample!

AppImage 嵌入了 IPP 示例软件项目的所有主要可执行命令行工具。这些可执行文件将作为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
    
  5. 查找附近所有支持 IPP 的打印机:

    ./ippsample ippfind
    

    会产生 s.th. 喜欢:

    ipp://HPA0B3CCF051B9.local:631/ipp/printer
    ipp://lenjessie2.local:8444/ipp/print
    ipp://mbp14.papercut-ipv4.local:631/printers/OJ6500
    ipp://mbp14.papercut-ipv4.local:631/printers/libreoffice-pin-code-drucker
    
  6. 选择一台打印机,打印一份作业:

    ./ippsample ipptool       \
            -tv               \
            -f ./printjob.pdf \
             ipp://HPA0B3CCF051B9.local:631/ipp/printer \
             print-job.test
    

ASCIinema ASCIIcast

这是一个(较旧的)ASCIinema ascii-cast,用于说明我所写的内容以及如何使用 IPP 示例软件(及其 AppImage):

asciiccast

于 2018-12-08T22:13:10.483 回答