Printing 使用不带驱动程序的IPP打印(IPP客户端)

Printing 使用不带驱动程序的IPP打印(IPP客户端),printing,network-protocols,network-printers,ipp-protocol,Printing,Network Protocols,Network Printers,Ipp Protocol,我有一个您无法为其安装驱动程序的设备/设备。我想通过让用户添加IP地址来添加支持网络/IPP/AirPrint打印机的功能 由于我不是通过windows打印(使用IPP),我自己如何使用IPP?是否有一个c#客户端(或任何windows库)允许您使用IPP协议与IPP打印机交互?有一些IPP客户端实现和IPP库可用于不同的编程语言(java/php/python)。一个实用的解决方案是使用IPP工具。创建一个名为printjob.ipp的 { OPERATION Print-Job GROU

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


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

有一些IPP客户端实现和IPP库可用于不同的编程语言(java/php/python)。一个实用的解决方案是使用
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
确保打印机(或打印服务器)支持您发送的文档格式。我假设您熟悉如何在应用程序中执行外部命令

尽管CUPS提供了
IPP工具
,但它可以完美地与任何IPP打印机配合使用。检查或查看打印机文档以了解适当的打印机uri方案,或使用
ippfind

有经验的开发人员应该能够在他们首选的编程语言和生态系统中实现打印作业操作。我已经用100行代码在kotlin中实现了上面的用例:

这是我在Java中的最小PrintJob实现:

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

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

  • ippserver
    。启动它(使用适当的选项),您的网络上将有一个成熟的IPP服务器实例,充当虚拟IPP打印机(或承载多个虚拟IPP队列的IPP服务器),您可以使用它来测试任何(或您自己编写的)IPP客户端软件

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

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

  • ipptool-t-vipp://xxx.xxx.xxx.xxx/ipp/print 获取打印机属性。测试
    。 此命令将查询任何IPP打印机支持的IPP属性。 这应该包括一个项目,说明其假定的IPP版本支持。 例如,报告为支持的
    ipp版本(1setOf关键字)=1.0,1.1,2.0

  • ipptool-t-vipp://xxx.xxx.xxx.xxx/ipp/print ipp-1.1.测试
    。 此命令将针对打印机运行一个完整的验证套件,以测试其真实世界的IPP-1.1合规性

  • ipptool-t-vipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.测试
    。 此命令将针对打印机运行一个完整的验证套件,以测试其真实世界的IPP-2.0合规性

  • ipptool-t-vipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.测试
    。 此命令将针对打印机运行一个完整的验证套件,以测试其真实世界的IPP-2.0合规性

  • ipptool-t-vipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.1.测试
    。 此命令将针对打印机运行一个完整的验证套件,以测试其真实世界的IPP-2.2合规性

  • ipptool-t-vipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.2.测试
    。 此命令将针对打印机运行一个完整的验证套件,以测试其真实世界的IPP-2.2合规性

  • ipptool-t-vipp://xxx.xxx.xxx.xxx/ipp/print ipp无处不在。测试
    。 此命令将针对打印机运行完整的IPP Everywhere(最新的IPP标准)验证套件,以测试其真实世界的IPP Everywhere合规性


  • IPP示例软件的AppImage 为了使这类测试对你们来说更容易,我从IPP示例软件中创建了一个现成的可执行AppImage,它应该能够在所有x86_64 Linux发行版上直接运行(无需“安装”)

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

    AppImage嵌入了IPP示例软件项目的所有主要可执行命令行工具。这些可执行项将作为AppImage的“子命令”运行。请参阅下面的示例

  • 下载:

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

  • 查看其内置的帮助屏幕:

  • 运行它:

  • 在附近找到所有支持IPP的打印机:

    将产生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
    
  • 选择一台打印机,打印作业:


  • 腹水瘤 下面是一个(较旧的)ASCIinema ascii转换,作为我所写内容以及如何使用IPP示例软件(及其AppImage)的说明:


    我也在调查同样的事情。我已经弄明白了UPnP打印的基础,但到目前为止,研究IPP/AirPrint几乎没有成功。如果你有任何进展,请更新你的帖子。我会的。网络上什么都没有。苹果对打印机/设备之间的实际网络合同非常保守。我在IPP上找不到任何东西。我在某个地方读到AirPrint是IPP的一个扩展,所以如果我们能找到IPP,那么我们就可以
    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
    
    ./ippsample ippfind
    
    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
    
    ./ippsample ipptool       \
            -tv               \
            -f ./printjob.pdf \
             ipp://HPA0B3CCF051B9.local:631/ipp/printer \
             print-job.test