以下是接口的封装:
/*
* 2010-10-01
*
*/
package com.rs.eservice.eleave.report.generator;
import java.io.ByteArrayOutputStream;
import java.sql.Connection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* Jasper Report Generator Interface.
* 接口的封装;
* @author Administrator
* @version $Revision: 1.1 $ $Date:
*/
public interface ReportGenerator {
public static final String EBRIPAPPLICATION_REPORT="pack/java/demo/report/MyFirstReport";
public ByteArrayOutputStream generatePdf(String jasperFilePath,
HashMap map, Connection conn, ResourceBundle bundle, Locale locale);
public ByteArrayOutputStream generatePdf(String jasperFilePath,
HashMap map, Collection beanCollection, ResourceBundle bundle,
Locale locale);
}
以下是实现类,实现ReportGenerator 接口;
/*
* Created on ${date}
*
* @(#)$$Id: ReportGeneratorImpl.java,v 1.1 */
package pack.java.demo.report.generatorimpl;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
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.fill.JRFillParameter;
/**
* Jasper Report Generator Implementation.
*
* @author Administration */
public class ReportGeneratorImpl implements ReportGenerator {
static final transient Log logger = new Log(ReportGeneratorImpl.class);
public ByteArrayOutputStream generatePdf(String jasperFile, HashMap map,
Connection conn, ResourceBundle bundle, Locale locale) {
logger.info("Start generatePdf with db connection, jasper file: " + jasperFile);
final String endingMsg = "End generatePdf";
ByteArrayOutputStream out = new ByteArrayOutputStream();
if (map == null)
map = new HashMap();
if (locale != null)
map.put(JRFillParameter.REPORT_LOCALE, locale);
if(bundle !=null){
map.put(JRFillParameter.REPORT_RESOURCE_BUNDLE, bundle);
}
InputStream in = ReportGeneratorImpl.class.getClassLoader()
.getResourceAsStream(jasperFile + ".jrxml");
try {
logger.info("Compile jasper report");
JasperReport jreport = JasperCompileManager.compileReport(in);
jreport.setWhenNoDataType(JasperReport.WHEN_NO_DATA_TYPE_NO_PAGES);
logger.info("Fill jasper report");
JasperPrint print = JasperFillManager.fillReport(jreport, map, conn);
logger.info("Export report to PDF stream");
JasperExportManager.exportReportToPdfStream(print, out);
} catch (Exception e) {
logger.logExceptionCaught(e);
} finally {
try {
logger.info("Close input stream");
in.close();
logger.info("Close database connection");
conn.close();
} catch (Exception e) {
logger.logExceptionCaught(e);
}
logger.info(endingMsg);
}
return out;
}
public ByteArrayOutputStream generatePdf(String jasperFile, HashMap map,
Collection beanCollection, ResourceBundle bundle, Locale locale) {
logger.info("Start generatePdf with bean collection, jasper file: " + jasperFile);
final String endingMsg = "End generatePdf";
ByteArrayOutputStream out = new ByteArrayOutputStream();
if (map == null)
map = new HashMap();
if (locale != null)
map.put(JRFillParameter.REPORT_LOCALE, locale);
map.put(JRFillParameter.REPORT_RESOURCE_BUNDLE, bundle);
InputStream in = ReportGeneratorImpl.class.getClassLoader()
.getResourceAsStream(jasperFile + ".jrxml");
try {
logger.info("Compile Jasper report");
JasperReport jreport = JasperCompileManager.compileReport(in);
jreport.setWhenNoDataType(JasperReport.WHEN_NO_DATA_TYPE_NO_PAGES);
logger.info("Fill Jasper report");
JasperPrint print = JasperFillManager.fillReport(jreport, map,
new JRBeanCollectionDataSource(beanCollection));
logger.info("Export report to PDF stream");
JasperExportManager.exportReportToPdfStream(print, out);
} catch (JRException e) {
logger.logExceptionCaught(e);
} finally {
try {
logger.info("Close input stream");
in.close();
} catch (Exception e) {
logger.logExceptionCaught(e);
}
logger.info(endingMsg);
}
return out;
}
}
页面直接调用.生成:
HashMap map = new HashMap();
map.put("SUBREPORT_DIR","com/rs/eservice/eleave/"); //指定存放子报表的路径..
map.put("StuName".sttName); //参数.
ReportGenerator generator = (ReportGenerator) EServiceBeanFactory.getBean(ReportGenerator.BEAN_NAME);
ByteArrayOutputStream baos = generator.generatePdf("pack/java/demo/report/StudentReport", map,calendarReport,ResourceBundle.getBundle(
ReportGeneratorImpl.LEAVE_BALANCE_REPORT, Locale.US,
ReportGenerator.class.getClassLoader()),null);
try {
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setContentLength(baos.size());
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
out.close();
baos.close();
} catch (IOException e) {
logger.error("Exception caught: ", e);
ActionError err = null;
if (e.getCause() instanceof DatabaseException) {
err = new ActionError("sysmain.error.databaseException");
} else {
err = new ActionError("sysmain.error.unknownException");
}
errors.add(ActionErrors.GLOBAL_MESSAGE, err);
}