/**
* Servlet implementation class reportServlet
*/
public class ReportServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String contextPath ="";
public ReportServlet() {
super();
}
@Override
public void init() throws ServletException {
super.init();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
exportReport(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
exportReport(request, response);
}
private void exportReport(HttpServletRequest request, HttpServletResponse response){
try {
String type=request.getParameter("type");
String sid=request.getParameter("sid");
ReportObj rpt=(ReportObj)request.getSession().getAttribute(sid);
if(rpt!=null){
contextPath =this.getServletContext().getRealPath("/");
contextPath +="/WEB-INF/jasper/";
if(!"".equals(rpt.getJasperSubReportFile())){
rpt.getParameters().put("SUBREPORT_DIR", contextPath+rpt.getJasperSubReportFile());
}
if("PDF".equalsIgnoreCase(type)){
exportPDF( response,rpt);
}else if("EXCEL".equalsIgnoreCase(type)){
exportEXCEL( response,rpt);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void exportEXCEL(HttpServletResponse response,ReportObj rpt){
try {
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(contextPath + rpt.getJasperReportFile());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, rpt.getParameters(), new JRBeanCollectionDataSource(rpt.getList(),false));
// 设置相应参数,以附件形式保存EXCEL
OutputStream ouputStream = response.getOutputStream();
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\""+ URLEncoder.encode(rpt.getExportFileName(), "UTF-8") + ".xls\"");
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,ouputStream);
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);// 显示边框
exporter.exportReport();// 导出
ouputStream.close();// 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
private void exportPDF(HttpServletResponse response,ReportObj rpt){
try {
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(contextPath + rpt.getJasperReportFile());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, rpt.getParameters(), new JRBeanCollectionDataSource(rpt.getList(),false));
// 设置相应参数,以附件形式保存PDF
OutputStream ouputStream = response.getOutputStream();
response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\""+ URLEncoder.encode(rpt.getExportFileName(), "UTF-8") + ".pdf\"");
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,ouputStream);
exporter.exportReport();// 导出
ouputStream.close();// 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}