JasperReports+iReports , 类似于CrystalReport的开源报表系统,最主要能帮助我们在设计时把数据和表示分开,帮助我们实现Web报表的分页打印,分组合计,变量的加减处理,输出的格式化,还有导出Excel、pdf等,反正用过了的人都不肯回去重新自己画html页面出报表了。
google上有入门教程,非常容易。但一遇到复杂的报表,入门那套很快就玩不转了,如果没有中级的研究,可能又得乖乖回去用html画报表。
首先网上有一份JasperReport收费文档,不过老实说,这份文档收费的话显得太单薄了。
首先网上有一份JasperReport收费文档,不过老实说,这份文档收费的话显得太单薄了。
1.自定义数据源,传入VO数组而不直接在JasperReports里查询SQL.
1.1 为什么要自定义数据源
简单的报表,当然用不着自定义数据源,直接在JasperReports里编写SQL就可以了。
但查询复杂起来时,还死守着一条SQL写完会让SQL变得又长又难读,从来都最讨厌 别人在SQL上炫技。这时候,在JasperReport外部的Java程序里进行数据的采集(还可以进一步把相近的查询封装到一个数据采集类中),把结果通过自定义数据源传入JasperReports,而JasperReport只负责数据的显示,更符合数据与显示分开这个普适的模式。
搞定了可分解重用的数据源后,我才真正敢把JasperReports用到系统上。否则,无法想象怎么在JasperReport文件里维护那么多的SQL.
1.2 自定义数据源的机制
dori.jasper.engine.JRDataSource 接口非常简单,只要实现两个方法:
public boolean next() throws JRException;
public Object getFieldValue(JRField jrField) throws JRException;
看函数名字都知道其意义了。所幸,我们连这两个方法都不用实现,Jaspert已经有两个VO Bean的默认实现了。它们是dori.jasper.engine.data.JRBe