好几年前曾将用过jasperreport,当时的设计工具为ireport,如今已经变成jasperstudio,看来eclipse成为主流已是不争的事实了!
由于项目的需要,不得不重新学习一下这个新的工具了,总体上来说其设计思路还是不变的。想系列学习的,可以参照如下地址进行学习:http://blog.csdn.net/pigdreams/article/month/2017/02
本文只对项目中用的相关知识进行总结如下:
1、导出pdf中文问题,由于采用的是itext生成pdf,早期版本采用亚洲语言包可以满足要求,新的版本已经不行了,需要将字体达成jar包,添加依赖。具体可参照csdn那位的博客,在此也向其表示感谢!
关于粗体、斜体的问题,如果采用的字体没有单独的文件,请移除相关的节点,否则在开发环境里面有效果,正式运行就会丢失效果了!
2、图表的问题,jasperreport本身采用的是jfreechat,对于大多数项目已经能够满足,但对于我们项目来说,图表个性化太强,jfreechart不能满足要求,好在Jasperreport提供了一个 custom visualization component.
其原理是采用js绘制成svg,在填充报表时采用生成的svg(如pdf、html格式)或图片(如word格式)进行填充。
官方有相关的地址进行说明:http://community.jaspersoft.com/wiki/custom-visualization-component-v60x
另外jasperreport libaray 本身是不带 custom visualization 相关的jar包,可通过下载jasperreport server项目,在其中找到相关的jar包。
3、在生成报表的过程中,发现临时生成的svg文件不能删除,同时依赖的js文件不断创建删除。苦于找不到custom visualization component的源码(jasperreport官网也没找到),因此自能反编译相关类了。
进行小手术!
- 判断临时目录是否存在,不存在创建,不再删除
- 对于无法删除的svg文件的原因的是在读取流的过程中,没有close
4、页面好像只有detail band可以自动调整高度,其它band除非有sub report
5、多个模板合成,可以有两种方式。
- 先填充第一个模板,然后依次填充其它模板,所有页面填充完成后,将第一个模板以后的页面添加到第一个模板中。
- 采用批量导出的功能,所有模板依次填充,然后放入一个list中,采用exporter实现导出。
总的来说,个人倾向与第二种方式,可以增加更加灵活控制的参数,比如pdf可以增加bookmarker,甚至加密等。