日期:2014-05-17 浏览次数:21183 次
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(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) {
session.setAttribute("REPORT_JASPERPRINT", jasperPrint);
session.setAttribute("REPORT_FILENAME", report_fileName);
session.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