实现WEB打印的几种方法

当前WEB应用开发非常流行,主要原因是WEB应用客户端的规则很简单,容易学习,容易维护,容易发布,降低了开发难度。但是,WEB应用的打印一直以来却是一个难题,特别是在应用中完成标签打印(如包裹面单、货运标签等)、票据打印(如零售小票)难度较大,其难度在于如何将需要打印的内容,精确套打到标签、票据中,精确控制分页,并实现高速连续打印。

对于WEB打印,当前有几种常见的方法,下面分别介绍,希望对大家有所帮助。

一、直接使用浏览器的打印功能

使用打印菜单或windows.print()的即可。这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:

不能精确分页。浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。

会有页脚页眉干扰。

不能准确对齐边边距及打印文字。

不能解决连续打印。比如,不是仅打印一张票据,而是连续一次打印若干个票据。

打印时一般会出现弹窗提示,影响用户体验。

二、使用print css

这种方法是直接使用浏览器打印功能的增强版本。该方案通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。使用该方案的优点是,成本小,不需要下载任何插件,而且跨平台性非常好。但是目前的问题是:

print css 厂商的支持度较差。

没有解决打印时会出现弹窗提示的问题,连续打印是效率较差。用户体验较差

打印小幅面的标签时不太适合

打印一维码,二维码不太方便

必须使用windows的驱动程序,对于斑马等公司提供的采用ZPL协议的专业标签打印机,支持不太好。

三、使用PDF文件

用这种方式,就是从服务器端下载一个pdf文件流,在浏览器中用adobe插件打开,然后用adobe的打印菜单进行打印。该方案能实现精确套打,但需要下载adobe插件。同时,该方案一般更适合报表的打印,打印标签/票据并不十分合适。

四、采用ActiveX

该方案在IE时代非常流行。这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好。但缺点也是很明显的,就是ActiveX控件的只能在IE浏览器下使用,在当前Firefox, Chrome, Edge成为主流的情况下,其适用范围大大减少。

五、打印精灵采用的技术方案

打印精灵设计目标支持网页打印、移动设备打印、嵌入式设备打印,满足多种场景下的打印需求,为软件开发者、系统集成商降低开发难度加快产品研发速度提供一个工具,设计打印精灵时,我们提出了如下目标:

提供简单的JS API,通过API直接控制打印机。

支持IE9+、Firefox、Chrome、Safari等主流浏览器,支持手机浏览器

专注标签打印,打印小票、商标、吊牌、物流面单,支持一维码,二维码打印。

超高速打印支持专业标签打印机,无须Windows打印驱动,直接使用业界标准的ZPL/CPCL打印指令,确保全速打印

提供WYSWYG所见即所得的模板编辑器,分离模板设计和模板打印,方便标签设计。

同时支持WEB打印,移动设备打印,嵌入式设备打印。

根据上述目标,我们提出了打印精灵的技术实现方案,方案以打印模板为核心,分别实现WEB打印,移动设备打印,嵌入式设备打印的驱动。本文重点介绍,WEB驱动的实现技术,移动设备/嵌入式设备的处理方案,我们将在其他文章里陆续介绍。


前面介绍的常规WEB打印技术,各有各的问题,无法实现上述目标。比如:要实现跨浏览器支持就不能使用ActiveX技术; 同时支持WEB打印、移动设备打印、嵌入式设备打印就不能采用print css技术等等。通过反复研究、比较、权衡,我们设计了本地打印代理的模式。

本地打印代理本质上是一个在本地启动miniWeb服务器,通过客户浏览器与miniWeb服务器的通讯,完成打印。由于miniWeb服务器在独立的进程中运行,可以开发各种复杂的功能,而不会影响浏览器,是一个非常稳定的、可靠、可兼容各种浏览器的方案。该方案的难点是设计合理的通讯协议,解决跨域访问等技术问题。


实现上,我们采用了跨平台的golang作为开发语言,开发了一个可以开机自启动的miniWebSvr程序,可以在windwos, linux等系统上使用。golang的性能较高,最终程序的体积较小,运行速度快。需要的同学可以到这里下载。

为了简化打印操作,我们对底层协议进行了封装,提供了便于操作的API的。详见JS API使用指南

转自http://www.printspirit.cn

你可能感兴趣的:(实现WEB打印的几种方法)