如何使用JasperReport做动态报表
1个回答
展开全部
当然网上也有解决方案和例子,但不外乎采用JasperReport的Api去操作报表中的元素,从而达到运行时动态生成报表设计的目的。个人认为这不是最好的方法,主要是这些操作JasperReprot元素的api晦涩难懂,总之对于我来说是一件非常崩溃的是(如果你也有采用代码的方式写ui设计的话,相信你也一样感同身受)。
基于这样我给出的是另外一种解决方案,通过分析jasper的报表设计文件jrxml,根据自己的需要采用模板语言生成自己的动态模板,使用自己的动态模型通过填充模板的方式来完成动态报表的生成。
其它不说,附件为源代码(开发环境:eclipse3.3 jdk >=1.6)。注意:
1.解压,采用eclipse打开,重新把第三的包添加到classpath下( ${dynaJasperProject}/lib/**.jar).
2.运行ClassPath:TestDynaJasper.java.打开d:/test.pdf可以查看效果。
3.可以改变修改TestDynaJasper.java类,导出不同格式的文件。
4.导出html文件打开后有问题,你可以重新设置自己的报表模板。模板在classpath:nst.report.jasper.common.template_2010.4.20.jrxml
下面是一些主要的类说明:
1.nst.report.jasper.ext ---外部程序主要抵用该包下面的类接口来使用动态报表功能
2.DefaultDynaJasperCompiler.java --外部程序交互类,其它接口主要是调用该类来使用动态报表的功能
3.ReportInfo.java ColumInfo.java --外部使用报表模型
关于 报表列的定义,请查看columnInfo中的字段定义。这里特别说明一下几个属性:
a)字段类型:可以指定, 表示为date,int,double,str。如果不指定,系统会根据报表数据集合的一个元素(list.get(0)进行判断,如果第一个元素的某些字段为NULL,那么系统会默认为是string类型,在实际中不是string类型的情况下,要进行特别指定。
b) 列长度:可以指定,在不指定的情况下系统会根据字段类型有一个默认长度: 日期类型宽度 80 数字类型宽度80 字符类型宽度 150。
基于这样我给出的是另外一种解决方案,通过分析jasper的报表设计文件jrxml,根据自己的需要采用模板语言生成自己的动态模板,使用自己的动态模型通过填充模板的方式来完成动态报表的生成。
其它不说,附件为源代码(开发环境:eclipse3.3 jdk >=1.6)。注意:
1.解压,采用eclipse打开,重新把第三的包添加到classpath下( ${dynaJasperProject}/lib/**.jar).
2.运行ClassPath:TestDynaJasper.java.打开d:/test.pdf可以查看效果。
3.可以改变修改TestDynaJasper.java类,导出不同格式的文件。
4.导出html文件打开后有问题,你可以重新设置自己的报表模板。模板在classpath:nst.report.jasper.common.template_2010.4.20.jrxml
下面是一些主要的类说明:
1.nst.report.jasper.ext ---外部程序主要抵用该包下面的类接口来使用动态报表功能
2.DefaultDynaJasperCompiler.java --外部程序交互类,其它接口主要是调用该类来使用动态报表的功能
3.ReportInfo.java ColumInfo.java --外部使用报表模型
关于 报表列的定义,请查看columnInfo中的字段定义。这里特别说明一下几个属性:
a)字段类型:可以指定, 表示为date,int,double,str。如果不指定,系统会根据报表数据集合的一个元素(list.get(0)进行判断,如果第一个元素的某些字段为NULL,那么系统会默认为是string类型,在实际中不是string类型的情况下,要进行特别指定。
b) 列长度:可以指定,在不指定的情况下系统会根据字段类型有一个默认长度: 日期类型宽度 80 数字类型宽度80 字符类型宽度 150。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询