Ireport子報表基礎
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();
}
}