`
bighappy1983
  • 浏览: 15933 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

如何使用JasperReport做动态报表

 
阅读更多

 

其实这个项目是好几年的了,现在重新翻出来是因为发现网上有很多朋友提问如何采用JasperReport实现动态报表的问题。当然网上也有解决方案和例子,但不外乎采用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。但这些都是相对值,系统最终会在生成报表设计的时候根据纸张宽度计算出实际值

        c)  显示格式:可以不添加,按系统操作处理, 主要针对 int , double, date类型   例如double 可以表示为 #,##0.0000 保留 4位小数 (默认),  date  --  yyyy-MM-dd(默认)  yyyMMdd

        d) 对齐方式:可以不指定,按照系统默认处理: 字符--左对齐   日期--居中   数字--右对齐

如果有朋友想要eclipse工程(源码+第三方包)请到我的个人博客上下载http://www.chlusoft.com/tech/index.jhtml

原创文章,转载请注明出处:http://www.chlusoft.com/tech/344.jhtml

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics