最近由于工作需要写了个报表系统,由于之前一直做的java WEB项目,对这种web模式还是比较熟悉的,所以选择了jsp+struts(控制器)+业务(自己封装) 来写的。这个报表系统要求比较另类,动态表头,这个不像大部分报表的要求(都是作死的表头,只需要做好模板填充数据就行)这个可苦了我了,java的面向对象的思想在这个业务层还真是体现不明显,因为我全是拿List来做的,顺序加入数据,封装List,然后在页面顺序显示。。。。具体的不说了,还是说说打印这块,这块真的很麻烦,用IE自身的打印控件限制多多,尤其是不能直接打印,每次必弹出一个框框让选择打印机,这个对于做到后台分页打印大量数据就不行了,本来IE打印就存在问题,只能打印当前页。。。。后来偶然看到四方的web打印控件,文档里有个好方法,真的是不错.下面就是这个方法的大致工程:
如果数据量大,或者程序设计上不能做到一个网页把所有要打印的内容都容纳进来, 例如要打印10万个客户的账单,账单的数据在服务器的数据库中
这种需求实际上是通过循环多次载入页面实现的,你可以动态载入动态页面来实现,在我们的四方在线软件里面就有一个按月打印凭证的功能,就是这样的一种应用方式。
具体实现如下:
- //利用javascript ,打印完成后自己载入下一页
- //在页面中引入PAZU打印控件后,参考一下javascript
- window.onload=function(){
- //先对页面参数进行设置
- pazu.TPrinter.header="";
- //其他设置,这里省略....
- //执行打印,打印的时候注意不能预览,也不能提示用户选择打印机,而是让pazu直接输出到打印机
- pazu.TPrinter.doPrint(false);
- //延迟一点时间,让页面重新载入下一页
- setTimer("printNextPage();",1000);
- };
- function printNextPage(){
- window.location.href="thispage.jsp?pageid=NextPage";
- }
这种方式就很好的解决了大数据量后台分页打印的问题。不过调用IE自身的控件还不行,因为上面说的那个问题,会弹出对话框让选择打印机。还好四方有这个功能,真的是挺不错的。写这篇文章一方面为了跟大家技术交流下,另一方面就是为了四方的免费授权。。。呵呵,就当免费帮四方做广告了,不过它提供这个方法确实不错~