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做为数据源,设置方法参考上一步设置dataSource
第三步,在父报表中设置子报表控件的属性,在SubReport面板中设置其“Connection/Data Source Expression”为“new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{cities})”,如下图所示:
第四步,编译,将编译生成的.jasper文件放置到项目的相应目录中
相关推荐
总之,通过IReport的子报表功能和JavaBean集合数据源,我们可以构建出更灵活、更高效的报告系统。这不仅简化了报告设计,也使得数据呈现更加清晰,有助于提升业务分析效率。在实际开发过程中,不断学习和熟练掌握...
在iReport中使用JavaBean作为数据源,可以解决因多条生产线导致的报表复用问题,以及在Hibernate+Struts架构中报表无法直接使用Hibernate数据库连接的问题。 要配置iReport以使用JavaBean数据源,首先需要确保...
提供的资源中,`IReport报表table使用javaBean数据源总结.docx`可能包含了详细步骤和常见问题解答。`官方文档.pdf`可能提供了更深入的官方指南。`testPDF.rar`可能是一个测试用例,包含生成的PDF报表样本,用于验证...
本文档将详细介绍如何使用 IReport 工具,结合 JavaBean 集合作为数据源来创建和导出 PDF 报表。相比于传统的 JDBC 数据源,使用 JavaBean 作为数据源具有更高的灵活性与便捷性。本教程不仅包括了基本的报表设计与...
在这个过程中,我们将深入探讨如何在`iReport`中使用`JavaBean`作为数据源来开发基于`JasperReports`的报表。 首先,我们需要了解`JavaBean`。`JavaBean`是一种符合特定规范的Java类,通常用于封装数据并提供公共...
本示例将向你展示如何利用iReport将JavaBean作为数据源,以生成定制化的报告。以下是对这个简单示例的详细解析: 1. **JavaBean作为数据源**:JavaBean是一种遵循特定规范的Java类,它封装了数据并提供了访问这些...
**ireport数据源** 是ireport报表引擎用来获取数据的对象,它可以是SQL查询结果、集合、自定义数据源等。在ireport中,我们可以自定义数据源类,使其符合`JRDataSource` 接口。`JRDataSource` 提供了两个主要方法:`...
使用`JRBeanCollectionDataSource`类,你可以将JavaBean集合转换为JasperReport能够理解的数据源。 ```java List<StudentBean> students = ... // 初始化学生数据 JRBeanCollectionDataSource beanDataSource = new...
本实例将深入探讨如何使用ireport结合javaBean作为数据源来生成报表,帮助初学者快速掌握ireport的使用方法。 【描述】:“一看就会的实例。能够很快上手ireport” ireport因其直观的图形用户界面和强大的报表设计...
在实际开发中,我们经常会遇到需要自定义数据源的情况,这时JasperReport提供了使用JavaBean作为数据源的功能。本实例将详细介绍如何通过自定义JavaBean数据源来生成报表。 首先,理解JavaBean是一种符合特定规范的...
本文档将详细介绍如何使用多种数据源来支持 iReport 的报表设计,特别是针对那些希望深入掌握 JasperReports 技术栈的开发者而言。iReport 是一个基于 Java 的报表设计工具,而 JasperReports 则是报表引擎。了解...
3. iReport导入数据源:在iReport设计工具中导入刚才创建的JavaBean类,作为数据源。 4. 打印报表:使用iReport工具设计报表,并将导入的数据源与报表关联,最终生成报表并打印。 提高篇主要介绍子报表的创建。子...
传统上,实现这种功能的一种常见方法是使用子报表技术,但这种方法往往会增加开发复杂度和降低性能。 #### 核心知识点解析 本文将详细介绍如何在JasperReports中直接在一个报表中使用多个数据源,从而避免了子报表...
- **JavaBean 数据源**: 使用 JavaBean 对象作为数据源。 - **空数据源**: 当没有实际数据时使用。 - **HQL 和 Hibernate 连接**: 使用 Hibernate 查询语言 (HQL) 与 ORM 框架 Hibernate 结合使用。 ##### 9.2 JDBC...
在JasperReport中,使用JavaBean作为数据源不仅可以将数据以对象的形式进行封装,还能以集合的形式(例如List)来提供给报表工具。这为数据的管理提供了极大的便利。那么,如何将JavaBean封装成List并用作...