iReport学习笔记——动态报表
最近一直在研究jasperreport,今天终于搞定了动态报表问题。
所谓动态报表,顾名思义就是指报表的列头、列数和列内容都不是固定的,具体的数据是程序动态生成的。我们知道jasperreport的基本用法是用iReport画出模板jrxml然后编译成jasper,然后在程序里充填数据生成PDF或者其他格式的报表。但如果报表的列数不确定,就无法事先用 iReport画好固定的模板。这时候就必须用到jasperdesign在程序中动态生成报表模板。即用jasperdesign生成模板并编译成 JasperReport文件,然后充填数据生成jasperprint以供输出。
网上有一些的报表是完全用jasperdesign写成的,但这样的报表往往元素比较简单,不容易添加图片或者特殊效果例如斑马纹。比较好的方法是用iReport画出报表中不变的元素,其他需要变化的元素中画出一个标准的以供clone,然后重新设置位置和大小以及expression就可以了,工作量比完全重新生成jasperdesign模板小得多,以下是一个例子:
File file = new File(fileDir);
JasperDesign jasperDesign = new JasperDesign();
try {
jasperDesign = JRXmlLoader.load(file);
int restWidth = jasperDesign.getColumnWidth()-89;
int columnNum = strArray.length-3;
int columnWidth = restWidth/columnNum;
JRDesignBand columnHeader = (JRDesignBand)jasperDesign.getColumnHeader();
JRDesignBand detail = (JRDesignBand)jasperDesign.getDetail();
for (int i=3;i<strArray.length;i++){
//生成列头
String para = "$P{para"+i+"}";
JRDesignTextField textField = (JRDesignTextField)(((JRDesignBand)jasperDesign.getColumnHeader()).getElementByKey("textField-20")).clone();
textField.setX(89+columnWidth*(i-3));
textField.setY(89);
textField.setWidth(columnWidth);
textField.setHeight(41);
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText(para);
textField.setExpression(expression);
columnHeader.addElement(textField);
//生成矩形
JRDesignRectangle rectangle = (JRDesignRectangle)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("rectangle-24")).clone();
rectangle.setX(89+columnWidth*(i-3));
rectangle.setY(0);
rectangle.setWidth(columnWidth);
rectangle.setHeight(12);
detail.addElement(rectangle);
//生成表内容
String field = "$F{field"+(i+1)+"}";
JRDesignTextField textField1 = (JRDesignTextField)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("textField-24")).clone();
textField1.setX(89+columnWidth*(i-3));
textField1.setY(0);
textField1.setWidth(columnWidth);
textField1.setHeight(12);
JRDesignExpression expression1 = new JRDesignExpression();
expression1.setValueClass(java.lang.String.class);
expression1.setText(field);
textField1.setExpression(expression1);
detail.addElement(textField1);
}
//删除原有的内容
JRDesignTextField textFieldDel = (JRDesignTextField)(((JRDesignBand)jasperDesign.getColumnHeader()).getElementByKey("textField-20"));
JRDesignTextField textField1Del = (JRDesignTextField)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("textField-24"));
JRDesignRectangle rectangleDel = (JRDesignRectangle)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("rectangle-24"));
columnHeader.removeElement(textFieldDel);
detail.removeElement(textField1Del);
detail.removeElement(rectangleDel);
return JasperCompileManager.compileReport(jasperDesign);
需要注意的是,最后要删除事先画好的那几个元素以免重叠。
PS:斑马纹效果——添加一个矩形设成所需底纹的颜色,大小和单元格一样大,顺序置于文本框后面,文本框设成透明,在矩形的表达式中加入 Boolean.valueOf((($V{COLUMN_COUNT}.intValue()-1)/5)%2!=0)即可,我这里是每隔5行显示底纹,可根据需要调整。
分享到:
相关推荐
iReport作为一个设计工具,不仅可用于独立设计报表,还可以与Java应用如Spring、Struts等进行集成,实现动态生成报表。通过源码级别的理解和定制,开发者可以更好地适应特定业务需求。 总结,iReport 3.6.7提供了...
这种结构允许在主报表中动态展示多个数据集的信息,增强报表的表现力和信息密度。在JasperReport中,实现复合报表的关键在于正确配置子报表的参数和数据源,确保数据流的顺畅。 #### 实例分析:Customer与OrderInfo...
《jasperreport+ireport学习笔记3》是关于企业级报表工具JasperReport与iReport深度结合使用的进阶教程。这两个工具在IT行业中被广泛应用于Web报表的开发,提供了强大的数据可视化和报告生成能力。 JasperReport是...
学习资料分享:JasperReoprt+Ireport学习笔记
iReport 子报表嵌套技术详解 iReport 子报表嵌套技术是 ireport 提供的一种高级功能,通过子报表技术我们可以创建复杂的报表,实现多对一的数据展示问题。在本文中,我们将通过 ireport 子报表技术,实现自有房产...
iReport 报表、子报表、主从报表、合计、实例解析1. 开发使用步骤(iReport4.1)... 2 4.1. JasperReport 和iReport的介绍... 2 4.1.1. JasperReport 简介... 3 4.1.2. iReport 简介... 3 4.1.2.1. iReport几个重要...
IReport和JasperReport是两个非常流行的Java报表工具,它们能够帮助开发者创建复杂、美观且功能丰富的报表。本篇将深入探讨如何利用IReport来实现子报表以及行合并的实例。 首先,IReport是一款基于GUI的报表设计...
"jasperreoprt+ireport学习笔记"提供了关于这两个工具的详细教程,涵盖从基础到高级的各个方面,包括安装配置、报表设计、数据绑定、动态内容生成等内容,适合初学者和有经验的开发者参考学习。 通过深入学习和...
jasperreports与iReport结合使用,提供了强大的报表设计和生成能力,适用于各种Web应用的报表需求。通过理解这两个工具的基本概念、集成步骤和设计技巧,开发者可以创建出美观且功能丰富的报表,满足业务分析和数据...
标题与描述概述的知识点主要集中在使用JasperReport与iReport工具进行报表设计,特别是如何在报表中集成图表功能。以下是对这一主题的深入探讨: ### JasperReport与iReport简介 JasperReport是一款开源的报表工具...
### Jasperreport与iReport整合开发Web报表学习笔记 #### 一、环境配置 为了能够顺利地使用Jasperreport和iReport进行报表设计与开发,首先需要确保开发环境配置正确。 1. **Java JDK环境**: 确保已安装最新版的...
### iReport 4.5 学习笔记 #### 一、iReport介绍 ##### 1.1 概述 iReport是一款专为JasperReports设计的强大且直观的报表设计器,支持复杂的报表设计,包括图表、图像、子报表等多种元素。这款工具完全基于Java...
在 JasperReports 的设计工具 IReport 中,创建复杂的报表有时需要使用子报表来组织和展示数据。本主题将详细讲解如何利用 Ireport 实现子报表调用交叉报表的过程,以帮助你更好地理解和操作。 首先,我们需要了解...
2. **报表设计**:使用iReport设计报表模板,定义数据源、字段、查询语句,以及报表的样式和布局。报表设计完成后,保存为JRXML文件,可以进一步编译成.jasper文件。 3. **数据源配置**:在web应用中,需要配置报表...
iReport是JasperReport的图形化设计器,它简化了报表设计的过程,使开发者能够通过拖拽操作来创建和编辑报表。 #### 二、设置DataSource与ReportQuery 在使用JasperReport与iReport时,首要步骤是设置数据源...
这种方式允许你使用具有set和get方法的Javabean作为数据源,便于程序动态构建数据并展示在报表中。 6. **定义Javabean数据源** - 输入自定义名称,如“JavabeanDatasource”,以便识别数据源类型。 - 提供一个...
iReport是JasperReport的官方设计工具,是一个基于GUI的报表设计软件,提供了一个直观的拖放界面,方便用户创建和编辑报表模板。iReport支持JasperReport的所有特性,包括表格、图表、文本框、图片等元素,以及样式...
IReport和JasperReports是两个非常流行的开源工具,专门用于设计和生成复杂的报表。本篇文章将深入探讨如何利用这两款工具实现Flash报表查询功能。 首先,IReport是一款基于Java的报表设计工具,它可以与...
【ireport开发交叉报表资料及笔记】 交叉报表(Crosstab)是数据分析中常用的一种工具,它可以将数据按行和列的方式进行交叉展示,便于用户更直观地理解数据间的关联和对比。Ireport是一款强大的开源报表设计工具,...
总的来说,这个"web+ireport报表源代码"提供了一个完整的解决方案,涵盖了报表设计、数据处理、Web交互等多个方面,对于想学习或提升报表开发技能的人来说,是一个不可多得的学习材料。同时,通过对源代码的研究,...