使用jasperreport开发报表系统过程

1.根据设计报表的格式,用IReport可视化编辑生成jrxml文件,或者手工编辑生成jrxml文件

(一个简单的报表jrxml文件都可能达到几百行,所以还是用工具方便,ireport使用还算比较简单,

不过不是很方便)。设计这些jrxml文件的时候需要考虑报表数据来源,数据来源可以直接通过

connection连接数据库查询,也可以通过tablemodel或者collection生成,还可以是vo数组。(来源www.iocblog.net)

有这四种足够满足各种需求。具体怎么填充数据下面再说明


2.有了jrxml文件后,需要将它编译成jasper文件才能提供程序使用生成报表。编译这个文件可以

是生成报表的时候直接根据jrxml文件编译,如下

   String xmlPath = System.getProperty("user.dir") + "\\reports\\DataSourceReport.jrxml";
   JasperReport jasper = JasperCompileManager.compileReport(xmlPath);

也可以预先编译好,然后在需要生成报表的时候通过JRLoader的load方法加载jasper文件,比如

   String reportPath = System.getProperty("user.dir") + "\\reports\\DataSourceReport.jasper";
   JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromLocation(reportPath);

使用的时候才编译jrxml文件对性能会有一些影响,相对较慢,但它可以解决不同版本的jasperreport不兼

容的问题,因为不同版本编译的jasper文件,不能在不同版本的jasperreport下运行;而直接加载编译好的

文件,速度比前面快,但是版本不兼容问题就不会有了。

(来源www.iocblog.net)
3.取得JasperReport后,就可以使用JasperFillManager对应的生成JasperPrint、文件或者流。JasperFillManager
里面主要有三个方法fillReport、fillReportToFile、fillReportToStream。参考jasperreport下demo的datasource
,比如

     Map parameters = new HashMap();
     parameters.put("ReportTitle", "Address Report");
     parameters.put("DataFile", "CustomDataSource.java");
     JasperPrint jasperPrint = JasperFillManager.fillReport(
                               jasper, parameters, new CustomDataSource());
填充数据的话如果用的是vo数组,则可以构造JRBeanArrayDataSource,传递给JasperFillManager;
TableModel则可以使用JRTableModelDataSource;Collection则使用JRBeanCollectionDataSource;当然也可以自己
实现JRDataSource传递。parameters是用来传递jrxml文件里面使用到的参数对应的值,key就是参数名称。

4.填充数据生成JasperPrint后,就可以通过JasperPrintManager、JasperExportManager或者JasperRunManager等,

进行各种数据输出,包括导出html、excel、pdf等,这些方法的使用都比较简单,直接查询api就知道怎么用了。

还有一个让我决定在目前系统中采用它是因为有swing端提供直接显示这些报表,并可以打印或者保存为多种文件类
型,这是非常适合我的需求的;而且因为有这个swing端所以jasperreport也考虑到了系列化,JasperPrint是可以系
列化的,这样我就可以在服务端生成数据然后传会客户端,让用户可以直接查看甚至保存、打印。

这几个月用过这么多的开源包,感觉这个是最爽的!




文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。