Ireport 子报表创建及细节问题

本文介绍如何使用IReport实现子报表的设计与应用,包括创建JavaBean、绘制模板、配置子报表及导出PDF等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ireport子报表基础

第一步:先在MyEclipse里创建项目和该有的JAVA文件,目 录如下:

 ProvinceBean.java内容如下:

CityBean.java内容如下:

 ChildServlet.java内容如下:


第二步:通过IReport来画模板,文件如下:

 其中cities属性的类型是ArrayList,但是在选择类型的时候没有这个类型,所以要自己手动改:



第三步,建立子报表:




会弹出一个子报表的窗体,在这个窗体里就写入对应有子实体的字段即可(CityBean.java):

返回到主表里,对子报表的属性进行设置:

\

表达式全部内容:new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{cities})

第四步:编译文件
先编译子报表的文件,再编译主报表:
会在IReport的根目录下生成:main.jasper、main_sub.jasper 两个文件;
把这两个文件复制到Tomcat对应这个项目下的指定目 录下,即可:
(D:\WorkSoft\Tomcat-5.5\webapps\ireportdemo\WEB-INF\classes\zlq\test\ireport\child)

========================说明结束=========================

下面我把代码补齐,直接复制就可以用:


ProvinceBean.java

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;
}

public int getCityCount() {
if (this.cities != null)
return this.cities.size();
else
return 0;
}
}

CityBean.java


public class CityBean {
private String cityName;    //城市名

public String getCityName() {
return cityName;
}

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

ChildServlet.java

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 ChildServlet extends HttpServlet {

public ChildServlet() {
super();
}

public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

/**
* 把JavaBean里的数据转化成JRDataSource
*/
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);
city = new CityBean();
city.setCityName("扬州");
cities.add(city);

province.setCities(cities);
provinces.add(province);

return new JRBeanCollectionDataSource(provinces);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String root_path = this.getServletContext().getRealPath("/");
root_path = root_path.replace('\\', '/');
String reportFilePath = root_path+ "WEB-INF/classes/zlq/test/ireport/child/main.jasper";
JRDataSource dataSource = this.createDataSource();

Map<String, String> parameters = new HashMap<String, String>();
parameters.put("SUBREPORT_DIR", root_path+ "WEB-INF/classes/zlq/test/ireport/child/");
JasperReport report=(JasperReport)JRLoader.loadObject(reportFilePath);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);
OutputStream ouputStream = response.getOutputStream();  
response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");  
response.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 e) {
e.printStackTrace();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值