`
bighappy1983
  • 浏览: 15909 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JasperReport在web开发中如何进行打印?

阅读更多

如何在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

分享到:
评论
1 楼 アリス 2017-04-13  
请问如果是html格式要这么下载,包含报表里面关联的图片

相关推荐

Global site tag (gtag.js) - Google Analytics