在Android平台上对激光打印机和喷墨式打印机进行了连接共享和打印效果测试。并对比windows平台上的打印测试,分析其中的打印协议,现记录总结如下。 一、网络共享打印机 用户请求打印操作,会产生
在Android平台上对激光打印机和喷墨式打印机进行了连接共享和打印效果测试。并对比windows平台上的打印测试,分析其中的打印协议,现记录总结如下。
用户请求打印操作,会产生一个打印任务。系统把这个打印job放在打印队列中,有打印服务器从打印队列中一个个取走。因为打印机是独占设备,每个进程只能一次次的访问打印节点。
打印服务把打印队列中的打job转化成打印机认识的格式,主流是Postscript格式,转化这个工作是由打印机驱动程序来完成的。即打印服务会调用具体的打印机驱动程序。
惠普激光式打印机(HP LaserJet Pro P1606dn):使用NP330网络打印服务器,打印机usb线连接NP330,NP330网线连接路由器。
结果:使用第三方趣打印apk,打印普通pdf正常,打印点阵pdf很慢且效果差,达不到识别标准。
联想激光式打印机(Lenovo LJ2206W): 使用Centos系统搭建的CUPS网络打印服务器,打印机usb线连接虚拟机CentOS,虚拟机网络设置成桥接模式。开放防火墙端口631,搭建完毕后局域网内平板可访问Http://192.168.3.52:631/printers/
结果:使用第三方打印apk连接时未找到该设备,主机无法打印,缺少该设备对应的linux驱动。
Android默认实现了基于CUPS打印的框架,CUPS可以提供打印协议来让用户使用打印机,提供WEB界面让用户设置和管理打印机。
开发者可使用PrintManager+PrintDocumentAdapter 接入系统打印api方式实现打印功能,使用指南请参考:https://developer.android.google.cn/training/printing/custom-docs
系统打印通过一个系统apk[包名com.android.printspoole]实现的,源码位置:frameworks/base/packages/PrintSpooler
该apk接收来自用户app的打印请求。用户app的打印请求先被PrintManger通过PrintJob方式封装,然后通过Intent唤起PrintSpooler的PrintActivity进行预览。如果打印机设备厂商实现了Print Plugin并提供apk安装到系统,那么PrintSpooler就可以找到对应打印机驱动进行打印。
AOSP系统默认集成的打印插件服务,源码位于packages/services/BuiltInPrintService。BuiltInPrintService启动后会去查找MDNS、P2P类型的打印机,如果发现了具体打印机则将该打印机的信息提交给系统,打印处理服务PrintSpooler将会显示该打印机。BuiltInPrintService还包括pdf渲染、处理ipp协议请求等基于CUPS实现的打印服务。其中默认ipp协议端口631,打印分辨率dpi默认300。
小米喷墨式打印机(Mi All-in-one Inkjek Printer):平板系统打印服务能发现并能连接上IPP,默认使用IPP协议的631端口。
联想激光式打印机(Lenovo LJ2206W):使用平板默认打印机服务不能显示该打印机,通过log看出平板系统打印服务能发现但IPP请求失败。查看电脑主机连接的打印机属性默认设置的是LPD协议515端口,可设定成RAW协议的9100端口。
分别对Android 10和Windows 10平台连接的小米喷墨打印机打印属性进行设置,对比并分析两个平台的打印协议(主要关注传输层和应用层的协议)。
来源地址:https://blog.csdn.net/qq_23069607/article/details/127492226
--结束END--
本文标题: 初探Android系统打印功能
本文链接: https://lsjlt.com/news/428350.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0