jasperreports的生命周期,如下。
设计并创建JRXML ----> 编译JRXML成Jasper模板 ----->填充Jasper模板来生成报表----->导出报表------>报表被展示到屏幕上。
其中创建JRXML这个过程是你自己设计并创建的,其实就是创建一个xml文件,按照jasperreports规定的语法来创建报表模板。
编译成Jasper模板的过程和填充Jasper模板的过程都可以通过Ant任务来完成也可以通过代码实现。
编译JRXML成Jasper模板是一个中间环节。
填充Jasper模板来生成报表的过程就是最初创建的JRXML文件不仅仅可以是静态报表页面,也可以是动态的,在JRXML文件中可以
有动态参数和与数据库交互的SQL查询。填充报表的过程做的任务就是把真正的数值填充到报表原先的占位符中去。
注意,我们可以预览报表时,是不能看到真实的值的。只能是占位符。
那么我们怎么通过Ant任务来执行编译、填充这些过程呢。
这个可以参照你下载的jasperreport demo里的build.xml的写法。
用代码也同样可以完成上述操作。
在进入到下面前,我们先把需要的包罗列一下。
报表编译过程中有一些必要的包,否则会报错。
具体的都是Jakarta Commons家族下的包。
1.Jakarta Commons Digester (http://jakarta.apache.org/commons/digester/)
2.Jakarta Commons Collections (http://jakarta.apache.org/commons/collections/)
3.Jakarta Commons logging (http://jakarta.apache.org/commons/logging/)
4.Jakarta Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/)
此外,如果你希望使用Jasperreports的一些其他特性,下面还有可选的包。
Apache ANT 你可以通过ant任务来完成编译、预览报表等功能。
JDT Compiler 如果你只是在JRE环境下,而不是完整的JDK环境下,可能需要。
JDBC Driver 如果需要与数据库交互,要用到
iText 如果你想把报表导出成PDF或RTF格式 (http://www.lowagie.com/iText/)
JFreeChart 如果你想给你的应用增加图表功能。它可以创建专业的图表,而不局限于2-D,3-D图表 (http://www.jfree.org/jfreechart/)
Jakarta POI 允许你读取和写入Mircrosoft Office文件。如果你想导出报表为XLS格式需要用到。(http://jakarta.apache.org/poi/)
把上述你需要的包放到CLASSPATH下,准备工作就做好了。
用程序编译、填充报表。
编译报表
使用 net.sf.jasperreports.engine.JasperCompileManager类的 compileReportToFile()方法。
该方法有3个重载方法,sourceFileName代表要编译的文件路径和文件名。如果不指定destFileName则编译成的jasper文件在同一目录下而且和JRXML是同一名。
destFileName可以自定义编译后的路径和文件名。
JasperDesign报表在内存中的存储方式。可以通过net.sf.jasperreports.engine.xml.JRXmlLoader 的方法得到JasperDesign实例。
填充报表
使用 net.sf.jasperreports.engine.JasperFillManager类的 fillReportToFile()方法
该方法有6个重载方法。
下面给出参数的意义。
JasperReport 报表模板,net.sf.jasperreports.engine.JasperReport 实例是编译的报表模板在内存中的展示。
destFileName 在哪存储填充后的报表
Map parameters java.util.Map的实例,用来初始化报表模板中的parameters参数
Connection connection 数据库连接,为了执行SQL查询
JRDataSource sf.jasperreports.engine.JRDataSource接口实现,Jasperreports提供了一些实现,你也可以自己创建定制化实现。
String sourceFileName 待填充的报表位置。
如果你不需要数据库连接,可以使用JREmptyDataSource 空数据连接。
如果你没有参数可以使用new HashMap()空哈希Map