java报表打印⼯具_Java报表⼯具打印⽅案集锦 本⽂试图对市⾯上流⾏的纯java实现的web报表⼯具,jasperreport 、 stylereport 、杰表、润乾报表、快逸、finererport为例,分析各报表⼯具采⽤的web打印技术的异同、优劣、及对⽤户需求的适应性,供⼤家参考。
打印是报表⼯具的基本功能之⼀,有些报表⼯具就是从⼀个专门的打印程序中发展⽽来,如⽤友华表。因为想当然地简单,所以,在报表⼯具选型时⽤户常常忽略这个问题,特别是有些报表⼯具⼚商,明知⾃⼰的打印⽅案在满⾜某些需求时,存在缺陷,但没有尽明确告知义务,⽽事先做好有关打印⽅⾯的⽂档。我曾不⾄⼀次地听说,有些开发商选⽤的报表⼯具,其打印功能不能满⾜需求,不得不另外打印⼯具的事情,实在是吃尽苦头。 反应停报表打印在c/s时代,确实⾮常简单,vb,vc,Delphi,pb,都有很好⽤的打印api,有的甚⾄⽤报表控件⽅式,搞定打印更是分分秒的事情,但今天是b/s的天下,报表都是在⽹页浏览器中显⽰,但当今的浏览器打印功能⼀般⾮常弱(谁让你叫他“浏览”器呢?“浏览”就是让你⽤眼睛看,“打印”属于兼职),要做到精确分页打印,⼏乎不可能,所以当前的报表⼯具,⼀般不会让你使⽤浏览器的打印菜单来打印报表,都有⾃⼰的解决⽅案,这下可好,各报表⼯具⼚商由是乎,⼋仙过海,各显神通,各家都说⾃⼰的好,对于web打印了解不深的客户,总有雾⾥看花的感觉。
归纳来说,当今java报表⼯具采⽤的打印技术不外乎三类:Applet打印、导出成pdf/excel打印、控件打印。⽤户选⽤的重点是:尽量选择插件⼩的打印软件,因为⽂件⼩意味着安装迅速,启动速度快。插件⼤⼩除了插件本⾝的⼤⼩外,还需要考虑⽀持软件的⼤⼩,如有些插件很⼩,⽀持软件却很⼤。 Applet打印
本⽂开始处提及的报表⼯具,除finereport外都⽀持Applet打印。之所以多数⼚商⽀持Applet⽅式打印,因为Applet是java实现,与java 后台、java报表设计器的兼容性较好,代码容易维护,实现也⽅便。然⽽,⼚商省事,⽤户就得多事。Applet⽅式打印,⽤户最多的抱怨是需要安装jre(⽽当前的操作系统,⼀般不是默认安装的),虽然说,多数⼚商已经做到可以⾃动安装jre,但对于10⼏M(JRE1.4有
紫外可见漫反射光谱15M,JRE1.5为16M))的安装,这意味着⽤户需要较长时间的等待。
另⼀个问题是Applet配置复杂,使⽤不稳定。1995年,正是因为给⼈们⽆穷的视觉和脑⼒震荡的Applet ,使⼈们认识了java,认识了Games Gosling。所以在b/s早期,⼈们为了展现html的富客户效果,Applet是唯⼀之选。但现如今,Applet已经是昨⽇黄花,早已被ajax、flex取代,是什么原因?战略层⾯的东西,我也不太说得清楚,但作为程序员,经过⼏番折腾后,也不会愿意再⽤Applet了。如经常莫名其妙地出现“⼩应⽤程序,… notinited”的错误,还得清理ie缓存,对于Applet打印,还需要设置jre的安全策略等等。不是靠终端⽤户能完成的,这就必须额外地增加开发商的服务成本。
Applet打印,启动速度慢。Applet打印原理是,当你点击打印按钮时,浏览器启动Applet,Applet根据参数访问后台页⾯信息,后台返回页⾯,Applet加载页⾯后,调⽤jre的打印服务进⾏打印。这就意味着,每次打印都需要调⽤后台服务程序,就必然影响打印的响应速度。
Applet打印很安全,⾔下之意是ActiveX打印不安全,这是采⽤Applet打印的⼚商津津乐道的,实际上,这是⼀个伪命题。Applet和ActiveX都是浏览器的插件,我们当然不希望下载插件后,该插件可以为所欲为,⽐如,删除你磁盘⾥的⽂件,或启动⼀个⽊马,从这点来说,Applet确实⽐ActiveX安全,因为Applet是在⼀个受限的环境⾥运⾏,⽽ActiveX是不受限的。所以,当你访问⼀个陌⽣的⽹站时,出于安全考虑,你可能会允许下载运⾏Applet,⽽阻⽌ActiveX。但当⽤户访问⾃⼰的⽹站系统,时,这种担⼼就没必要,这好⽐,当你与陌⽣⼈打交道时,很⾃然地会问⾃⼰,这⼈可信嘛?但如果你与家⾥⼈打交道,这个问题就不成其为问题了。ibm蓝之路
Applet打印,除了可以设置打印机,设置纸张页⾯⼤⼩等常规打印功能外,往往也集成与打印不相关的功能,⽐如,打印前修改(有⼈说,是为了做假帐⽅便,中国特⾊,国产报表⼯具⼀般都具备,jasperreport,stylereport不⽀持),按⾏分页,⾃由定位,这些本来由设计器完成的功能,挪到打印功能上来,来掩盖上⾯指出的Applet的种种不⾜。实际上,Applet功能强弱完全取决于Applet的⼤⼩,有些报表⼚商甚⾄⽤Applet或web start 的⽅式,提供所谓的基于web的报表设计,前提是下载 40多M的jar包,实际上,这种⽅案远⾮⼀般意义上的纯web 的报表设计,完全是混淆概念。作为⽤户最希望
常规的,他们熟悉的打印功能,不需要不相关的,理解困难的打印功能。
我国的资源状况PDF/EXCEL打印祥林嫂之死
Pdf打印⽅式,就是⽤户点击打印后,浏览器会⾃动弹出adobe reader,再利⽤adobe的打印按钮进⾏打印,由于国外adobe reader安装⾮常普及,国外的java报表⼯具多提供这种打印⽅案,⽐如 stylereport,jasperreport,国内报表⼯具finereport也采⽤这种⽅式(让⼈不解),pdf⽅式打印的好处是能做到精确打印,⽽且报表预览与打印⼀⽓呵成。但不⾜是需要在客户的机⼦⾥,事先安装有adobe reader,作为程序员,⼀般不太会有问题,因为程序员可能经常要浏览⼀些pdf⽂档,多数已经装了adobe reader,但国内的终端⽤户,⼤多不知pdf是何物,更谈不上安装。
Pdf打印的另⼀个问题是必须弹出adobe reader,不能做到⽆预览打印,这可能由于pdf缺少相应api的缘故吧。
轻量级的ActiveX打印
这⾥之所以强调“轻量级”,⽬的是与传统意义上的ActiveX报表相区别。ActiveX技术可以说是报表⼯具家族⾥的没落贵族,c/s时代,报表⼯具⼀般都被做成控件形式,⽔晶报表就是如此,在b/s时代,报表⼯具⾥仍然能看到ActiveX的⾝影,但风光⼤不如从前,如数巨,明宇,⽤友华表,inforeport。⽤A
ctiveX实现报表的不⾜,在⽹上你能轻易到,在此不再详述。ActiveX 报表虽深受诟责,但从打印功能来说,却都是近乎完美,处理得却⾮常好,⾮常稳定。
既然,ActiveX打印是长处,能不能扬长避短地使⽤ActiveX技术?有⼈提出这样的问题。于是,有些⼚商,⽐如杰表,采⽤了浏览时⽤html,打印时⽤插件的⽅式。这种⽅案的需要解决的问题是,ActiveX打印控件,不能太⼤,否则报表⼯具成了ActiveX报表了。
与Applet相⽐,轻量级ActiveX打印具有以下优势:云母片
1.下载时间短,(⼤⼩是Applet的1/250);
2.本地打印,打印时,不需要访问后台服务程序,不占⽤服务器资源;
3.启动速度快,由于控件⼩,且本地打印,所以打印速度是优于以上两中打印⽅案,打印速度与你点击浏览器打印菜单相差⽆⼏。
采⽤轻量级的ActiveX打印的不⾜是,只有ie 5.5 及以上版本⽀持,其他版本的浏览器不⽀持。好在ie5.5浏览器已⾮常普及,在⽤户那⾥应该不是⼤问题。
杰表采⽤的打印⽅案,⽤⼀个jatoolsPrinter的控件,⼤⼩是60k,是经过数字签名的。这个打印控件采
⽤ie特有的打印技术(templateprinter)实现打印功能,⽀持打印,预览,边距设置,重复打印,批量打印功能。
⽬前,jatoolsPrinter已经从杰表中独⽴出来,任何报表⼯具或第三⽅软件都利⽤该控件,实现web打印,推出⾄今,免费加收费⽤户上万。
下表总结三种⽅式的采⽤者及优劣对⽐,对于ie5.5客户来说,我们推荐使⽤ActiveX打印⽅案.
报表⼚商列表