转自:https://wenku.baidu.com/view/104156f9770bf78a65295462.html
第四部分,把报表集成到Web应用程序中
用MyEclipse新建一个Web Project,在WebRoot下新建一个reports文件夹,用来放ireport生成的jasper文件
找到前边保存ireport报表的路径,报表在预览后,生成jasper文件,如图
把这个deptReport.jasper文件复制到Web项目里的reports文件夹中
导入JasperReport的包,包可以从以下路径找到.
Ireport安装路径\iReport-3.7.6\ireport\modules\ext
把这里所有的包引到Web项目里,引入oracle的jdbc驱动,接下来进行编程,以Servlet为例
1,生成报表并且以HTML形式在网页上显示
Servlet的主要逻辑代码如下:
1 request.setCharacterEncoding("utf-8"); 2 // 接收查询参数,将来这个参数就是我们在报表中定义的parDname 3 String deptName = request.getParameter("dname"); 4 5 // 报表文件路径,我们用ireport做的jasper文件路径 6 // JasperReport需要jasper文件的真实路径 7 String reportPath = request.getSession().getServletContext() 8 .getRealPath("/reports/deptReport.jasper"); 9 // 报表参数,jasper文件可能不只一个参数 10 // 在程序里,用一个Map对象,向jasper文件传递他需要的参数 11 Map reportParameters = new HashMap(); 12 reportParameters.put("parDname", deptName); 13 // 报表连数据库所用的数据连接 14 // 因为报表直接以数据库为数据源,所以在这里需要给jasper文件一个jdbc连接 15 Connection con = null; 16 // 清空响应流 17 response.reset(); 18 // 设置输出格式 19 response.setContentType("application/html"); 20 // 创建JDBC连接 21 Class.forName("oracle.jdbc.OracleDriver"); 22 con = DriverManager.getConnection( 23 "jdbc:oracle:thin:@oracle10:1521:oracle", "scott", "tiger"); 24 // JasperReport提供的类,用于生成一个HTML文件 25 JasperRunManager.runReportToHtmlFile(reportPath, reportParameters, con); 26 response.sendRedirect(request.getContextPath() 27 + "/reports/deptReport.html"); 28 /* 29 * 如果要在网页上显示PDF文件,把前两句去掉,放开这段注释 30 * ServletOutputStream out = response.getOutputStream(); 31 * //从jasper报表生成PDF字节 32 * byte[] pdfBytes = JasperRunManager.runReportToPdf(reportPath, reportParameters, con); 33 * //设置输出内容长度 34 * response.setContentLength(pdfBytes.length); //将PDF写入报表 35 * out.write(pdfBytes, 0, pdfBytes.length); 36 * out.flush(); 37 * out.close(); 38 */ 39 40 41 // 关闭数据连接 42 con.close();
这里只写出逻辑代码,实际用的时候,加上各种异常的处理。
2, 导出PDF和Excel文件
Servlet的逻辑代码如下,还是没写异常处理,开发时加上
1 // 接收查询参数 2 request.setCharacterEncoding("utf-8"); 3 String deptName = request.getParameter("dname"); 4 // 在请求的时候多加一个参数,标识要生成文件的格式是xls还是pdf 5 String format = request.getParameter("format"); 6 // 报表文件路径 7 String reportPath = request.getSession().getServletContext() 8 .getRealPath("/reports/deptReport.jasper"); 9 // 报表参数 10 Map reportParameters = new HashMap(); 11 reportParameters.put("parDname", deptName); 12 // 报表查数据库的连接 13 Connection con = null; 14 // 清空响应流 15 response.reset(); 16 // 设置输出格式 17 String contentType = "pdf"; 18 if ("xls".equals(format.toLowerCase())) { 19 contentType = "xls"; 20 } 21 response.setContentType("application/" + contentType); 22 // 设置输出文件名 23 response.setHeader("Content-Disposition", 24 "attachment; filename=deptReport." + contentType); 25 // 输出流,用于向浏览器传送pdf文件 26 ServletOutputStream out = null; 27 // 创建数据连接 28 Class.forName("oracle.jdbc.OracleDriver"); 29 con = DriverManager.getConnection( 30 "jdbc:oracle:thin:@oracle10:1521:oracle", "scott", "tiger"); 31 // 取响应流 32 out = response.getOutputStream(); 33 // 创建导出器,JasperReport提供的类 34 // 这里以xls和pdf为例,如果需要生成其他格式的文件,用其他导出器就行 35 JRAbstractExporter exporter = new JRRtfExporter(); 36 // PDF导出器 37 if ("pdf".equals(format.toLowerCase())) { 38 exporter = new JRPdfExporter(); 39 } else if ("xls".equals(format.toLowerCase())) { // excel导出器 40 exporter = new JRXlsExporter(); 41 exporter.setParameter( 42 JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, false); 43 } 44 // 加载报表文件 45 JasperReport report = (JasperReport) JRLoader.loadObject(reportPath); 46 // 创建JasperPrint对象 47 JasperPrint jasperPrint = JasperFillManager.fillReport(report, 48 reportParameters, con); 49 // 设置要输出的jasper对象 50 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 51 // 设置输出流 52 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); 53 // 导出 54 exporter.exportReport(); 55 out.flush(); 56 out.close(); 57 con.close();
到此为止,JasperReport + ireport 集成报表到Web程序的一般步骤就说完了,本说明中所提到的报表源文件及Web示例,随文档一起,可以参实际例子来学习Jasper 和 ireport