`
qtlkw
  • 浏览: 307262 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Jasper Util 类

    博客分类:
  • JAVA
 
阅读更多
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);
	}
    }
}
分享到:
评论

相关推荐

    jasper变量的表达式的问题

    Jasper 变量的表达式可以分为两类:一种是字段类型的变量,另一种是用户定义的变量。 字段类型的变量是 JasperReport 中预定义的变量,它们是基于 XML 语法定义的。例如,在 JasperReport 中,字段类型的变量可以...

    org.apache.jasper.JasperException: java.util.MissingResourceException 解决方案

    在Java Web开发中,我们经常会遇到“org.apache.jasper.JasperException: java.util.MissingResourceException”这样的错误。这个异常通常发生在尝试访问一个不存在的资源文件时,比如国际化(i18n)配置文件。本文...

    Jasper_Report用户手册

    Class net.sf.jasper.engine.util.JRLoader 3 主要的任务和过程 3.1 XML解析 3.2 编译报表设计(Report Designs) 3.3 Report Design 预览 3.4报表装填(Filling Report) 3.5 查看报表(Viewing Reports) 3.6 打印...

    JasperReports介绍.doc Jasper report

    编译时,可以通过设置系统属性`jasper.reports.compile.class.path`和`jasper.reports.compile.temp`来定制类路径和临时目录。 填充阶段,使用`JasperFillManager`类的`fillReportXXX()`方法,结合JDBC链接从数据库...

    Jasper Report用户手册(1.0)中文版

    Jasper Reports的核心API包含了一系列用于处理报表设计、编译、填充以及输出的类和接口。以下是一些关键类的详细介绍: 1. **`net.sf.jasper.engine.design.JasperDesign`** - **作用**:表示报表的设计模板。 - ...

    tomcat启动报错:java.util.zip.ZipException的解决方法

    这个异常是由Java的ZIP文件处理类抛出的,当尝试访问或读取ZIP文件时,如果发现文件头部的签名不正确,或者文件内容损坏,就会抛出此异常。在Tomcat中,这通常发生在Tomcat尝试展开WAR文件或加载包含的JAR文件时。 ...

    JasperReport浏览器输出PDF为空白页的解决方案

    如果XML语法有误,或者数据绑定不正确,可能导致生成的`test.jasper`预编译报告文件无效,从而在导出PDF时显示为空白。 2. **数据源问题**:报表需要数据来填充,如果数据源未正确设置或数据提供者(例如JavaBean、...

    Jasperreport导出PDF

    JasperPrint jasperPrint = JasperFillManager.fillReport("path/to/compiled/report.jasper", parameters, new JREmptyDataSource()); // 导出为PDF JasperExportManager.exportReportToPdfFile(jasperPrint, ...

    jasperreport excel报表打印

    - 通过`BaseHibernateDAO`类中的方法获取数据库连接。 - 使用Hibernate Session进行数据库查询操作。 - 将查询结果存储为List对象。 2. **报表设计**:利用jxl库控制Excel表格的显示效果。 - 创建Workbook对象...

    使用jasperReport实现动态表头.pdf

    这些方法可能涉及到对`JRDesignBand`和`JRDesignStaticText`等类的操作,以创建和设置静态文本元素。 在实际应用中,`sizeGroup`参数代表从数据库查询出来的尺码组数据,可以根据需要动态生成相应的表头。需要注意...

    jetty的main启动代码及相关jar包

    jasper-el.jar、jasper-jdt.jar、jasper.jar为jsp页面解析编译相关jar包。 jsp-api.jar为jstl相关jar包 tomcat-juli.jar启动时依赖的jar 其他问题: The absolute uri: ...

    jetty嵌入式服务器必须的jar包

    本人使用jetty版本为6.1.3,jar包总数为9个,来自jetty:commons-el-1.0.jar,jasper-compiler-5.5.15,jasper-compiler-jdt-5.5.15.jar,jasper-runtime-5.5.15.jar,jetty-6.1.3.jar,jetty-util-6.1.3.jar;...

    Java服务器Tld标签文件扫描器(含源代码)

    会输出提示信息“org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 ” 当然解决办法很简单,就是找到 Tomcat 服务器安装目录下的 conf 文件夹下的**catalina.properties...

    Tomcat8源代码

    在源代码中,Jasper的相关类位于`java/org/apache/jasper`目录下。 4. **连接器(Connector)** 连接器负责接收和发送HTTP请求。Tomcat 8支持两种协议:BIO(阻塞I/O)和NIO(非阻塞I/O)。`org.apache.coyote`包...

    ireport+jsp

    3. **调用jasper文件的页面**:这部分通常是指一个JSP页面(如示例中的`reports.jsp`),它的主要职责是从查询页面收集参数,并调用.jasper文件来生成最终的报表。 #### reports.jsp的作用及实现方式 - **动态接收...

    Tomcat研究之ClassLoader.pdf

    - `tomcat-util.jar`:Tomcat工具类,可能被某些Connector组件使用。 - `tomcat-warp.jar`:用于Apache Server集成。 5. **Shared ClassLoader**:加载所有Web应用程序可见的类库,但对Tomcat自身是不可见的。...

    apache-tomcat 源代码

    - 源代码中的`org.apache.catalina.util.ServerInfo.java`和`org.apache.tomcat.util.digester.Digester.java`类展示了如何解析和处理这些配置文件。 5. **网络通信**: - Coyote是Tomcat的网络连接器,负责处理...

    jasperreport5.5.0

    解决jasperreport在linux系统无法正常显示宋体的问题。...java报表抛出net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体' is not available to the JVM. See the Javadoc for more details.

    tomcat8.0.0-RC5源码官方

    源码中的`java/org/apache/jasper/JspC`类用于预编译JSP,而`java/org/apache/jasper/servlet/JspServletWrapper`则处理JSP的请求。 7. **安全管理**:Tomcat的安全特性,如用户认证、角色管理和访问控制,可以在`...

    ireport导出excel 部分源码

    首先,我们看到代码中导入了一系列的包,其中包括处理文件输入输出的类、反射相关的类、用于日志记录的类、处理Servlet请求响应的类以及与iReport相关的类。例如: ```java import java.io.File; import java.io....

Global site tag (gtag.js) - Google Analytics