如何在web项目中呈现打印Jasper报表?
我先说一下JASPER报表的特点:jasperReport在设计阶段就已经定义好了打印纸张的大小,横向纵向,边距的大小,它在报表生成时就已经确定了报表中各个元素的位置,高度,宽度,它的分页机制也是基于确定的纸张大小和计算各个元素高度来进行分页的。报表一旦生成就就没有办法在打印时进行调整,所以它无法像birt报表(分页是它的硬伤)一样,在打印时根据纸张的宽度进行自适应,在打印时的纸张设置必须和报表设计时的纸张设置吻合才能出现正确的打印效果。基于web浏览器上的安全问题,在web端操作打印机是一件非常奢侈的问题,如果一张报表设置成是A4横向打印的话,用户必须每次打印前都必须去选择打印方向。
关于在web项目中使用jasper报表,如何打印呈现报表,可以有如下几种方式供选择:
一.输出pdf文件流,让用户保存打开PDF文件,借助pdf阅读器进行打印,优点如下:(强烈建议)
1.相对jasperReport的其它导出方式(html,xml),pdf导出文件小,输出速度快,较其它方法节省带宽,以及服务器资源。
2.借助pdf的强大的打印功能,会自适应的选择打印方向,不用用户每一次都去调整。
缺点定就是必须借助PDF浏览器(这个算是缺点吗??在我们的项目过程没有用户抱怨过要装,odobe Pdf浏览器基本每一个人都有安装)
在项目的实践过程表明只有这种方式,用户抱怨才是最少的。
response.setContentType("application/pdf;charset=utf-8");
JrExporter export = new JrPdfExporter();
.........
export.setParameter(JRExporterParameter.JASPER_PRINT, JasperPrinter);
export.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
export.exportReport();
二.采用开源的一个flash控件--jasperreports-flashviewer(在没有大数据量打印时可以使用)
该控件为开源控件,demo和源代码下载url:(http://sourceforge.net/projects/jasperreports/files/archive/jasperreports-flash/)
原理:服务器端Jasper输出xml格式到web浏览器,flash控件对jasper***.xml进行解释,并采用flah方式呈现给用户
优点:可以完美直观展现报表,在用户打印参数设置正确的情况下,所见即所得
缺点:无法控制打印机,打印纸张,打印方向,用户设置麻烦
在打印大数据量时,由于导出xml格式的报表,输出内容会变得庞大,对服务器资源和带宽都会使一个挑战。(你可以打印一万条表格数据进行测试)
三.输出html流,直接在浏览器上呈现报表,采用浏览器的打印功能
这是我见过的最狗血的方式,jasper报表在输出到浏览器上后,所见即所得??你会发现打印后出现令你崩溃的事情:分页完全乱了!!!
主要原因是:Jasper在生成填充报表时,计算各个元素的高度,进行分页,把生成的html流输出到浏览器上。但浏览器的对这些html元素的解释和高度的计算并不和jasper一样,而且浏览器有自己的分页方式(只要打印的元素超过纸张高度就分页),造成分页完全乱掉。
如果你一定要使用这类方式,必须在jasperreport分页的html代码处插入分页符,让浏览器打印时,强行进行分页。代码如下:
JRHtmlExporter exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);优点
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outStream);
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING,"UTF-8");
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "<DIV STYLE='page-break-before:always;'></DIV>");
exporter.exportReport();
其实这样,分页还是可能混乱,因为打印的时候分页跟你的页边距有关系,如果你的上下页边距太大,一页可能会打印到两页纸上。
而且它也没有办法自动识别横向还是纵向打印的功能,用户必须手动去调整。
四.采用java小程序Applet通过jasperViewer进行打印
这个方法和第二种方法一样狗血,怎么样下载安装这些jre和第三方包和浏览器的安全设置会让人崩溃!!!
原创文章,转载请注明个人博客出处:http://www.chlusoft.com/tech/346.jhtml
相关推荐
iReport 和 Jasperreport整合开发web报表向导2
Java燗applet+jasperReport 实现web端打印
使用JasperReport+iReport进行WEB开发,是这篇文章http://blog.csdn.net/tch918/article/details/12200607的源码
50.iReport中的子报表如何实现根据其上部是否有打印数据而变打印位置? 49.iReport中当单元格中的文字出现换行跨页的情况,如何保证换行的字段能够正常显示,并且保证换行后同行的高度保持一致? 48.内嵌函数的使用 ...
软件说明: jasperreport 是一款报表打印组件,是开放源代码组织sf.net 中的一个java 报表打印工 程,在我写这篇文章时,jasperreport 的最新版本是0.5.2 版,jasperreport 的最新版本可以 从...
JasperReport iReport 集成到web应用操作说明
Jasperreport 客户端打印例子
NULL 博文链接:https://zmx.iteye.com/blog/572825
iReport 和 Jasperreport整合开发web报表.rar
iReport 和 Jasperreport整合开发web报表向导
iReport和Jasperreport整合开发web报表向导.pdf
通过ireport生成模版,使用jasperreport调用模版,通过servlet生成pdf格式的文件,显示于页面以实现本地打印功能
OpenReports中的JasperReport开发OpenReports中的JasperReport开发
JasperReport+iReport整合的Web报表开发这篇文章的PDF版本
CSDN技术中心 iReport 和 Jasperreport整合开发web报表向导.pdf
iReport 和 Jasperreport整合开发web报表向
JasperReport 打印 导出PDF XLS 这是我们公司架构师搭的一套架构,封装好了打印 导出功能,其他的报表只要实现这个机制就能完成功能了,该抽象的都抽象出来了,只有一个view.jsp页面。
jasperreport+ireport开发java报表入门级教程(完整版)