JasperReport使用心得

1. JasperReport 报表文件视图化生成工具iReport。

 iReport做为一个生成JasperReport的视图工具,和我们是使用的大多数报表创建工具没有太大的差别,都是拖控件,搭出报表的样子,和水晶报表差不多。但是iReport有一个不同的地方,它的存储文件是是一个.jrxml的文件,是一个纯xml文件,编译后会产生一个.jasper的文件,这两个文件,在构建报表的时候都是需要的。

note:

  1. 拖完页面,编译一下,可以发现新建的文件中的一些错误,例如 页面中使用的值是否在dataSource的Fields中定义。

  2. JasperReport 中有一个非常简单的dataSource:net.sf.jasperreports.engine.data.JRBeanCollectionDataSource可以使用。

 它有一个构造方法,可以传入一个集合来产生这个dataSource。  

例如:new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{collectionList}) 就是建立一个以collectionList作为数据的数据源。在report中我们就可以使用$F{Field}(是collectionList<Bean> Bean中的属性)来得到List中每个Bean的数据了。

2.JasperReport 生成report

// 编译.jrxml文件

JasperCompileManager.compileReportToFile("testJasperReport.jrxml"), context.getRealPath("testJasperReport.jasper"));

// 加载jasper

File reportFile = new File("testJasperReport.jasper");

JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

// 填充Report  parameters 是一个Map,new net.sf.jasperreports.engine.JREmptyDataSource()表示我们不需要传入是个空DataSource

// 将数据和xml组合,生成需要的打印文件

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new net.sf.jasperreports.engine.JREmptyDataSource());

 // 将jasperPrint输出到html页面上

JRHtmlExporter exporter = new JRHtmlExporter(); 
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image=");

// 设置分页
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "<br style='page-break-before:always;'>");

System.out.println("jasperreports html print stop");

exporter.exportReport();

附:

 ireport在服务器中发布出现问题及其解决方案

  1. 报表打印文件(.jasper)无法生成,有找不对象错误,造成原因为文件系统空间不足。

  分析后,发现由于报表打印文件生成时,会创建一些字体,这些字体会创建在/tmp文件目录下(linux),如果在服务器中,此处空间不足,字体无法创建,报表将不能生成。

  解决办法为,删除tmp中的文件,重启服务。

原文地址:https://www.cnblogs.com/UUUz/p/10782161.html