ireport生成pdf和excel

本文介绍了一个Servlet的实现,该Servlet用于从Web应用程序导出报表为PDF或Excel格式。通过获取请求参数,如报表类型和会话ID,Servlet能够定制化地导出报表,并处理子报表路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值