软件系统国产化脚步越来越快,在linux系统上如何实现web网页,pdf文件的打印,项目经理又面临新的选择,作为web打印工具的开发人员,我把我们产品开发思路、各种方案的优、缺点,在这里和大家作一个分享,以备读者诸君打印工具选型时参考。
现在基于浏览器的web打印工具,实现方式有:
一、纯javascript 打印工具,代表产品有hiprint http://www.httpprinter.com/
此类工具,采用纯 javascript ,将打印相关的 css,如page-break, 纸面大小,封装成好用的js api调用。
优点:
- 客户端不需要安装本地软件包,部署,升级都非常方便;
- 没有本地支行的包,稳定性非常好;
- 浏览器、设备的兼容性非常好,window和linux统吃。
缺点:
此类工具,最后实际上就调用了浏览器方法 window.print, 打印工具运行在浏览器sandbox中,功能很受限,比如:
- 无法获取打印机列表,无法在页面中,让用户选择打印机;
- 无法设置默认打印机,每次打印必须弹窗让用户选择,不胜其扰;
- 无法用javascript来创建自定义纸张,必须事先设置好。
推荐建议:★★★★☆
推荐打印频度不高,对打印控制要求不高的项目,比如,不需要创建自定义纸张,用户每次打印选择打印机,可以接受。
二、javascript+java代理,代表产品 Strato WebPrinter https://www.webprinter.cn/
此类工具,前端采用javascript ,将一些打印、获取打印机列表等调用,通过http协议,发送到java代理,最终由java环境中,调用本地打印命令。
优点:
- 实现简单,无须多平台编译;
- 跨操作系统,容易做到windows、国产系统的api兼容。
缺点:
- 安装包巨大,因为要安装 jre, Strato WebPrinter 有100M以上;
- 功能受java环境局限,无法扩展,java环境本身打印功能很有限,架构其上的打印系统,必更局促;
- 无法打印预览。
推荐建议:★★★★☆
适合不需要打印预览的项目。
三、javascript+ c++代理,代表产品 杰表云打印 http://print.jatools.com
此类工具,前端采用javascript,将打印相关调用,发送给本地的c++代理程序,最终由c++代理程序调用系统的打印子系统,比如 cups.。
缺点:
- 实现复杂,需要多平台编译,比如 ARM,X86,MIPS64.;
- 安装包需要分cpu管理,不能混用;
优点:
- 安装包小,30M;
- 扩展性好,可以挖掘操作系统打印子系统的所有功能;
- 通过友好封装js,做到windows和国产系统100%兼容,使原来windows上的jcp客户,无缝扩展到国产系统上来,原项目不需要重新开发。;
- 支持打印预览;
- 通过麒麟、统信UOS两大操作系统官方认证;
- 已经适配操作系统:中标麒麟桌面版、银河麒麟、中标麒麟桌面版 、深度(deepin) 、UOS 20.0、方德;
- 支持芯片包括龙芯、飞腾、鲲鹏、兆芯。
推荐建议:★★★★★
推荐打印频度高,对打印控制要求高,稳定性、售后支持要求高的大型项目。