现在的位置: 首页 > 综合 > 正文

jasper报表工具类

2018年02月09日 ⁄ 综合 ⁄ 共 8385字 ⁄ 字号 评论关闭

来源于:群共享(152281263)

package com.hihsoft.sso.business.report.util;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
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.util.JRLoader;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.hihsoft.baseclass.service.BaseService;
import com.hihsoft.sso.business.report.dataSource.ReportDataSource;

/**
 * jasper报表工具类
 */
public class JasperUtil {
/**

* 加载报表,获取JasperReport对象.<br>
* 方法名:jasperLoad方法.<br>
* @param jaserPath   报表编译文件的路径
* @param jrxmlPath   报表源文件 的路径
* @return
*/
@SuppressWarnings("deprecation")
public static JasperReport jasperLoad(HttpServletRequest request,String jaserPath, String jrxmlPath)throws Exception {
if (!StringUtil.empty(jaserPath)) {
String jasperPath = request.getRealPath(jaserPath);
File file = new File(jasperPath);
if (file.exists()) {
return (JasperReport) JRLoader.loadObject(jasperPath);
}
}
if (!StringUtil.empty(jrxmlPath)) {
// 文件的路劲
String path =  request.getRealPath(jrxmlPath);
return JasperCompileManager.compileReport(path);
}
return null;
}
/**

*生成报表页面(HTML).<br>
*方法名:jasperToHtml方法.<br>
*@param request  请求
*@param response 响应
*@param map  查询列表参数
*@param ju    DataSource
*@param pageindex  当前页数
*@param jaserPath 报表编译文件的路径
*@param jrxmlPath 报表源文件
*@return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public final static JasperPrint jasperToHtml(HttpServletRequest request,
HttpServletResponse response, Map map, ReportDataSource ju,
int pageindex, String jaserPath, String jrxmlPath) {
JasperPrint jp =null;
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
int maxindex = 1;
int total=0;
try {
ju.setParameters(map);
ju.setService((BaseService)ctx.getBean("baseService"));
JasperReport jasperReport = jasperLoad(request,jaserPath, jrxmlPath);
jp = JasperFillManager.fillReport(jasperReport, map, ju.createDataSource());
if (jp.getPages().size() > 1) {
maxindex = jp.getPages().size();
}
if(map.get("total")!=null&&!"".equals(map.get("total"))){
total=(Integer) map.get("total");
}
StringBuffer HTML_HEADER = new StringBuffer();
HTML_HEADER.append("<input id=" + "pageindex" + " type="+ "hidden" + " name=" + "pageindex" + " value=" + pageindex+ " style=" + "width: 50px;" + "></input>");
HTML_HEADER.append("<input id=" + "maxindex" + " type="+ "hidden" + " name=" + "maxindex" + " value=" + maxindex+ " style=" + "width: 50px;" + "></input>");
HTML_HEADER.append("<input id=" + "total" + " type="+ "hidden" + " name=" + "total" + " value=" + total+ " style=" + "width: 50px;" + "></input>");
if(map.get("quarter")!=null&&!"".equals(map.get("quarter"))){
HTML_HEADER.append("<input id=" + "quarterValue" + " type="+ "hidden" + " name=" + "quarterValue" + " value=" + map.get("quarter")+ " style=" + "width: 50px;" + "></input>");
}
  JRHtmlExporter exporter = new JRHtmlExporter();
response.setContentType("text/html; charset=UTF-8");
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER,HTML_HEADER.toString());
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,response.getWriter());
exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, false);
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML,"<div style=\"page-break-after:always\"> </div>");
if (jp.getPages().size()==1) {//只有一页数据
exporter.setParameter(JRHtmlExporterParameter.PAGE_INDEX,0);
exporter.exportReport();
}else if (jp.getPages().size() > 1){//大于一页的数据
exporter.setParameter(JRHtmlExporterParameter.PAGE_INDEX,pageindex-1);
exporter.exportReport();
}else{
noQueryJasperData(request,response);
}
} catch (Exception e) {
  noQueryJasperData(request,response,"0");
}
  return jp;

}
/**

*导出pdf.<br>
*工程名:jhcpsys<br>
*方法名:exportPdf方法.<br>
*@param request
*@param response
*/
@SuppressWarnings("rawtypes")
public static void  exportPdf(HttpServletRequest request,HttpServletResponse response,ReportDataSource ju,String jaserPath, String jrxmlPath,Map map) {
  OutputStream ouputStream=null;
  JasperPrint jp =null;
try {
//重新获取jasper对象
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
ju.setParameters(map);
ju.setService((BaseService)ctx.getBean("baseService"));
JasperReport jasperReport = jasperLoad(request,jaserPath, jrxmlPath);
jp = JasperFillManager.fillReport(jasperReport, map, ju.createDataSource());
//导出pdf
Object name = map.get("fileName");
String namepd = new String(name.toString());
namepd = URLEncoder.encode(namepd, "UTF-8");
byte[] bytes = JasperExportManager.exportReportToPdf(jp);
response.setHeader("Content-Disposition", "attachment;filename="+ namepd);
response.setHeader("Content-Type", "application/pdf");
response.setContentLength(bytes.length);
ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (Exception e) {
noQueryJasperData(request,response,"0");
}finally{
try {
if (ouputStream != null) {
ouputStream.flush();
ouputStream.close();
}
} catch (IOException e) {
noQueryJasperData(request,response,"0");
}
}
  }
/**
 * 
 *导出excle.<br>
 *方法名:exportExcel方法.<br>
 */
public static void  exportExcel(HttpServletRequest request,HttpServletResponse response,ReportDataSource ju,String jaserPath, String jrxmlPath,Map map) {
OutputStream ouputStream=null;
JasperPrint jp =null;
try {
//重新获取jasper对象
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
ju.setParameters(map);
ju.setService((BaseService)ctx.getBean("baseService"));
JasperReport jasperReport = jasperLoad(request,jaserPath, jrxmlPath);
jp = JasperFillManager.fillReport(jasperReport, map, ju.createDataSource());
            //导出excle
Object name = map.get("fileName");
String namepd = new String(name.toString());
namepd = URLEncoder.encode(namepd, "UTF-8");
response.setHeader("Content-disposition", "attachment; filename="+ namepd);
response.setContentType("application/vnd.ms-excel");
ouputStream = response.getOutputStream();
JRXlsExporter exporter = new JRXlsExporter();
//这个参数是net.sf.jasperreports.engine.JasperPrint的对象,exporter在导出报表前会做检测 
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jp);
//这个参数是java.lang.StringBuffer的对象,存储已经产生出的指定格式报表的内容 
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,ouputStream);
//这个参数是java.lang.Boolean的对象,是否移除行与行之间的空行 
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
//这个参数是java.lang.Boolean的对象,每一页是否用一个Sheet 
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE,Boolean.TRUE);
//这个参数是java.lang.Boolean的对象,页面的背景是否为白的 
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
exporter.exportReport();
ouputStream.flush();
ouputStream.close();
}catch (Exception e) {
noQueryJasperData(request,response,"0");
}finally{
try {
if (ouputStream != null) {
ouputStream.flush();
ouputStream.close();
}
} catch (Exception e) {
noQueryJasperData(request,response,"0");
}
}
}
/**

*没有数据的处理页面.<br>
*方法名:noQueryJasperData方法.<br>
*@param request
*@param response
*@param msgs
*/
public final static void noQueryJasperData(HttpServletRequest request,
HttpServletResponse response,String msgs){
String msg ="1";
if(!StringUtil.empty(msgs)){
msg = msgs;
}
PrintWriter out = null;
try {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// StringBuffer sb = new StringBuffer();
// sb.append("<html><body><h1 align='center'>");
// sb.append("<font color='red'>").append(msg).append("</font></h1></body></html>");
out = response.getWriter();
out.write(msg);
} catch (Exception ex) {
noQueryJasperData(request,response,"0");
} finally {
if (out != null) {
out.flush();
out.close();
}
}
}
/**

*没有数据的处理页面.<br>
*方法名:noQueryJasperData方法.<br>
*@param request
*@param response
*/
public final static void noQueryJasperData(HttpServletRequest request,
HttpServletResponse response){
noQueryJasperData(request,response,null);
}

}

抱歉!评论已关闭.