iReport 笔记(六) 使用子报表(使用JavaBean集合作为数据源)

iReport专题学习之子报表(SubReport) 07 一、SubReport简介 阅读详情

6 子报表

在本例中,我使用子报表将生成如下样式的报表

6.1 程序部分

第一步,创建与之相关的Bean类,如下所示:

ProvinceBean.java

package lld.test.ireport;

import java.util.ArrayList;

public class ProvinceBean
{
	private String provinceName;
	private ArrayList<CityBean> cities;
	public String getProvinceName()
	{
		return provinceName;
	}
	public void setProvinceName(String provinceName)
	{
		this.provinceName = provinceName;
	}
	public ArrayList<CityBean> getCities()
	{
		return cities;
	}
	public void setCities(ArrayList<CityBean> cities)
	{
		this.cities = cities;
	}
}

CityBean.java

package lld.test.ireport;

public class CityBean
{
	private String cityName;

	public String getCityName()
	{
		return cityName;
	}

	public void setCityName(String cityName)
	{
		this.cityName = cityName;
	}
}

第二步 创建Servlet类,如下所示

package lld.test.ireport;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;

public class ChildReportServlet extends HttpServlet
{

	private static final long serialVersionUID = -1233414483047719876L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		try
		{
			String root_path = this.getServletContext().getRealPath("/");
			root_path = root_path.replace('//', '/');
			String reportFilePath = root_path + "WEB-INF/classes/lld/test/ireport/child_report_jbs_parent.jasper";
			JRDataSource dataSource = this.createDataSource();

			Map<String, String> parameters = new HashMap<String, String>();
			parameters.put("SUBREPORT_DIR", root_path + "WEB-INF/classes/lld/test/ireport/");
			JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
			JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);

	        OutputStream ouputStream = resp.getOutputStream();  
	        resp.setContentType("application/pdf");
	        resp.setCharacterEncoding("UTF-8");  
	        resp.setHeader("Content-Disposition", "attachment; filename=/""  
	                + URLEncoder.encode("PDF报表", "UTF-8") + ".pdf/"");  
	            	
	        // 使用JRPdfExproter导出器导出pdf  
	        JRPdfExporter exporter = new JRPdfExporter();  
	        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
	        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
	        exporter.exportReport();
	        
	        
	        ouputStream.close();  

		}catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
		
	}
	
	private JRDataSource createDataSource()
	{
		//生成测试数据
		ArrayList<ProvinceBean> provinces = new ArrayList<ProvinceBean>();
		
		ProvinceBean province = new ProvinceBean();
		province.setProvinceName("山东");
		
		ArrayList<CityBean> cities = new ArrayList<CityBean>();
		CityBean city = new CityBean();
		city.setCityName("济南");
		cities.add(city);
		city = new CityBean();
		city.setCityName("青岛");
		cities.add(city);
		city = new CityBean();
		city.setCityName("潍坊");
		cities.add(city);
		
		province.setCities(cities);
		provinces.add(province);

		province = new ProvinceBean();
		province.setProvinceName("江苏");
		
		cities = new ArrayList<CityBean>();
		city = new CityBean();
		city.setCityName("南京");
		cities.add(city);
		city = new CityBean();
		city.setCityName("无锡");
		cities.add(city);
		city = new CityBean();
		city.setCityName("苏州");
		cities.add(city);
		
		province.setCities(cities);
		provinces.add(province);

		return new JRBeanCollectionDataSource(provinces);
	}

}

如果有了以前例子的基础,这个例子应该不难看懂,需要注意的是下面这4行代码,这是新出现的特性:

Map<String, String> parameters = new HashMap<String, String>();
parameters.put("SUBREPORT_DIR", root_path + "WEB-INF/classes/lld/test/ireport/");
JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);

这是因为,在使用子报表时,需要一个SUBREPORT_DIR变量,指示子报表所在的路径,在下面创建子报表的相关部分会再次进行描述,请注意对比。我在以前的例子中,调用JasperFillManager.fillReport()方法时第二个参数均为null,实际上,这个参数可传递到jasper report中的Parameters项中。

6.2 创建报表

第一步,创建主报表,如下图所示

其Connection设置如下图所示:

其DataSource设置如下图所示

第二步,创建子报表,可使用工具栏的“SubReport”图标直接创建,使用默认的名称,并确定好子报表的位置,利用系统的wizard一步一步设置,注意在第2步设置”Connection/Datasource ”时最好选择”no connection or datasource”)

子报表我们使用CityBean做为数据源,设置方法参考上一步

第三步,在父报表中设置子报表控件的属性,在SubReport面板中设置其“Connection/Data Source Expression”为“new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{cities})”,如下图所示:

第四步,编译,将编译生成的.jasper文件放置到项目的相应目录中

注: 如需本例源代码, 请留言

 

iReport 笔记(三) 使用JavaBean集合作为数据源 使用JDBC作为报表数据源其实是有很多缺陷的,例如,它要求使用SQL查询作为数据来源,但有时报表的内容并不能由一条SQL语句完成。因此,使用JavaBean集合作为数据源才是终极的解决之道,用户只需要将数据整理到一个JavaBean集合之中就可以了,无论用什么方法,数据源为何物。3.1 定义Bean 定义一个最简单的Bean,只包含一个属性,如下所示: package lld. 阅读详情

相关推荐

IReport中子报表与JavaBean数据源设计实践

IReport作为一个强大的报表设计工具,其用户界面布局经过精心设计,以便用户能够高效地进行报表设计工作。主界面可以大致分为以下几个区域:菜单栏:提供所有可用的命令和功能选项。工具栏:包含一系列快捷操作按钮,包括常用的编辑、设计和打印功能。报表设计面板:这是设计报表的中心区域,你可以拖放不同的组件,如文本字段、图像、图表等。调色板/组件库:提供报表设计所需的各种组件,用户可以从中选择并添加到报表设计面板中。属性检查器。

weixin_36178216的博客 687

iReport 4.1 报表制作,子报表,实例解析

开发使用步骤(iReport 4.1.1)   (个人总结,如有问题请留言,另外知道table控件用法的给我留言或者发邮件谢谢。Email:jiazx0107@163.com) 目录 1.      开发使用步骤(iReport4.1)... 2 4.1.       JasperReport 和iReport的介绍... 2 4.1.1.        JasperReport 简

九尘辛 3万+

ireport子报表嵌套

ireport子报表嵌套.doc,文档主要描述了,ireport如何通过子报表技术实现一对多行数据展示问题

IReport的子报表设置

通过iReport可以方便的设计Jasperreport报表,其中的子报表功能给报表设计带来很大的便利,不过iReport的Guide中对subreport的设计描述并不详尽,通过摸索后做了一些总结。 一、在主报表中关于子报表元素的设计属性 下面两图为子报表(subreport)的属性Dialog [img]http://dl.iteye.com/upload/picture/pic/7...

iteye_8401的博客 563

ireport中table使用javaBean数据源

NULL 博文链接:https://shouzhang1-2.iteye.com/blog/1973767

Win10系统VS2019+Cmake+qhull_8.0.0环境配置

1 qhull 1.1 简要介绍 qhull是一个强大的计算几何库,可以用于计算高维的convex hull, Delaunay triangulation, Voronoi diagram等。 1.2 依赖库 qhull不依赖其他库。 1.3 源码包下载 qhull源码地址:github:https://github.com/qhull/qhull.git 2 Cmake构建项目 2.1 路径 源代码路径:D:/ThirdParty/qhull/qhull_8.0.0构建项目路径:D:/Thi.

wangchenxue的博客 2490

利用iReport制作子报表

iReport版本:3.7.3,JavaBean作为数据源。1.先配置一下classpath,点击“工具”--&gt;“选项”--&gt;“iReport”--&gt;“classpath”,点击“AddFolder”,选择你的类文件编译之后的存放路径,如:D:\company\source\sponsorshipWeb\build\classes;2.然后点击iReport主界面的Report ...

Keven‘s Develop Blog 385

Unity游戏开发客户端C#基础

初级Unity客户端开发工程师 面经 之 C#篇

Sea3752的博客 2万+

ireport子报表

<br />主表中创建子表注意事项<br />创建的操作就不描述了,主要描述的是:主表里子表的属性内容设置问题<br />第一大突破点: 连接方式设置——JDBC和JAVABean<br />在Connection/Data Source Expression中根据子表的连接方法选择<br />    一 。利用JDBC连接子表<br />         选择use connecion expression<br />        里面的内容为连接参数— $P{REPORT_CONNECTION}

wpcxyking的专栏 4212

Springboot计算机毕业设计校园树洞微信小程序【附源码】开题+论文+mysql+程序+部署

因此,开发一款专门针对校园用户的树洞微信小程序,为学生提供一个安全、私密、便捷的倾诉和交流平台,具有重要的现实意义和应用价值。通过本研究的实施,我们预期能够开发出一款功能全面、操作便捷的校园树洞微信小程序,为校园师生提供一个安全、私密、便捷的倾诉和交流平台。此外,通过不断优化和改进小程序的功能和服务,我们预期能够提升用户体验和满意度,推动校园树洞小程序的持续发展,并为校园生活的和谐与健康发展做出积极贡献。同时,通过不断优化小程序的功能和服务,提升用户体验和满意度,推动校园树洞小程序的广泛应用和持续发展。

光冯毕设程序 1666

APM 飞行模式切换--源码详解

APM飞控中有很多种方式可以改变飞行模式。其中最常见的为遥控器切换和地面站切换两种方式。 下面以遥控器切换为例详解飞行模式切换逻辑。 APM遥控器切换飞行模式的源代码在RC_Channel.cpp文件中的RC_Channel_Copter::do_aux_function_change_mode()函数中。 const bool success = copter.set_mode()调用Copter::set_mode()函数,在set_mode()函数中调用mode_fro...

qq_30623591的博客 2440

iReport 笔记(六) 使用子报表(使用JavaBean集合作为数据源) 【转】

6 子报表在本例中,我使用子报表将生成如下样式的报表6.1 程序部分 第一步,创建与之相关的Bean类,如下所示:ProvinceBean.javapackage lld.test.ireport;import java.util.ArrayList;public class ProvinceBean{ private String provinceName; privat

小板凳... 1737

手把手教你学Simulink--双足机器人的反步控制方法仿真

本文介绍了在Simulink中基于反步控制方法进行双足机器人仿真研究的步骤。主要内容包括:1)准备工作,包括MATLAB/Simulink安装和相关工具箱配置;2)构建简化双足机器人模型;3)设计反步控制器,阐述其递归设计原理及Lyapunov函数构造方法;4)通过MATLAB Function块实现控制逻辑并连接模型;5)仿真参数配置和结果分析。文章强调反步控制适用于非线性系统,通过逐步构造虚拟控制律保证系统稳定性,并指出需要多次调试和查阅文献来优化控制效果。该教程为研究双足机器人运动控制提供了实用的仿真

MHD0815的博客 151

jasperreport 使用子报表(使用JavaBean集合作为数据源)

程序部分 第一步,创建与之相关的Bean类,如下所示:ProvinceBean.javapackage lld.test.ireport;import java.util.ArrayList;public class ProvinceBean{ private String provinceName; private ArrayList cities; public String getProvinceName() {  return provinceName; } public void setProvi

无雨 6392

SQL的基本介绍

1.什么是数据库?2.什么是数据库管理系统?3.什么是 SQL?1.数据库是保存有组织的数据的容器,通常是一个文件或一组文件,可以将其看作电子化的文件柜。用户可以对文件中的数据执行新增、删除、更新、查询等操作。2.数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户可以通过 DBMS 访问数据库中的数据,数据库管理员也可以通过 DBMS 进行数据库的维护工作。

shiwei0813的博客 2879

1、VMware vSphere 全面指南:从入门到精通

本文全面介绍了VMware vSphere从入门到精通的完整知识体系,涵盖基础概念、环境适配、部署规划、安装配置、网络与存储准备、虚拟机创建与管理、资源组织、事件监控、巡检流程、主机配置文件管理、资源池优化、高可用性与容错应用,以及故障排除方法。结合实用工具和部署技巧,帮助读者系统掌握vSphere的核心功能与运维实践,提升虚拟化环境的稳定性与管理效率。

pz890123的博客 94

iReport使用javabean做数据源

iReport使用javabean做数据源需要四个步骤一、建立一个javabean,这是一个普通的bean: /**//* * PersonBean.java * * Created on 8 luglio 2004, 1.41 */package it.businesslogic.ireport.examples.beans;/** *//** * * @author  Admi

黑·白·灰 7116

《测绘综合能力》——大地测量

《测绘综合能力》大地测量 部分重要(常考)知识点(精简版)。

C_xxy's blog 803

ireport使用javabean作为数据源的实现

<br />Ireport+jasperreport是一款优秀的开源报表工具,支持数据库、javabean等多种数据源支持,可以在web上生成html、pdf、xls、rtf等多种格式的报表。下面是本人使用javabean数据源实现报表的具体步骤<br /> <br />1.       实现环境 Ireport:1.3.2(jasperreport1.3.2)<br />操作系统:windowsXP<br />程序环境:eclipse3.1.1+myeclispe4.1.1<br />2.       程

Kevin‘s blog 6048

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

iReport用javabean创建数据源

1、创建一个javabean对象 import java.io.Serializable; public class GoodPrint implements Serializable{ /** *  */ private static final long serialVersionUID = 1L; private String goodName; private String

实现技术自由的梦想 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用javabean+ireport 做报表(包含子报表)

创建实体类,导出成jar,给ireport引用,方便读取字段 package com.huiju.common.fzProcessCard; import java.io.Serializable; import java.util.List; public class FzProcessCardVO implements Serializable { /** * */ pr...

wenruiduo的博客 420

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

读取jrxml文件生成JasperReport 子报表, javabean作为数据源

1) 导入javabean属性, 需要加上包名, 比如com.blog.UserBean. 直接输入class名, 找不到. 对于属性的修改的添加也可以手动在design或者xml界面添加Field.   2) javabean子报表2种做法 , 1是子报表作为参数, 类型是JasperReport, 两个报表可以独立编译. 我只能使用jrxml在内存中编译. 不能使用已经编译好的jasper文

java journey 1万+

图示ireport中使用javabean作数据源开发基于jasperreports报表过程

图示ireport中使用javabean作数据源开发基于jasperreports报表过程——学习笔记系列之ireport起步xmlin本文不讲原理,因为网上的资源很多,本文以一个简单的日销售报表为例,记录在ireport中使用javabean作数据源开发基于jasperreports报表过程. 一. 准备工作<br /> 1.正确安装jdk<br /> 2.到http://ireport.sourceforge.net/去下载ireport,本文使用1.3.1版本,解压iReport在任意目录,解压后的文

wlxtaking的专栏 1648

javabean ireport 做交叉报表

报表开发工具:ireport 程序开发工具:my eclipse 1.首先我们得到实体类,在my eclipse中逆向生成即可。 如下图所示:点击  设置 新建-javabean   2.选择javabean Datesource的数据源,选择正确的路径,此路径为你实体类的路径,点击read attributes,会列出该实体类中的字段。点击选择即可。 这是选择的字段会出现

waiting的专栏 3925
上一篇: iReport 笔记(五) 中文设置
下一篇: iReport 笔记(七) 为子报表添加统计信息
lldwolf
博客等级 码龄26年 57粉丝 44原创
评论 50
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值