安卓开发适配HP打印机实现静默打印【一】

安卓开发适配HP打印机实现静默打印【一】

关键词【安卓开发】【USB打印机】【惠普打印机】【静默打印】

客户反馈需要在RK3288平台适配HP多型号USB打印机,花了几周调研了市面上的安卓打印方法并测试,最终选择了移植Cups+hplip,不过在此之前我会介绍一下目前常用的一些打印方法。

⚠️注意:这篇blog是介绍移植cups在安卓开发板上去打印,而不是调用别的设备的cups去打印

1.安装HP官方打印插件

需要安装惠普自己的软件,然后需要配置打印机参数,很繁琐,如果遇到需要静默打印的客户,这个方案直接pass

2.使用Mopria打印服务

需要安装Mopria打印服务,这个打印起来很方便,但是不支持静默打印,有Mopria的LOGO和数据分析上传,可以反编译修改掉但是静默打印这个难度太大,没修改成功。

3.趣打印

支持PDF、Office文档、图片、网页等格式打印,兼容惠普、爱普生、佳能等主流品牌打印机。‌‌

支持Wi-Fi、蓝牙、USB及远程打印,免费版限制20页远程打印,高级版无限制。‌‌

可打印云端文件(如Google Drive、Dropbox),支持老式联网打印机。‌‌

这个软件做的很好,市面上大部分打印机都通杀了,安装完成后需要下载厂商打印驱动,需要软件拉起趣打印并打印,如果遇到需要静默打印的客户,这个方案直接pass

4.ghostscript+ foo2zjs

ghostscript : gs 本身主要是一个文件转换器 ,对打印机的支持比较有限,需要借助其他filter
如 hpijs foo2zjs,这个支持静默打印,但是支持的打印机型号有限,参考下图,系统工程师给我的测试命令行:

gs -q -dBATCH -dSAFER -dQUIET -dNOPAUSE -sPAPERSIZE=a4 -r600x600 -sDEVICE=pbmraw -sOutputFile=/mnt/sdcard/test.pbm /mnt/sdcard/demo.pdf

foo2zjs -z3 -p9 -r600x600 /mnt/sdcard/test.pbm > /dev/usb/lp0

在这里插入图片描述

  • 支持的打印机型号
  • Konica Minolta magicolor 2430 DL
  • Minolta/QMS 2300 DL
  • Minolta/QMS 2200 DL
  • HP LaserJet P2035
  • HP LaserJet M1319 MFP
  • HP LaserJet Pro P1606dn
  • HP LaserJet Pro P1566
  • HP LaserJet Pro P1102
  • HP LaserJet Pro CP1025nw
  • HP LaserJet 1022
  • HP LaserJet 1020
  • HP LaserJet 1018
  • HP LaserJet 1005
  • HP LaserJet 1000

我手里的HP Deskjet1212 执行后只会闪烁指示灯,不会打印

执行下述命令,依然毫无反应,这个方案彻底放弃,如果你的打印机在上述型号中,可以尝试使用

adb shell
su
cat sihp1020.dl > /dev/usb/lp0
foo2zjs -z1 -p9 -r600x600 test.pbm > /dev/usb/lp0
5.ghostscript+ hpijs

老方案,新打印机很多都不支持 ,hpijs 被合并到hplip中已经不再更新。

进入惠普官网下载最新的HPLIP,里面包含了HPIJS的所有代码,花了一天将hpijs通过交叉编译移植后,兴致勃勃的导入开发板就去测试了,执行下述打印命令

gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="DESKJET 1212" -dNOPAUSE -dBATCH -dPARANOIDSAFER -dQUIET -sOutputFile="/dev/usb/lp0" /mnt/sdcard/test.pbm

毫无反应,后面才发现HPIJS支持的型号也不是很多,需要查看hplip的源代码

-sDeviceModel=“DESKJET 825”

在这里插入图片描述

这就是配置具体打印机型号的参数,在交叉编译之前,我认为hpijs肯定支持,这下踩坑了,又浪费了时间,建议在编译之前先去查一下源代码中是否支持对应的打印机。

HPIJS移植参考链接:android7.1 打印机 (ghostscript+hpijs - hplip)-CSDN博客

本篇部分内容参考了上述的博客

6.移植CUPS+CUPS-FILTER+HPLIP

介绍一下这几个库的功能作用

1. CUPS (Common Unix Printing System)

  • 角色: 打印系统的核心和大脑。 它是一个开源的、跨平台的打印系统,现在是绝大多数 Linux 发行版和 macOS 的默认打印系统(苹果公司是其原始开发者,后开源)。
  • 主要功能:
    • 打印队列管理: 接收来自应用程序的打印作业,将其放入队列,并按顺序或优先级发送给打印机。
    • 打印机管理: 发现本地(USB, Parallel)和网络打印机(IPP, LPD, Samba, JetDirect),配置打印机连接、选项(纸张大小、双面、分辨率等)。
    • 作业调度: 管理作业的状态(等待、处理中、已完成、错误)、暂停/继续/取消作业。
    • 协议支持: 理解并处理多种网络打印协议(IPP, HTTP, LPD, SMB/CIFS, socket)。
    • 提供 API 和接口:
      • Web 管理界面: 通过 http://localhost:631 访问,进行大部分管理操作。
      • 命令行工具: lpadmin(管理打印机), lpstat(查看状态), lp/lpr(提交作业), cancel(取消作业)。
      • IPP API: 应用程序(如 LibreOffice, Firefox)通过 IPP 协议与 CUPS 通信来提交打印作业。
  • 关键点: CUPS 本身不负责将应用程序的数据(如 PDF, PostScript, 纯文本)转换成打印机能够理解的特定语言(如 PCL, ESC/P, PostScript)。它主要负责作业的接收、排队、路由和管理。转换工作由过滤器完成。

2. CUPS-Filters

  • 角色: 文档格式转换的“翻译官”和“流水线”。 这是一个由 OpenPrinting 项目维护的软件包,包含了一系列的过滤器程序和支撑库。
  • 主要功能:
    • 格式转换链: 提供一个灵活的框架,将 CUPS 接收到的各种输入格式(application/pdf, application/postscript, image/jpeg, text/plain 等)转换成打印机最终需要的格式(通常是 application/vnd.cups-postscript, application/vnd.cups-raster, 或打印机原生语言如 PCL)。
    • 处理流程: 当一个打印作业提交到 CUPS 后,CUPS 会根据打印机的 PPD 文件(包含打印机能力描述)确定需要哪些过滤器。CUPS-Filters 提供了这些过滤器,它们像管道一样串联起来工作。例如:
      • 一个 PDF 作业可能需要: pdftopdf (处理 PDF 选项如 N-up) -> pdftopspdftoraster (将 PDF 转换为 PostScript 或 Raster) -> rastertopclm (如果需要最终输出为 PCL) -> 发送给打印机后端(如 USB 后端 usb 或网络后端 ipp)。
    • 提供重要工具:
      • driverless / ippeveprinter: 支持 AirPrint 和 IPP Everywhere 标准,允许驱动程序较少的打印。
      • foomatic-rip: 处理基于 Foomatic/OpenPrinting 数据库的打印机驱动(通常用于较老的或 GDI 打印机)。
      • bannertopdf, texttopdf, imagetopdf, imagetoraster 等:处理特定输入格式的转换。
      • cups-browsed: 自动发现和配置网络打印机(特别是通过 DNS-SD/mDNS 和 CUPS 共享)。
  • 关键点: CUPS-Filters 是现代 CUPS 安装的必备组件。它处理了 CUPS 核心功能之外最关键的部分:将通用的打印数据转换成打印机能够理解的特定格式。它独立于特定打印机品牌。

3. HPLIP (HP Linux Imaging and Printing)

  • 角色: 惠普(HP)打印机在 Linux 上的官方驱动和工具包。
  • 主要功能:
    • 提供驱动程序: 包含针对大量惠普喷墨和激光打印机的优化驱动(PostScript 和 PCL 版本)。这些驱动通常比 CUPS 自带的通用 hp 驱动或 foomatic 驱动提供更好的性能、功能支持和可靠性。
    • 提供 CUPS 后端: 包含与 CUPS 集成的后端程序 hpfax (用于传真) 和 hp (用于打印和扫描通信)。
    • 提供扫描支持: 包含 SANE 后端 (hpaio),使惠普多功能一体机 (MFP) 的扫描功能能在 Linux 上使用(通过 simple-scan, xsane 等扫描程序)。
    • 提供图形化管理工具: hp-toolbox / hp-setup 提供了一个用户友好的图形界面来安装、配置、管理惠普打印机/一体机,进行状态监控、墨水量查看、维护任务(清洗打印头)等。
    • 提供命令行工具: hp-* 系列命令(如 hp-info, hp-levels, hp-clean, hp-plugin)用于查询状态、查看墨水量、维护打印机、安装必要插件(如某些型号需要的二进制 blob)。
  • 关键点:
    • 品牌特定: 专为 HP 打印机设计。
    • 超越基本驱动: 不仅提供 CUPS 驱动(PPD 文件),还提供与打印机深度交互的工具和扫描支持。
    • 与 CUPS/CUPS-Filters 协作: HPLIP 安装的打印机驱动(PPD)会被 CUPS 识别和使用。当 CUPS 处理发送给 HPLIP 打印机的作业时,它会调用 CUPS-Filters 中的过滤器(如 pdftops)或 HPLIP 自己的过滤器(如 hpps)来进行必要的格式转换(例如 PDF -> PostScript/PCL),然后通过 HPLIP 提供的 hp 后端发送给打印机。HPLIP 的扫描功能则通过 SANE 框架独立工作。

上面我让AI给我总结了一下,大概就是这样,下一节我们的目标是移植CUPS到 运行 Android 操作系统ARM 架构处理器 的设备上.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值