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();
}

}
}

iReport报表生成html,pdf,xls,word工具类的更多相关文章

  1. pdf转word工具

    pdf转word工具及安装:http://blog.sina.com.cn/s/blog_6172011c0102vxir.html pdf去加密:http://www.downxia.com/dow ...

  2. 真正免费,不限页数的PDF转Word工具

    真正免费,不限页数的PDF转Word工具 我们知道PDF转Word工具非常多,但大部分都有各种限制,限大小,限页数,加水印等等. 这其中绝大部分其实并不能做到格式完全一样,遇到图片更是直接傻了. 我们 ...

  3. WPS PDF转Word工具

    WPS PDF转Word工具链接:https://pan.baidu.com/s/1Ijh5MSBWZtsXsm05_6yYvw 提取码:gufy  下载运行后会解压到"D:\Program ...

  4. PDF转WORD工具 Solid Converter PDF v9.1.6744

    Solid Converter PDF中文破解版(pdf转换成word转换器)是一款功能强大的PDF格式转换软件.Solid Converter PDF允许用户将PDF转换为Word(PDF to W ...

  5. WordUtil java导出word工具类

    import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedWriter ...

  6. PDF转WORD工具推荐:迅捷PDF转换器6.8版

    迅捷PDF转换器是一款功能强大的pdf转换成word转换器软件.它不仅支持pdf转换成word,word转pdf,还可以实现excel,ppt,jpg与pdf文件的一键式转换.有了它,你可以很轻松转换 ...

  7. Java借助itext pdf生成固定格式pdf的模板工具类

    这里是标题区域 这里是副标题1: 副标题的内容 这里是副标题2: 这里是副标题2的内容 这里是副标题3: 这里是副标题3的内容 序号 表头1 复合表头 表头2 子表头1 子表头2 子表头3 1 居左内 ...

  8. pdf 转word 工具

    在线转换,每天有次数限制,但是很强大: https://smallpdf.com/cn 可以使用python 写代码来转换文档 参考下面博客连接 https://blog.csdn.net/Dontl ...

  9. Jacob工具类使用文件互转服务 word转html html转excel word转pdf excel转pdf ppt转pdf

    前提条件  必须安装MS office 1.jdk使用jdk1.8 2.jacob.dll放在..\jdk1.8\jre\bin目录下 3.eclipse的jre版本要和jdk一致,window-&g ...

随机推荐

  1. 运输层3——传输控制协议TCP概述

    目录 1. TCP最主要的特点 2. TCP的连接 3. socket在不同场景中的含义 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户 ...

  2. 剑指Offer(二十九):最小的K个数

    剑指Offer(二十九):最小的K个数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...

  3. Codeforces 1206 D - Shortest Cycle

    D - Shortest Cycle 思路:n大于某个值肯定有个三元环,否则floyd找最小环. 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) ...

  4. 推荐系统(5)---大量项目topk近邻相似度

    Kd树+BBF(最邻近.次邻近查询)Python实现 kd树和BBF算法 精确Top-K检索及其加速方法探讨

  5. 【CRT】中国剩余定理简介

    中国剩余定理(CRT) 中国剩余定理出自中国的某本古书,似乎是孙子兵法?(雾 其中有这样一个问题: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 即,对于这样一个方程组: \[ ...

  6. 《Hello--world团队》第三次作业:团队项目的原型设计

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验七 团队作业3:团队项目原型设计与开发 团队名称 <hello--world团 ...

  7. python_面向对象——封装

    1.私有属性 class Person(object): def __init__(self,name,age): self.name = name self.age = age #实例属性 self ...

  8. java中的volatile变量

    同步与线程间通信: 通信 通信是指消息在两条线程之间传递. 既然要传递消息,那接收线程 和 发送线程之间必须要有个先后关系,此时就需要用到同步.通信和同步是相辅相成的. 同步 同步是指,控制多条线程之 ...

  9. vscode 输出面板字符编码问题

    默认的输出中文会显示成乱码,需要在vscode内部的终端中输入 chcp 65001 缺点是需要每次打开vscode进行激活,另一种方式是在vscode的首选项中进行配置: "termina ...

  10. python - pycharm 配置虚拟环境出现的中文命名问题

    说一个困扰我很久的问题,当使用 pycharm 配置新的虚拟环境想要与之前的环境隔离的时候,正常的点击 New Project 创建项目时,不勾选 Inherit global site-packag ...