0
点赞
收藏
分享

微信扫一扫

生成pdf report 接口的封装与实现类.


以下是接口的封装:

/*
 * 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);
		}

 

举报

相关推荐

0 条评论