`
Heis
  • 浏览: 114413 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JasperReport那些事儿(五)——再说表格式报表

阅读更多

上一篇文章就有人评论说Jasperreport不适合中国式报表。我就很奇怪了,我从来没说Jasperreport适合中国式报表(当然我也没说不适合)。我写文章的初衷就是分享技术,工具这种东西向来是以需求为导向的,合适就用,不合适没钱买好的,也凑合用用。但是程序员往往是没权去决定那些事儿的,程序员应该是一群能用有限的资源去解决问题的人,何况开源产品使用成本和学习成本都比较低,不用白不用。要一些人看着刺眼或打着打广告的心态,我就劝你别看,方正我是会继续写下去的。扯远了,回到正题吧。
    最近博客留言有问怎么做“单元格合并的报表”,单看这定义,无从下手啊,我也不知道我理解的意思对不对,上星期做了一个我理解的“单元格合并的报表,希望和那位留言的博友的意思有一点重合就好了。看一下效果吧。


    数据源结构:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><? xml version="1.0" encoding="utf-8"  ?>
  
< DepartmentList >
    
< list >
      
< Department >
        
< name > 行政部 </ name >
        
< personList >
          
< person >
            
< age > 35 </ age >
            
< gender > </ gender >
            
< name > 张三 </ name >
          
</ person >
        
</ personList >
      
</ Department >
      
< Department >
        
< name > 技术部 </ name >
        
< personList >
          
< person >
            
< age > 30 </ age >
            
< gender > </ gender >
            
< name > 李四 </ name >
          
</ person >
          
< person >
            
< age > 28 </ age >
            
< gender > </ gender >
            
< name > 王五 </ name >
          
</ person >
        
</ personList >
      
</ Department >
    
</ list >
  
</ DepartmentList >

    都说中国的报表是大表中有小表,这其实和关系数据库的表格概念有很大的不同。关系数据库的表格是简单的二维表格,不会在表格里再嵌套表格。那遇到这类型的表格应该怎么处理呢?我在前面的文章有讲怎么制作简单的二维表格,所以这篇主要是解决表格前面的单元格合并的问题。
    这里还要借助子报表,子报表是Jasperreport最为强大的功能,也是最具扩展性的功能组件(纯粹个人意见)。
    做这样的表格我是用了三个报表模板。
    第一个,DepartmentList.jrxml.(编译后为jasper后缀名)


    第二个,DepartmentList_department.jrxml.


    第三个,DepartmentList_department_person.jrxml.


    调用关系是第一个模板调用第二个,第二个模板再调用第三个。
 DepartmentList.jasper.
    |-DepartmentList_department.jasper.
        |-DepartmentList_department_person.jasper.

    在第二个报表给子报表传递数据源时,表达式要像下面这样写。这样写主要目的是选择当前department节点下的所有person节点

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource( " /DepartmentList/list/Department[ " + $V{REPORT_COUNT}.intValue() + " ]/personList/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那种以表格为导向类型的报表工具。但是还是那句话,工具这种东西向来是以需求为导向的,合适就用,不合适没钱买好的,也凑合用用。
     报表模板及数据源点这里 下载。

2
0
分享到:
评论

相关推荐

    JasperReport 中交叉报表指南

    JasperReport 中交叉报表指南 JasperReport 是一个功能强大且灵活的报表生成工具,它提供了许多功能来帮助开发者生成复杂的报表。在报表生成中,交叉报表是一种常用的报表类型,能够将数据按照行和列进行交叉处理,...

    jasperreport一个子报表的例子

    JasperReport是一个强大的Java报告库,它允许开发者创建复杂、美观的报表,广泛应用于企业级应用中。在JasperReport中,子报表是用于在主报表内部嵌套其他报表的一个功能,可以用来组织和展示更复杂的结构化数据。...

    JasperReport动态生成报表

    报表设计是JasperReport的基础,通常通过JasperReport的图形化设计工具——iReport或Jaspersoft Studio进行。这些工具允许开发者用拖放的方式创建报表布局,包含表格、图表、文本框、图片等多种元素。设计过程中,...

    springboot整合JasperReport实现报表功能

    报表模板通常包含字段、表格、图表等元素,并通过表达式来绑定数据源。 在SpringBoot中,你可以通过以下步骤来生成报表: 1. **配置数据源**:报表通常需要数据来填充,你可以使用SpringBoot的数据源来提供数据。...

    jasperreport中文资料——梧桦椰枫(收集).zip

    **JasperReports Result**:这份文档可能总结了使用JasperReport生成报表时可能出现的结果类型,包括打印、导出、交互式展示等。 **jasperreports 对大数据量报表的支持**:JasperReport支持大数据量的处理,包括...

    JasperReport报表设计总结

    JasperReport是一款强大的Java报表工具,它允许开发者创建复杂、多格式的报表,并能与各种数据源集成。本文主要总结了JasperReport报表设计的关键点,包括报表格式定制、数据填充以及显示或打印。 首先,报表格式的...

    jasperreport 6.4.1报表动态列,以及生成导出html

    JasperReport是一款强大的开源报告生成库,主要用于设计和打印各种复杂的报表。在6.4.1版本中,它提供了丰富的功能,包括支持动态列的报表设计,这使得开发者可以根据数据的实际情况灵活调整列的数量和内容。这个...

    jasperReport 动态合并单元格示例

    JasperReport是一款强大的Java报表工具,它允许开发者创建复杂、美观的报告,广泛应用于企业级应用的报表生成。在jasperReport中,动态合并单元格是一项重要的功能,它能够根据数据的特性和需求灵活调整表格的布局,...

    jasperReport测试项目(含报表设计文件).rar_jasperReport 设计报表_jasperreport_报表设

    在本项目中,“jasperReport测试项目(含报表设计文件).rar”是一个压缩包,包含了一系列用于JasperReport报表设计的文件,帮助我们理解和实践报表开发。 报表设计是JasperReport的核心功能,通过使用JRXML文件,...

    JasperReport 水晶报表

    **JasperReport 水晶报表** JasperReport是一款开源的报表工具,广泛应用于Java环境中,为开发者提供了设计、生成和展示复杂报表的功能。它以其灵活性、强大的数据处理能力和丰富的图表选项而备受赞誉。水晶报表...

    JasperReport动态报表归并行数据

    **标题:“JasperReport动态报表归并行数据”** **正文:** JasperReport是一款强大的开源报表工具,它允许开发者创建复杂、美观的报表,并且支持动态数据处理。在“JasperReport动态报表归并行数据”这个主题中,...

    jasperreport 生成pdf,html,xml,csv,xls报表,myeclipse源码

    在Java应用中,jasperreport通常用于生成数据可视化的静态或交互式报表。这个源码项目是基于**MyEclipse**开发的,MyEclipse是一款集成开发环境(IDE),它是Eclipse的扩展,专门针对Java、Web和企业级应用程序的...

    开源报表设计-JasperReport VS BIRT

    本文将重点讨论两个备受推崇的开源报表设计工具——JasperReport和BIRT,并通过深入比较它们的特点、功能以及适用场景,帮助你做出更适合项目的决策。 JasperReport是一款强大的Java报表库,它允许开发人员创建复杂...

    jasperreport

    在JasperReport 4.0.0版本中,用户可以利用其内置的报表设计工具——JasperDesign,通过GUI界面或者XML格式来定义报表结构。报表设计主要包括以下几个关键组成部分: 1. **字段(Fields)**:字段是报表中显示的...

    利用Jasperreport+IReport进行报表开发

    在IT行业中,报表开发是企业信息化管理不可或缺的一部分,它帮助企业分析数据、做出决策。...通过深入学习和实践,你可以掌握更多高级特性,如子报表、参数传递、交互式报表等,从而满足更复杂的业务需求。

    jasperreport ireport开发java报表入门级教程(完整版).rar

    JasperReport是一款开源的Java报表工具,它允许开发者创建复杂的打印报告,包括表格、图表、文本等元素,并能够输出为PDF、HTML、Excel、CSV等多种格式。JasperReport的核心功能是设计和生成静态报表,而动态数据的...

    iReport-JasperReport 报表开发指南

    8. **交互式报表**:了解如何使报表具有交互性,如添加按钮、链接,以及处理用户输入。 9. **导出与打印**:学习报表的不同导出格式,如PDF、HTML、Excel等,以及如何设置导出选项以满足特定需求。 10. **实战演练...

    JasperReport动态表头及subreport实现多表

    在IT行业中,报表生成是数据分析和业务展示的重要环节,JasperReport作为一个强大的开源报表工具,被广泛应用在Java项目中。本篇文章将详细讲解如何利用JasperReport实现动态表头和多表分页,并通过subreport来达到...

    jasperReport+ireport制作pdf报表教程

    5. **交互式报表**:jasperReport支持生成交互式报表,用户可以通过点击、下拉等方式进行数据钻取和查看详细信息。 6. **报表嵌入**:jasperReport可以轻松地嵌入到Java Web应用中,如Spring、Struts等框架。 **...

Global site tag (gtag.js) - Google Analytics