JasperReport那些事儿(五)——再说表格式报表 - 编程入门网
JasperReport那些事儿(五)——再说表格式报表时间:2009-12-15 BlogJava Heis上一篇文章就有人评论说Jasperreport不适合中国式报表。我就很奇怪了,我从来没说Jasperreport适合中国式报表(当然我也没说不适合)。我写文章的初衷就是分享技术,工具这种东西向来是以需求为导向的,合适就用,不合适没钱买好的,也凑合用用。但是程序员往往是没权去决定那些事儿的,程序员应该是一群能用有限的资源去解决问题的人,何况开源产品使用成本和学习成本都比较低,不用白不用。要一些人看着刺眼或打着打广告的心态,我就劝你别看,方正我是会继续写下去的。扯远了,回到正题吧。 最近博客留言有问怎么做“单元格合并的报表”,单看这定义,无从下手啊,我也不知道我理解的意思对不对,上星期做了一个我理解的“单元格合并的报表,希望和那位留言的博友的意思有一点重合就好了。看一下效果吧。 数据源结构:
JasperReport那些事儿(五)——再说表格式报表(2)时间:2009-12-15 BlogJava Heis都说中国的报表是大表中有小表,这其实和关系数据库的表格概念有很大的不同。关系数据库的表格是简单的二维表格,不会在表格里再嵌套表格。那遇到这类型的表格应该怎么处理呢?我在前面的文章有讲怎么制作简单的二维表格,所以这篇主要是解决表格前面的单元格合并的问题。 这里还要借助子报表,子报表是Jasperreport最为强大的功能,也是最具扩展性的功能组件(纯粹个人意见)。 做这样的表格我是用了三个报表模板。 第一个,DepartmentList.jrxml.(编译后为jasper后缀名) 第二个,DepartmentList_department.jrxml. 第三个,DepartmentList_department_person.jrxml. JasperReport那些事儿(五)——再说表格式报表(3)时间:2009-12-15 BlogJava Heis调用关系是第一个模板调用第二个,第二个模板再调用第三个。
在第二个报表给子报表传递数据源时,表达式要像下面这样写。这样写主要目的是选择当前department节点下的所有person节点。
REPORT_COUNT变量是指当前detail band内的计数器。例如,从父报表传过来的数据源的节点数是3,则REPORT_COUNT会从1到3遍历,detail band也会渲染3次。这里的XPATH是遍历了第一个到第三个Department下的所有person节点。 这里值得一提的是在第二张报表的部门那个textfield里有个属性需要注意,Stretch Type设置为"relative to band height",就是让textfield自动往下延伸,延伸到与其所在的区域(band)相同的高度。 说句实话,在Jasperreport里面处理表格的确是一件很麻烦的事(指以XML为数据源),像上文提到的表格是很简单的例子,但是却要用到三个模板。而且Jasperreport报表是线性渲染(由上到下),所以无论从灵活性和还是效率来说,都比不上像Excel那种以表格为导向类型的报表工具。但是还是那句话,工具这种东西向来是以需求为导向的,合适就用,不合适没钱买好的,也凑合用用。 程序员的一生其实可短暂了,这电脑一开一关,一天过去了,嚎;电脑一开不关,那就成服务器了,嚎…… |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |