热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

转自:https:wenku.baidu.comview104156f9770bf78a65295462.html第四部分,把报表集成到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.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

转:https://www.cnblogs.com/sharpest/p/6092417.html



推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
若雄建伦95
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有