`

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

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

 

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集合数据源,我们可以构建出更灵活、更高效的报告系统。这不仅简化了报告设计,也使得数据呈现更加清晰,有助于提升业务分析效率。在实际开发过程中,不断学习和熟练掌握...

    iReport使用JavaBean做数据源

    在iReport中使用JavaBean作为数据源,可以解决因多条生产线导致的报表复用问题,以及在Hibernate+Struts架构中报表无法直接使用Hibernate数据库连接的问题。 要配置iReport以使用JavaBean数据源,首先需要确保...

    ireport中table使用javaBean数据源

    提供的资源中,`IReport报表table使用javaBean数据源总结.docx`可能包含了详细步骤和常见问题解答。`官方文档.pdf`可能提供了更深入的官方指南。`testPDF.rar`可能是一个测试用例,包含生成的PDF报表样本,用于验证...

    IReport使用Javabean做为数据源导PDF

    本文档将详细介绍如何使用 IReport 工具,结合 JavaBean 集合作为数据源来创建和导出 PDF 报表。相比于传统的 JDBC 数据源,使用 JavaBean 作为数据源具有更高的灵活性与便捷性。本教程不仅包括了基本的报表设计与...

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

    在这个过程中,我们将深入探讨如何在`iReport`中使用`JavaBean`作为数据源来开发基于`JasperReports`的报表。 首先,我们需要了解`JavaBean`。`JavaBean`是一种符合特定规范的Java类,通常用于封装数据并提供公共...

    iReport使用JavaBean作为数据源——最简单的示例

    本示例将向你展示如何利用iReport将JavaBean作为数据源,以生成定制化的报告。以下是对这个简单示例的详细解析: 1. **JavaBean作为数据源**:JavaBean是一种遵循特定规范的Java类,它封装了数据并提供了访问这些...

    ireport利用javabean做数据源.docx

    **ireport数据源** 是ireport报表引擎用来获取数据的对象,它可以是SQL查询结果、集合、自定义数据源等。在ireport中,我们可以自定义数据源类,使其符合`JRDataSource` 接口。`JRDataSource` 提供了两个主要方法:`...

    使用JavaBean构造JasperReport子报表

    使用`JRBeanCollectionDataSource`类,你可以将JavaBean集合转换为JasperReport能够理解的数据源。 ```java List&lt;StudentBean&gt; students = ... // 初始化学生数据 JRBeanCollectionDataSource beanDataSource = new...

    ireport+ javaBean 做数据源实例

    本实例将深入探讨如何使用ireport结合javaBean作为数据源来生成报表,帮助初学者快速掌握ireport的使用方法。 【描述】:“一看就会的实例。能够很快上手ireport” ireport因其直观的图形用户界面和强大的报表设计...

    jasperReport自定义javabean数据源实例

    在实际开发中,我们经常会遇到需要自定义数据源的情况,这时JasperReport提供了使用JavaBean作为数据源的功能。本实例将详细介绍如何通过自定义JavaBean数据源来生成报表。 首先,理解JavaBean是一种符合特定规范的...

    ireport数据源文档

    本文档将详细介绍如何使用多种数据源来支持 iReport 的报表设计,特别是针对那些希望深入掌握 JasperReports 技术栈的开发者而言。iReport 是一个基于 Java 的报表设计工具,而 JasperReports 则是报表引擎。了解...

    ireport+javabean

    3. iReport导入数据源:在iReport设计工具中导入刚才创建的JavaBean类,作为数据源。 4. 打印报表:使用iReport工具设计报表,并将导入的数据源与报表关联,最终生成报表并打印。 提高篇主要介绍子报表的创建。子...

    JasperReport中使用多个数据源的方法

    传统上,实现这种功能的一种常见方法是使用子报表技术,但这种方法往往会增加开发复杂度和降低性能。 #### 核心知识点解析 本文将详细介绍如何在JasperReports中直接在一个报表中使用多个数据源,从而避免了子报表...

    iReport-JasperReport 报表开发指南

    - **JavaBean 数据源**: 使用 JavaBean 对象作为数据源。 - **空数据源**: 当没有实际数据时使用。 - **HQL 和 Hibernate 连接**: 使用 Hibernate 查询语言 (HQL) 与 ORM 框架 Hibernate 结合使用。 ##### 9.2 JDBC...

    jasperreport学习 之 javabean封装成list作为数据源.pdf

    在JasperReport中,使用JavaBean作为数据源不仅可以将数据以对象的形式进行封装,还能以集合的形式(例如List)来提供给报表工具。这为数据的管理提供了极大的便利。那么,如何将JavaBean封装成List并用作...

Global site tag (gtag.js) - Google Analytics