Jasper Util 类

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.Writer;
import java.sql.Connection;
import java.util.Map;

import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRException;
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.export.JExcelApiExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;

import org.apache.log4j.Logger;

import com.ssc.cba.report.ReportClient;
import com.ssc.cba.service.util.DBUtil;
import com.ssc.faw.util.GenException;

public class JasperReportUtil
{
private static Logger logger = Logger.getLogger(JasperReportUtil.class);

/**
* export report
*
* @param jasperPrint
* @param param
* @return
* @throws Exception
*/
public byte[] exportReport(JasperPrint jasperPrint, Map<String, Object> param) throws Exception
{
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
JRAbstractExporter exporter = fillJasperPrint(jasperPrint, param);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);

logger.info("[JasperReportUtil - exportReport] Exporting report starting...");
long startTime = System.currentTimeMillis();
exporter.exportReport();
long endTime = System.currentTimeMillis();
logger.info("[JasperReportUtil - exportReport] Exporting report end. It takes " + (endTime - startTime) + " ms");
byte[] bytes = oStream.toByteArray();
return bytes;
}

/**
* fill the data into jasper print object
*
* @param jasperPrint
* @param param
* @return
* @throws Exception
*/
public static JRAbstractExporter fillJasperPrint(JasperPrint jasperPrint, Map<String, Object> param) throws Exception
{
try
{
String mode = (String) param.get(ReportClient.REPORT_TYPE);
logger.info("[JasperReportUtil - fillJasperPrint] The type of exported report is " + mode);
JRAbstractExporter exporter = getJRExporter(mode);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
return exporter;
}
catch (Exception e)
{
logger.error("[JasperReportUtil - fillJasperPrint] Error occurs when filling Jasper report: " + e);
throw new GenException(e);
}
}

/**
* export report
*
* @param param
* @return
* @throws GenException
*/
public byte[] exportReport(Map<String, Object> param) throws GenException
{
byte[] bytes = null;
Connection conn = null;
try
{
conn = DBUtil.getConnection();
JasperPrint jasperPrint = getJasperPrint(param, conn);
bytes = exportReport(jasperPrint, param);
}
catch (Exception e)
{
logger.error("[JasperReportUtil - exportReport] Error occurs when exporting Jasper report: " + e);
throw new GenException(e);
}
finally
{
DBUtil.closeConnection(conn);
}
return bytes;
}

/**
* retrieve the Jasper exporter
*
* @param docType
* @return
*/
public static JRAbstractExporter getJRExporter(String exportType) throws GenException
{
JRAbstractExporter exporter = null;

if (ReportClient.EXPORT_PDF.equalsIgnoreCase(exportType))
{
exporter = new JRPdfExporter();
configurePdfExporter(exporter);
}
else if (ReportClient.EXPORT_EXCEL.equalsIgnoreCase(exportType))
{
exporter = new JExcelApiExporter();
configureXlsExporter(exporter);
}
else if (ReportClient.EXPORT_HTML.equalsIgnoreCase(exportType))
{
exporter = new JRHtmlExporter();
configureHtmlExporter(exporter);

}
else
{
throw new GenException("[JasperReportUtil - getJRExporter] The type of exported Jasper report doesn't exist!");
}

return exporter;
}

private static void configurePdfExporter(JRAbstractExporter exporter)
{
exporter.setParameter(JRPdfExporterParameter.CHARACTER_ENCODING, ReportClient.CHARACTER_ENCODING);
}

private static void configureXlsExporter(JRAbstractExporter exporter)
{
exporter.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, ReportClient.CHARACTER_ENCODING);
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
}

private static void configureHtmlExporter(JRAbstractExporter exporter)
{
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
exporter.setParameter(JRHtmlExporterParameter.ZOOM_RATIO, Float.parseFloat("1.2"));
exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, ReportClient.CHARACTER_ENCODING);
}

/**
* retrieve the Jasper Print Object
*
* @param param
* @param conn
* @return
* @throws GenException
*/
public static JasperPrint getJasperPrint(Map<String, Object> param, Connection conn) throws GenException
{
JasperPrint jasperPrint = null;
try
{
String jasperFile = (String) param.get(ReportClient.REPORT_NAME);
if (jasperFile == null)
{
throw new GenException("[JasperReportUtil - getJasperPrint] The Jasper report template can't be found out!");
}
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(new File(jasperFile));
jasperPrint = JasperFillManager.fillReport(jasperReport, param, conn);
}
catch (JRException e)
{
logger.error("[JasperReportUtil - getJasperPrint] Error occurs when retrieving JasperPrint Object: " + e);
throw new GenException(e);
}
return jasperPrint;
}

/**
* preview html jasper report
*
* @param param
* @param writer
* @throws GenException
*/
public static void previewHtmlReport(Map<String, Object> param, Writer writer) throws GenException
{
Connection conn = null;
try
{
conn = DBUtil.getConnection();
JasperPrint jasperPrint = JasperReportUtil.getJasperPrint(param, conn);
JRAbstractExporter exporter = JasperReportUtil.fillJasperPrint(jasperPrint, param);
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_WRITER, writer);
logger.info("[JasperReportUtil - previewHtmlReport] Preview report starting...");
long startTime = System.currentTimeMillis();
exporter.exportReport();
long endTime = System.currentTimeMillis();
logger.info("[JasperReportUtil - previewHtmlReport] Preview report end. It takes " + (endTime - startTime) + " ms");
}
catch (Exception e)
{
logger.error("[JasperReportUtil - previewHtmlReport] Error occurs when previewing Html Report: " + e);
throw new GenException(e);
}
finally
{
DBUtil.closeConnection(conn);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值