• 5.把报表集成到Web应用程序中-生成网页和导出两种方式


    转自: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.6ireportmodulesext

    把这里所有的包引到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

  • 相关阅读:
    小程序中的箭头函数
    总结:小程序常见问题(2)
    总结:小程序常见问题(1)
    实战:云开发-实现奶茶店小程序(二)
    实战:云开发-实现奶茶店小程序(一)
    实战:云开发-实现在线充值小程序
    ORACLE表名与列名小写转成大写
    MSSQL所有表名、列名转大写的SQL语句
    ORACLE 之 标识符无效 问题总结及解决方案
    SQL语句获取数据库中的表主键,自增列,所有列
  • 原文地址:https://www.cnblogs.com/sharpest/p/6092417.html
Copyright © 2020-2023  润新知