[other] 分析[云打印]的技术实现原理
Tofloor
poster avatar
都市夜归人
deepin
2022-02-22 20:38
Author

这几天研究了一下云打印产品 ,感觉深度的大神们太有创意了,云打印在办公环境下还是非常实用的,的确可以解决打印机在linux 上无法本地驱动时的要使用问题;非常迎合现在信创的使用场景;因为没有开源,只是分析推演,有分析得不对的地方,大家可以一起讨论,我后面想复刻一遍 然后开源,有兴趣的朋友可以一起参与;

原理

  1. 将打印机安装在Windows 机器上并正常驱动;
  2. 添加 CUPS-PDF 虚拟打印机
  3. Linux 应用程序如WPS 或 LibreOffice 中打印文档时选择虚拟打印机,文档会被输出成PDF 文件;
  4. 捕获到PDF 文档生成的消息,把文档传递到 Windows 上,再由 Windows 调用打印机驱动进行实际打印纸张输出;

所涉及的技术

#Windows

  1. Windows API: EnumPrinters 、EnumJobs、GetPrinter 等, 主要是为了枚举出当前的打印机列表、任务列表 等;
  2. PDF 库:可以直接引入 Adobe PDF Reader 的DLL , 也可以直接用 开源项目 SumatraPDF ,是开源的但是体积较大,而且默认有图形窗口界面,需要基于源码改造,统信云打印好像也用了 SumatraPDF,隐藏了图形界面,在打印任务提交成功后 返回 JOBID
  3. 根据 JOBID 轮循 任务的执行状态。
  4. 通过 Windows API 获知 打印机的一些状态...
  5. 文件上传下载服务

#Linux

  1. 获取 Windows 上的打印机列表,勾选需要添加的打印机 生成 一对一的 PDF 虚拟打印机
  2. 改造 cups-pdf 的开源代码,在 文档生成为 PDF 的时候通知监听程序,准确的获知 哪个应用 调用哪个打印机 生成了哪个文件, 这个可能要改 cuPS-pdf 的源码,或者捕获日志也应该可以。
  3. 文件上传下载服务、消息同步
  4. 日志模块

差不多,两端可以分别做一套界面便于用户配置,客户端的界面可能稍微内容多一些,服务端界面相对简单。

上述分析仅为原理分析推演,还有更多细节需要在造轮子打磨时才知道 ....

Reply Favorite View the author
All Replies
andktan
deepin
2022-02-22 21:59
#1

费心了,收藏并学习中。。。。。。。。

Reply View the author
都市夜归人
deepin
2022-02-23 00:35
#2

微信图片_20220222163207.png

微信图片_20220222163216.png

基本形态出来了

Reply View the author
神末shenmo
deepin
Spark-App
2022-02-23 02:53
#3

这是准备做第三方云打印了?

Reply View the author
捕风
deepin
2022-02-23 07:54
#4

https://easyprint.vip 网页版本的云打印。支持微信扫码和支付

Reply View the author
WENWEN
deepin
2022-02-23 19:24
#5

其实早期是开源的,只是后来做了解决方案了。

https://cdimage.deepin.com/applications/

Reply View the author