打印机耗材研究

cups耗材信息

1、cups的定义

查询打印机耗材信息涉及到CUPS command file format (application/vnd.cups-command),它是一种特殊的和打印机交互的文件格式,用于向打印机下发指定命令。支持这种功能的打印机会在ppd中添加一个描述字段

1
*cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"

上述描述字段就包含了四种常用的命令,耗材信息就需要使用ReportLevels。通过打印测试页会把指令下发到打印机,打印机会返回耗材marker-*相关的信息到打印机属性中。这种方式不会产生真正的打印任务。

2、应用处理流程

  • 根据打印机类型进行不同操作,网络socket协议的打印机使用snmp直接获取,好处是不需要下发指令,可以直接获取到耗材信息。usb打印机采用ReportLevel方式。

  • usb打印机先需要从打印机属性中读取printer-type属性,判断是否支持操作command,具体通过是否包含CUPS_PRINTER_COMMANDS值为准

  • 然后判断printer-commands属性中是否包含ReportLevels

  • 写入如下内容到临时文件

    1
    2
    #CUPS-COMMAND
    ReportLevels
  • 通过发送打印测试任务下发指令,格式如下

    1
    2
    3
    4
    5
    6
    7
    8
    format = "application/vnd.cups-command"
    cups.printTestPage (printer.name,

    format=format,

    file=tmpfile.name,

    user=cups.getUser ())
  • 监听cups的特殊消息,触发更新指定打印机属性的操作(包含耗材)

    • 添加打印机

    • on_state_reason_added

    • on_state_reason_removed

3、打印管理耗材逻辑优化

有了这个基础之后就不需要在线程中定时查询所有打印机的耗材信息,只需要在初始化的时候读取一次,然后用户打开耗材界面才下发ReportLevels指令去更新耗材信息,耗材界面获取更新的数据刷新即可。


打印机耗材研究
http://yoursite.com/2021/01/29/打印机耗材研究/
作者
还在输入
发布于
2021年1月29日
许可协议