我在多年之前设计过一个ActiveX的打印控件,当时在市面上找不到符合自己要求的打印控件,所以就按照自己的思路设计开发了一个打印控件,并共享出来,没想到得到许多同行朋友的认可,大家用起来觉得还挺不错的。
已经过了许多年,浏览器已经由当年的IE或以IE为内核的国产浏览器为主流,转为以Google的Chrome浏览器或以Chrome为内核的国产浏览器为主流了,ActiveX已经成为昨日黄花。我本想这么多年过去了,各种技术都是日新月异的,作为打印应该早就不是什么问题,可到了自己做项目开发时,需要用到比较复杂一点的打印时,去网上找一找,才发现打印这一块的技术还是没有多大的发展,排在百度搜索前几名的所谓轻打印控件,还是和许多年前一样的有以下几个毛病:一是报表设计繁琐,既当爹又当妈的,既要用JavaScript定义报表的格式,又要组织报表的数据,一个操作窗口,需要自己先计算好各显示的坐标,然后再一一的画出来,这样的报表设计用起来使人发狂,一二个报表还可以勉强对应,要是多做几个就累死人了,而且以后维护修改也很麻烦。二是打印的数据量稍大一点,比如一次打印几十页数据,浏览器就卡死在那里,半天都没有反应,打印一个大一点的报表,把用户和公司的技术服务都快逼疯了。三是所谓的HTML打印,因为浏览器页面和纸张,在版面和精度控制方面的差异,导致网页显示和实际打印的效果差很远,而且因为页面一般是前端程序员通过JS、CSS等技术设计出来的,而报表开发这个一般是属于后端程序员的工作,这样硬是把后端开发的工作推给前端,还很难把报表这一块做好。
我想如其用着这些蹩脚的东西,还不如把自己多年前设计的打印控件进行升级,让其支持所有的主流浏览器。Chrome注重安全性、健壮性和用户体验,而打印程序需要管理用户本地的打印机,作为浏览器中渲染执行的网页程序,是无法直接控制打印机,所以这个必须通过应用程序来进行精准打印。所有的浏览器都可以通过URL Protocol协议来调用本地程序。
这个跨浏览的打印控件的总体设计思路是:在服务端把打印模板设计好,把所需要打印的数据组织好,再生成一个临时文件的URL,然后把此URL作为参数通过URL Protocol协议去调用本地的打印控件,打印控件下载此临时文件,再解析出打印模板和打印数据,最后进行直接打印或打印预览。
我按照此思路,编写了服务端的类库和打印控件,服务端的类库是完全开源的,提供所有的源代码,目前的源代码版本有Java、C#、PHP,对于其它语言,我暂时还没有用过,有需要的朋友可以自己完善一下。要集成到自己的项目中,也是比较简单的,我提供了详细的说明文档,一般只需要引用2个源文件就可以直接调用其中的函数了。
对于打印控件,因为涉及HTTP、JSON等技术,这个C#比C++更快开发,所以我采用.net framework 3.5进行开发,这个框架是Win 7系统自带,对于Win 7和Win 10 的电脑无需再次安装,对于古老的XP则需要先安装此框架。
开发了此打印控件之后,除了自己的项目使用之后,我共享给同行朋友使用,他们一致反应,控件稳定好用,兼容Windows系统下的所有浏览器;速度快,打印预览100页,也只需要5秒钟;设计效率高,通过简单的拖放就可以设计一份完美的中国式报表; 还支持用户自主在线设计报表等。
有需要的朋友,请加入QQ群:218392762 或者请直接Q我:12988672 或者请加我的微信:dong0738
报表预览、编辑和开发包下载的网址: http://www.lc-simple.com/PirntTest/