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

Jasper ReportUtils

    博客分类:
  • JAVA
 
阅读更多
import java.io.File;
import java.io.IOException;   
import java.io.OutputStream;   
import java.io.PrintWriter;   
import java.net.URLEncoder;   
import java.util.List;   
import java.util.Map;   
  
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
import javax.servlet.http.HttpSession;   
  
import net.sf.jasperreports.engine.JRAbstractExporter;   
import net.sf.jasperreports.engine.JRDataSource;   
import net.sf.jasperreports.engine.JRException;   
import net.sf.jasperreports.engine.JRExporterParameter;   
import net.sf.jasperreports.engine.JasperCompileManager;   
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.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.JRRtfExporter;   
import net.sf.jasperreports.engine.export.JRXmlExporter;   
import net.sf.jasperreports.engine.util.JRLoader;   
import net.sf.jasperreports.j2ee.servlets.ImageServlet;   
  
/**  
 * 使用jasperReport做报表时的工具支持类.有两个用途,生成jasperPrint对象,和设置导出时的session  
 */  
public class ReportUtils {   
    private HttpServletRequest request;   
    private HttpServletResponse response;   
//    private HttpSession session;   
  
    /**  
     * 在其它web环境下构造此工具类对象  
     *   
     * @param request  
     *            request请求对象  
     */  
    public ReportUtils(HttpServletRequest request) {   
        this.request = request;   
//        this.session = request.getSession();   
    }   
  
    public ReportUtils(HttpServletResponse response) {   
        this.response = response;   
    }   
  
    public ReportUtils(HttpServletRequest request, HttpServletResponse response) {   
        this(request);   
        this.response = response;   
    }   
  
    /**  
     * 获得JasperPrint对象;自定义填充报表时的parameter和dataSource. 参数说明和动态表头的用法参考上一方法  
     *   
     * @param filePath  
     * @param parameter  
     * @param dataSource  
     * @param sizeGroup  
     * @return  
     */  
    public JasperPrint getJasperPrint(String filePath, Map parameter,   
            JRDataSource dataSource) throws JRException {   
        JasperReport jasperReport = null;   
        try {   
            jasperReport = (JasperReport) JRLoader.loadObject(new File(filePath));   
            return JasperFillManager.fillReport(jasperReport, parameter,   
                    dataSource);   
        } catch (JRException e) {   
            e.printStackTrace();   
        }   
        return null;   
    }   
  
    /**  
     * 通过传入List类型数据源获取JasperPrint实例  
     *   
     * @param filePath  
     *            jasper路径  
     * @param parameter  
     * @param list  
     * @return  
     * @throws JRException  
     */  
    public JasperPrint getPrintWithBeanList(String filePath, Map parameter,   
            List list) throws JRException {   
        JRDataSource dataSource = new JRBeanCollectionDataSource(list);   
        return getJasperPrint(filePath, parameter, dataSource);   
    }   
  
    /**  
     * 传入类型,获取输出器  
     *   
     * @param docType  
     * @return  
     */  
    public JRAbstractExporter getJRExporter(DocType docType) {   
        JRAbstractExporter exporter = null;   
        switch (docType) {   
        case PDF:   
            exporter = new JRPdfExporter();   
            break;   
        case HTML:   
            exporter = new JRHtmlExporter();   
            break;   
        case XLS:   
            exporter = new JExcelApiExporter();   
            break;   
        case XML:   
            exporter = new JRXmlExporter();   
            break;   
        case RTF:   
            exporter = new JRRtfExporter();   
            break;   
        }   
        return exporter;   
    }   
  
//    public void setAttrToPage(JasperPrint jasperPrint, String report_fileName,   
//            String report_type) {
//        request.setAttribute("REPORT_JASPERPRINT", jasperPrint);   
//        request.setAttribute("REPORT_FILENAME", report_fileName);   
//        request.setAttribute("REPORT_TYPE", report_type);   
//    }   
  
    /**  
     * 定义了报表输出类型,固定了可输出类型  
     *   
     * @author Administrator  
     *   
     */  
    public static enum DocType {   
        PDF, HTML, XLS, XML, RTF   
    }   
  
    /**  
     * 编译报表模板文件jaxml,生成jasper二进制文件  
     *   
     * @param jaxmlPath  
     * @param jasperPath  
     * @throws JRException  
     */  
    public void complieJaxml(String jaxmlPath, String jasperPath)   
            throws JRException {   
        JasperCompileManager.compileReportToFile(jaxmlPath, jasperPath);   
    }   
  
    /**  
     * 输出PDF 使用此方法,必须预先注入response  
     *   
     * @param jasperPath  
     * @param params  
     * @param sourceList  
     * @param fileName  
     * @throws JRException  
     * @throws IOException  
     * @throws ServletException  
     */  
    public void servletExportPDF(String jasperPath, Map params,   
            List sourceList, String fileName) throws JRException, IOException,   
            ServletException {   
        servletExportDocument(DocType.PDF, jasperPath, params, sourceList,   
                fileName);   
    }   
  
    /**  
     * 输出html静态页面,必须注入request和response  
     *   
     * @param jasperPath  
     * @param params  
     * @param sourceList  
     * @param imageUrl  
     *            报表文件使用的图片路径,比如 ../servlets/image?image=  
     * @throws JRException  
     * @throws IOException  
     * @throws ServletException  
     */  
    public void servletExportHTML(String jasperPath, Map params,   
            List sourceList, String imageUrl) throws JRException, IOException,   
            ServletException {   
        response.setContentType("text/html");   
        response.setCharacterEncoding("UTF-8");   
        JRAbstractExporter exporter = getJRExporter(DocType.HTML);   
  
        JasperPrint jasperPrint = getPrintWithBeanList(jasperPath, params,   
                sourceList);   
  
        request.setAttribute(   
                ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,   
                jasperPrint);   
  
        PrintWriter out = response.getWriter();   
  
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);   
        exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);   
        exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageUrl);   
        exporter.exportReport();   
    }   
  
    /**  
     * 输出Excel报表文件  
     *   
     * @param jasperPath  
     * @param params  
     * @param sourceList  
     * @param fileName  
     * @throws JRException  
     * @throws IOException  
     * @throws ServletException  
     */  
    public void servletExportExcel(String jasperPath, Map params,   
            List sourceList, String fileName) throws JRException, IOException,   
            ServletException {   
        servletExportDocument(DocType.XLS, jasperPath, params, sourceList,   
                fileName);   
        // 要想获得更好的视觉效果,可以添加以下代码   
        // // exporter.setParameter(   
        // // JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,   
        // // Boolean.TRUE); // 删除记录最下面的空行   
        // //   
        // exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,   
        // // Boolean.FALSE);// 删除多余的ColumnHeader   
        // //   
        // exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND   
        // ,   
        // // Boolean.FALSE);// 显示边框   
    }   
  
    /**  
     * 生成不同格式报表文档  
     *   
     * @param docType  
     *            文档类型  
     * @param jasperPath  
     * @param params  
     * @param sourceList  
     * @param fileName  
     * @throws JRException  
     * @throws IOException  
     * @throws ServletException  
     */  
    public void servletExportDocument(DocType docType, String jasperPath,   
            Map params, List sourceList, String fileName) throws JRException,   
            IOException, ServletException {   
  
        if (docType == DocType.HTML) {   
            servletExportHTML(jasperPath, params, sourceList, fileName);   
            return;   
        }   
  
        JRAbstractExporter exporter = getJRExporter(docType);   
        // 获取后缀   
        String ext = docType.toString().toLowerCase();   
  
        if (!fileName.toLowerCase().endsWith(ext)) {   
            fileName += "." + ext;   
        }   
        // 判断资源类型   
        String contentType = "application/";   
        if (ext.equals("xls")) {   
            ext = "excel";   
        } else if (ext.equals("xml")) {   
            contentType = "text/";   
        }   
        contentType += ext;   
  
        response.setContentType(contentType);   
        response.setHeader("Content-Disposition", "attachment; filename=\""  
                + URLEncoder.encode(fileName, "UTF-8") + "\"");   
  
        exporter.setParameter(JRExporterParameter.JASPER_PRINT,   
                getPrintWithBeanList(jasperPath, params, sourceList));   
  
        OutputStream ouputStream = response.getOutputStream();   
  
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);   
        try {   
            exporter.exportReport();   
        } catch (JRException e) {   
            throw new ServletException(e);   
        } finally {   
            if (ouputStream != null) {   
                try {   
                    ouputStream.close();   
                } catch (IOException ex) {   
                }   
            }   
        }   
    }   
}


一、导出报表到html

   
InputStream inputStream = ServletActionContext.getServletContext().getResourceAsStream("/report/xxx.jasper");  
    Collection<xxxo> data=xxxService.getData(params);  
    Map<Object,Object> map=xxxService.getMap(startTime, endTime);  
      
    JRBeanCollectionDataSource dataSource=new JRBeanCollectionDataSource(data);  
    //填充报表  
    JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream,map, dataSource);  
    //设置输出类型及报表的内置参数  
    response.setContentType("text/html");  
    OutputStream outputStream=response.getOutputStream();  
    ReportXHtmlExporter htmlExporter=new ReportXHtmlExporter(page,jasperPrint);  
    request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint);  
    htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);  
    htmlExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);  
    if(jasperPrint.getPages().size()>1){  
        htmlExporter.setParameter(JRExporterParameter.PAGE_INDEX, 1);  
    }  
    htmlExporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);  
    htmlExporter.exportReport();  
    outputStream.flush();  
    outputStream.close();


二、导出到PDF

   
OutputStream outputStream=response.getOutputStream();  
    File reportFile = new File(ServletActionContext.getServletContext().getRealPath("/report/xxx.jasper"));  
    if (!reportFile.exists()){  
        throw new JRRuntimeException("File dispatch_report.jasper not found.");  
    }  
    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());  
      
    //javabean数据源  
    Collection<xxx> data=xxxService.getData(params);  
    Map<Object,Object> map=xxxService.getMap(startTime, endTime);  
    JRBeanCollectionDataSource dataSource=new JRBeanCollectionDataSource(data);  
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,map, dataSource);  
      
    JRPdfExporter pdfExporter=new JRPdfExporter();  
    pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);  
    pdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);   
    response.setContentType("application/pdf");  
    response.setCharacterEncoding("UTF-8");    
    response.setHeader("Content-Disposition", "attachment; filename=\""  + URLEncoder.encode("XXX报表", "UTF-8") + ".pdf\"");   
    pdfExporter.exportReport();  
    outputStream.flush();  
    outputStream.close();


三、web.xml配置
   
<!--JasperReport显示图片的,象素图片-->  
        <servlet>  
            <servlet-name>ImageServlet</servlet-name>  
            <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>  
        </servlet>  
        <servlet-mapping>  
            <servlet-name>ImageServlet</servlet-name>  
            <!-- /report/image路径,report表示struts中的表空间(具体就看url请求的路径),image表示Action文件里配置image?image=问号前的image相同-->  
            <url-pattern>/report/image</url-pattern>  
        </servlet-mapping>
 
分享到:
评论

相关推荐

    jasper-1.900.1.tar.gz

    《Jasper库1.900.1版的深度解析》 Jasper,作为一个开源的JPEG 2000编解码库,是处理JPEG 2000图像格式的关键工具。这个名为"jasper-1.900.1.tar.gz"的压缩包包含了Jasper库的1.900.1版本,它提供了对JPEG 2000标准...

    中国联通物联网Jasper平台介绍

    中国联通物联网Jasper平台是一款专为实现企业物联网(IoT)高效运营而设计的综合性解决方案。该平台的核心功能和特点主要包括以下几个方面: 1. **全面的设备管理**:Jasper平台支持大规模的物联网设备连接和管理,...

    Jasper报表官方文档

    Jasper报表是一款强大的开源报表工具,它允许开发者创建复杂的数据可视化和打印输出。这份官方文档集合包含了关于Jasper的核心组件的详细指南,如iReport、JasperServer以及JasperReports,确保用户能够利用最新的...

    最全jasper相关jar包

    里面有jasper.jar,jasper-compiler.jar,jasper-compiler-jdt-5.5.15.jar,jasper-el.jar,jasper-jdt.jar,jasper-runtime.jar

    org.apache.jasper 的jar包下载

    Apache Jasper 是一个开源项目,它是Apache Tomcat服务器的一部分,用于处理JSP(JavaServer Pages)技术。JSP是Java平台上用于创建动态Web内容的一种方式,它允许开发人员将静态HTML与动态Java代码相结合,以生成...

    JasperServer中文版

    JasperServer中文版是一款专为满足中国用户需求而设计的开源商业智能(BI)平台,它基于JasperReports项目,提供了丰富的报表和数据分析功能。这个资源包包含了JasperServer界面的中文语言翻译,使得中国用户在使用...

    jasper.jar jasper.jar

    jasper.jar jasper.jar

    jasper-runtime.jar jasper-compiler.jar

    这个过程中,jasper-compiler.jar会解析JSP文件中的Java代码和JSP元素,确保这些元素能够与Servlet API正确交互,生成可以被Java虚拟机执行的代码。这是JSP页面能够动态生成内容并展示给用户的关键所在。Jasper...

    jasper-1.900.1

    《jasper-1.900.1:深入解析开源报表引擎》 jasper-1.900.1是一款广泛应用于商业智能领域的开源报表引擎,它的存在为开发者提供了强大的数据可视化工具,使得生成复杂、动态的报表变得简单易行。jasper-1.900.1版本...

    jasper变量的表达式的问题

    jasper 变量的表达式的问题 Jasper 变量的表达式是 JasperReport 中一个重要的概念,它允许开发者在报表中定义和使用变量,以便于实现复杂的业务逻辑。 Jasper 变量的表达式可以分为两类:一种是字段类型的变量,...

    jasper-1.900.1.zip

    《图像压缩技术:深入解析jasper-1.900.1开源库》 在信息技术领域,图像处理和压缩技术是不可或缺的一部分。本文将详细探讨一个名为“jasper-1.900.1”的开源库,它包含了各种图像格式的编解码源码,对于开发者来说...

    jsp调用jasper

    jsp调用jasper jsp 调用 jasper 是一种常见的报表生成方式,jasper 报表工具可以与 jsp 集成,以生成动态的报表。下面是 jsp 调用 jasper 的一些关键知识点: 1. iReport 设置默认语言:在 iReport 中,语言设置...

    jasper相关jar包

    相关的Jasper的jar包。里面有jasper.jar,jasper-compiler.jar,jasper-compiler-jdt-5.5.15.jar,jasper-el.jar,jasper-jdt.jar,jasper-runtime.jar

    Jasper

    【Jasper】是一款知名的开源报表工具,主要用于生成各种复杂的企业级报表。它的全名是JasperReports,由Talend公司维护。Jasper的核心功能包括设计、生成、展示以及打印报表,支持多种数据源,如数据库、CSV文件、...

    Jasper_Report用户手册

    Jasper Report用户手册 version1.0 1 简介 2 API概览 Class net.sf.jasper.engine.design.JasperDesign Class net.sf.jasper.engine.JasperReport Class net.sf.jasper.engine.JasperCompileManager Class ...

    jasper怎么构建报表的详细例子

    在本篇文章中,我们将深入探讨如何使用Jasper来构建各种类型的报表,包括普通报表、分组报表、自定义报表、图形报表以及图形表格混合的报表。 首先,我们从基础开始——普通报表。JasperReport的基础在于JRXML文件...

    jasper 的 jar 文件

    Jasper 是一个强大的报告生成工具,它被广泛用于Java应用程序中,尤其是与iReport结合使用时,能够方便地设计和生成各种复杂的报表。jasper的jar文件是JasperReport库的核心组成部分,它包含了运行jasper报表所需的...

    jasper-1.700.21 源代码

    《深入解析jasper-1.700.21开源库源代码》 JPEG2000是一种先进的图像编码标准,由国际电信联盟(ITU)推荐,它在图像压缩领域有着广泛的应用。jasper库是专门为JPEG2000提供支持的开源软件,其最新版本jasper-1.700...

Global site tag (gtag.js) - Google Analytics