23

跨浏览器的打印程序的设计 - Web打印

 4 years ago
source link: https://www.cnblogs.com/dong0738/p/10990842.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

      我在多年之前设计过一个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/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK