扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
本文介绍了一种在 Linux 平台上实现 Windows 打印机管理的移植方法及具体实现细节。通过本文,读者可以了解相关技术,并把这些技术直接应用到实际软件开发中。
1.理解 Windows 打印机管理和 Linux 打印机管理
Windows 平台提供了非常简单而且完善的打印机管理系统。在 Windows 编程中,打印功能被融入了 GDI (Graphic Device Interface)模块。在 GDI 模块中,程序员只要调用 EnumPrinters() 等 APIs 就可以轻松获取打印机信息。Windows 的这种成熟打印管理机制很大程度上得益于打印机供应商所提供的完善的打印机驱动。Windows 的打印机驱动屏蔽了打印机的具体打印实现细节,同时为上层调用提供了简单的 API 接口。
与 Windows 平台相反,打印机管理机制在 Linux 平台上从产生到成熟却经过了一个漫长的过程。Linux 打印系统最早源于 UNIX 打印系统,但 UNIX 系统却一直缺乏统一的标准接口。由于历史原因,不同 UNIX 平台使用着不同的打印系统。在各种 UNIX 打印解决方案中,最流行的是 Berkeley 打印系统和 System V 打印系统。一方面,不同打印系统需要不一样的打印驱动支持;另一方面,UNIX 只拥有相对较小的客户群。这些因素使得很多打印机供应商完全放弃了对 UNIX 平台的支持。统一打印接口的缺乏和底层驱动的不完善使打印在很长一段时间内成为了 Linux 平台的一大功能漏洞。
最终 CUPS (Common UNIX Printing System)的出现解决了上述窘境。CUPS 是UNIX/Linux 上通用的打印系统。CUPS 提供了一套 CUPS API 来完成 UNIX/Linux系统和打印机之间的交互。例如,用户可以通过 CUPS 获取打印机的信息,也可以通过 CUPS 设置打印机。CUPS 提供了对 Berkeley 和 System V 打印命令的支持,这种兼容性使得之前的系统不用进行大规模修改就可被延续使用。同时,CUPS 还提供一系列模块化的过滤接口。通过这些接口,打印机提供商只需要开发一个驱动程序就可以满足所有平台的需求。至今为止,CUPS 已被所有 UNIX 和 Linux 平台所支持。
2.打印机管理移植架构
打印机管理移植是应用程序跨平台移植的重要组成部分。不同平台所支持的打印接口是不同的,因此移植的核心就是实现平台之间的打印机管理接口的转换。下图展示了打印机管理移植的架构。
Windows 提供了一系列 API 来获取打印机信息。这些信息被封装在预定义的Windows 标准结构中,比如 DEVMODE,PRINTER_INFO_2,PRINTER_INFO_4 等等。Linux 使用 CUPS 来获取打印机信息,这些信息被封装在 cups_dest_t,ipp_attribute_t 等数据结构中。只要正确获取 Linux 平台上打印机信息,并把它们转化成 Windows 打印机数据结构,就可以完成打印机管理。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者