zoukankan      html  css  js  c++  java
  • iReport报表生成html,pdf,xls,word工具类

    package com.report;

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;

    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.sql.DataSource;

    import net.sf.jasperreports.engine.JRAbstractExporter;
    import net.sf.jasperreports.engine.JRExporterParameter;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperRunManager;
    import net.sf.jasperreports.engine.export.JRHtmlExporter;
    import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
    import net.sf.jasperreports.engine.export.JRXlsExporter;
    import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
    import net.sf.jasperreports.engine.export.ooxml.JRDocxExporter;
    import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;
    import net.sf.jasperreports.j2ee.servlets.ImageServlet;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.struts2.ServletActionContext;

    /* import java.util;
    <%@page import="java.io.File"%>
    <%@page import="java.net.URLDecoder"%>
    <%@page import="java.sql.Connection"%>
    <%@page import="javax.sql.DataSource"%>
    <%@page import="com.report.ReportUtil"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <%@page import="com.zhiwei.core.util.AppUtil"%>
    <%@page import="java.io.ByteArrayOutputStream"%>
    <%@page import="net.sf.jasperreports.j2ee.servlets.*"%>
    <%@page import="net.sf.jasperreports.engine.JasperPrint"%>
    <%@page import="net.sf.jasperreports.engine.JasperRunManager"%>
    <%@page import="net.sf.jasperreports.engine.JasperFillManager"%>
    <%@page import="net.sf.jasperreports.engine.JRAbstractExporter"%>
    <%@page import="net.sf.jasperreports.engine.JRExporterParameter"%>
    <%@page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>
    <%@page import="org.apache.lucene.store.jdbc.support.JdbcTemplate"%>
    <%@page import="net.sf.jasperreports.engine.export.JRHtmlExporter"%>
    <%@page import="net.sf.jasperreports.engine.export.ooxml.JRDocxExporter"%>
    <%@page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>
    <%@page import="net.sf.jasperreports.engine.export.JRHtmlExporterParameter"%>*/

    import com.thirdPayInteface.SinaPay.SinaPayIntefaceUtil;
    import com.zhiwei.core.util.AppUtil;

    /**
    * 初始化加载report_config.properties
    * 该文件配置的是系统中所有的报表信息key=报表名称
    * @author zhangcb
    *
    */
    @SuppressWarnings("unchecked")
    public class ReportUtil {

    private static Log logger=LogFactory.getLog(SinaPayIntefaceUtil.class);

    public static Map<String,String> getReportPro(){
    Map<String,String> reportConfigMap=new HashMap<String,String>();
    try{
    Properties props = new Properties();
    InputStream in = ReportUtil.class.getResourceAsStream("/com/report/report_config.properties");
    props.load(in);
    Iterator it= props.keySet().iterator();
    while(it.hasNext()){
    String key=(String)it.next();
    reportConfigMap.put(key, props.getProperty(key));
    }
    return reportConfigMap;
    }catch(Exception e){
    e.printStackTrace();
    logger.error(e.getMessage());
    return null;
    }
    }


    public static void createReportHtml(Map<String,String> map,String reportKey,String reportType,HttpServletRequest request){
    HttpServletResponse response = ServletActionContext.getResponse();
    //报表类型
    Map<String,String> configMap = ReportUtil.getReportPro();
    String rootPath = ReportUtil.class.getResource("").getPath().replaceAll("%20"," ");
    String reportPath=configMap.get(reportKey);
    String[] str=reportPath.split("/");
    String reportName=str[str.length-1];
    try {
    DataSource dataSource = (DataSource) AppUtil.getBean("dataSource");
    Connection conn = dataSource.getConnection();
    File fullPath = new File(rootPath+reportPath+".jasper");
    ServletOutputStream ouputStream = response.getOutputStream();
    //将解析完的参数传入报表模板中并生成报表
    //如果接收到的参数为pdf类型的话,则生成pdf的报表
    if ("pdf".equals(reportType)) {
    byte[] bytes = JasperRunManager.runReportToPdf(fullPath.getPath(), map, conn);
    //设置报表生成类型为PDF
    response.setContentType("application/pdf;charset=utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentLength(bytes.length);
    reportName = reportName+".pdf";
    response.setHeader( "Content-Disposition", "attachment;filename=" + new String( reportName.getBytes("gb2312"), "ISO8859-1" ) );
    ouputStream.write(bytes, 0, bytes.length);
    } else if ("xls".equals(reportType)) {
    //如果接受到的参数为xls(excel类型)的话,则生成xls类型的报表
    JRXlsExporter exporter = new JRXlsExporter();
    ByteArrayOutputStream oStream = new ByteArrayOutputStream();
    JasperPrint jasperPrint = JasperFillManager.fillReport(fullPath.getPath(), map, conn);
    exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,oStream);
    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);
    exporter.exportReport();
    byte[] bytes = oStream.toByteArray();
    //设置报表生成类型为excel
    response.setContentType("application/vnd.ms-excel");
    response.setCharacterEncoding("utf-8");
    request.setCharacterEncoding("utf-8");
    response.setContentLength(bytes.length);
    reportName = reportName+".xls";
    response.setHeader( "Content-Disposition", "attachment;filename=" + new String( reportName.getBytes("gb2312"), "ISO8859-1" ) );
    ouputStream.write(bytes, 0, bytes.length);
    } else if("word".equals(reportType)){
    reportName = reportName+".docx";
    JRAbstractExporter exporter = new JRDocxExporter();
    List<?> jasperPrintList = (List<?>)request.getSession().getAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_LIST_SESSION_ATTRIBUTE);
    exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
    response.setContentType("application/msword;charset=utf-8");
    response.setHeader( "Content-Disposition", "attachment;filename=" + new String( reportName.getBytes("utf-8"), "ISO8859-1" ) );
    request.setCharacterEncoding("utf-8");
    exporter.exportReport();
    }else{
    //否则生成html类型的报表
    JRHtmlExporter exporter = new JRHtmlExporter();
    ByteArrayOutputStream oStream = new ByteArrayOutputStream();
    JasperPrint jasperPrint = JasperFillManager.fillReport(fullPath.getPath(), map, conn);
    //这里也是解决HTML报表图片不显示的
    request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint);
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);
    //下面这一句是解决HTML报表图片不显示的问题,注意URI得写对,这里URI是指jasper文件所在的目录
    exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"jasper?"+"time="+(new Date()).toString()+"&image=");
    exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT,jasperPrint);
    exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING,"utf-8");
    exporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM, oStream);
    exporter.exportReport();
    byte[] bytes = oStream.toByteArray();
    //设置报表生成类型的html
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentLength(bytes.length);
    response.setStatus(200);
    ouputStream.write(bytes, 0, bytes.length);
    }
    ouputStream.flush();
    ouputStream.close();
    conn.close();

    } catch (Exception ex) {
    ex.printStackTrace();
    }

    }
    }

  • 相关阅读:
    Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上
    异步FIFO结构及FPGA设计 跨时钟域设计
    FPGA管脚分配需要考虑的因素
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 上篇)
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 下篇)
    中国通信简史 (下)
    谈谈德国大学的电子专业
    中国通信简史 (上)
    Verilog学习笔记
    Verilog非阻塞赋值的仿真/综合问题(Nonblocking Assignments in Verilog Synthesis) 下
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10188982.html
Copyright © 2011-2022 走看看