@凌晨风
“分成两列横着打印”是不是指像我现在的报表逆时针转90度。如果是,那在Jasperreport里是做不到的。文章中也有提及,Jasperreport是只能一个区域(band)一个区域地去渲染,因为区域的排列是由上到下,所以渲染的顺序也是从上到下的,没办法从左到右渲染。
@john
那你的意思是适合中国的报表才有意义?那什么是中国式的报表呢?
@john
JasperReport不是不适合中国报表,只是它不是为中国报表而设计!jasperReport功能很强大,只要你有想象力完全可以定制所需要的报表,关键是它开源,是一个纯java报表,如果你是跨系统那么它是首选,前提是你有足够的时间和耐心哦
@Heis
博主说的很有道理,需求不同,中国式复杂的报表的确做起来很麻烦.
我也是发表一下个人意见而已.大家共同学习啊!
我接触过jasper的api,底层针对子报表采用io加载,编译jasper文件,之后.java文件,博主可以跟踪调试一下多子报表的例子看看,程序运行时会在你的硬盘上写文件之后编译加载到内存后删除掉,放开底级别的日志就可以看出来.
我们的系统是跑在局域网的,运行起来都不是很理想.至于报表上展示的数据和图表等等需要特殊经过计算的数据我是采用scriplet处理,而底层只需要一个简单的connection就可以(主要是考虑到我们的报表系统是给用户使用的,而用户只会一些简单的sql,配上我们封装的scriplet就可以达到想要的效果).
关于那个"分栏",我是看了这个效果图才有此说法,至于是不是和你的需求一致那大家就应该多交流了:先说说我的想法:分成两列横着打印就可以出现你要的这种效果图,不知道博主是不是这个意思?学习学习!
感觉这样介绍没实际意义 因为JasperReport并不适合中国的报表,很多都做不出来,建议你看看润乾报表,不要在这里给大家推荐一个不适合中国的报表!
@凌晨风
首先,针对你说的“报表做起来很麻烦”。我前面的文章有说过,以XML作为数据源是针对不同的需求的,请考虑下面的几种情况:如果你的报表数据要经过一系列的精确计算,然后在报表上展示计算结果;如果你的报表数据并不是全部都来自于数据库,而是某些来自程序或其他配置文件;SQL能不能解决问题?
其次,我不能认同“多个子报表效率无疑会很底”这句话。标签式报表主体报表的subreport元素都是指向相同的子报表模板。这相当于java中一个类调用同一个类的多个实例,这样并不会有效率问题。使用“无疑”这个词并不是程序员应有的素质,至少你应该先去运行一下这个报表。
我猜想你说的“多结果集”是指subdatasets,这个是只适用于连接(Connection)类型的数据集(像数据库,Hibernate之类),并不适用于数据源(Data Source)类型的数据集(像XML,CSV之类)。
对于你的“分栏”操作,我并不是很理解,请赐教。
这样的报表做起来很麻烦,而且多个子报表效率无疑会很底,楼主有没有想过jasperReport的API支持多结果集的报表,也就是针对报表上不同的块解释不同的SQL填充?而且楼主所说的标签式报表完全可以通过简单的一个jrxml文件通过分栏操作完成
@tide
我理解你的意思是像下面这样的表格吗?
_______________
| |____|____|
| |____|____|
| |____|____|
| |____|____|
如果是,我会在下一篇文章中介绍。
请教一下,怎么样可以自做单元格合并这样的中文式的报表?谢谢你的答复。
我的qq:605524436。
@游上岸的鱼
使用XML作为数据源比直接读取数据库更有优势的地方在于:
1.数据可以在程序里处理;
2.数据独立性和可读性好
但是劣势也是很明显的,因为要从数据库读取数据到对象,对象再转换为XML,这个过程消耗的资源要更多,效率也会受到影响。具体的效率我也没测试过,但是我在项目里生成的XML在一万行左右时,效率是可以接受的。
但是对于效率要求比较高的报表,但是数据不需要做中间处理的报表,我并不推荐XML作为数据源这种方式。
看了大大的四篇,发现自己的问题有了解决方法,大大是把查询结果弄成XML数据源,然后再把它们读取到报表,这就解决了直接对数据库绑定数据源造成无法对条件搜索进行报表了。这样又要涉及XML的读写问题,如果我的数据有好几万条一次性写入XML不知道会不会效率有问题,我第一次接触报表,请多多指教,谢谢
如果相对于那些时常导出报表的,如在浏览器上导出报表的这确实一个很好的方案。
但是还是搞不清如何解决查询的问题,所以期待你的下一章。
这样确实解决了烦人的SQL但是增加了额外的负担,fillReport你需要的数据源需要从xmlDatasource中加载,如果再来点统计、图表型等等,scriplet也会让你越来越头疼,首先维护起来麻烦,其次为了填充obj大对象所带来代码额外的代码、性能开销......