iReport 制作pdf报表


分享文档系列 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 开发指南 开发指南 开发指南 (制作 (制作 (制作 (制作 PDF PDF PDF PDF 报表) 报表) 报表) 报表) 作者:小召 日期: 2008-11-17 版本: V1.0(2008-11-17) PDF 制作 : 本文是小召的作品。大家可以自由阅读、在网络上进行分发,前提是必须保留 本 文档的完整性。 分享文档 是一家专业的 Java 技术网站,给中国 Java 程序员提供各种 Java 资 源如文档,工具,教程,社区交流等。 我们的官方网站是: http://chinesedocument.com 我们的官方论坛是: http://bbs.chinesedocument.com JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 2 页共 46 页 前 言 什么也不写。 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 3 页共 46 页 目 录 第 1 1 1 1 章 介绍 JASPERREPORTS JASPERREPORTS JASPERREPORTS JASPERREPORTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 4 第 2 2 2 2 章 介绍 IREPORT IREPORT IREPORT IREPORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 6 第 3 3 3 3 章 总的开发流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 6 第 4 4 4 4 章 IREPORT IREPORT IREPORT IREPORT 使用说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 7 7 第 5 5 5 5 章 简单报表制作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 12 12 第 6 6 6 6 章 动态报表的制作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 18 18 18 6.1 6.1 6.1 6.1 给报表传入参数: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 19 6.2 6.2 6.2 6.2 带查询的报表制作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 21 6.3 6.3 6.3 6.3 动态设置查询条件的查询报表制作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 27 27 27 第 7 7 7 7 章 如何插入图片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 31 31 7.1 7.1 7.1 7.1 显示本地磁盘上的图片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 31 31 7.2 7.2 7.2 7.2 显示数据库中的图片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 34 34 34 第 8 8 8 8 章 JASPERREPORTS JASPERREPORTS JASPERREPORTS JASPERREPORTS 和 STRUTS2 STRUTS2 STRUTS2 STRUTS2 的结合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 38 38 38 8.1 8.1 8.1 8.1 安装 JasperReports JasperReports JasperReports JasperReports 插件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 38 38 38 8.2 8.2 8.2 8.2 配置生成 JasperReports JasperReports JasperReports JasperReports 报表的 struts.xml struts.xml struts.xml struts.xml 配置文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 39 39 39 8.3 8.3 8.3 8.3 生成 JasperReports JasperReports JasperReports JasperReports 报表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 41 41 第 9 9 9 9 章 附注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 42 42 9.1 9.1 9.1 9.1 iReport iReport iReport iReport 中的分页控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 42 42 9.2 9.2 9.2 9.2 iReport iReport iReport iReport 中变量的介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 43 43 43 9.3 9.3 9.3 9.3 工作区介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 44 44 44 9.4 9.4 9.4 9.4 分栏的设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 44 44 44 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 4 页共 46 页 第 1 章 介绍 JasperReports 在企业级的 web 应用中,必须面临大量的报表问题,即将数据库中的数据形成报表 并 进行打印,在传统的开发中我们一般只能使用 HTML 页面生成报表。这样不仅开发人员花 大量时间来设计 HTML 报表,而且不支持导出别的格式的报表。由于这种局限的存在,不 能满足用户的需要 ,而 JasperReports 项目的出现解决了企业开发的这种困境。 JasperReports 是一个强大的,灵活的报表生成工具,能够生成 PDF,HTML,XML 格 式的报表。这个工具是开源的,我们可以免费的使用她,并且完全使用 java 写成,可以 用 在各种 java 应用程序中,包括 java C/S 应用、 Web 中应用生成报表。(她的文档是收 费 的) 当然了我们要生成 PDF 报表肯定使用 JasperReports 组件了。 JasperReports 的开发是由一份 XML 格式的报表的文件开始的,设计好这个 XML 文 件后,利用 JasperReports 的 API 进行编译,填充数据,导出或者浏览,这样可以生成 多 种格式的报表的文件。开发者只需提供一个 XML 格式的报表设计文件,而其他的细节以 及 底层的数据处理等对开发者来说是完全透明的。 JasperReports 的使用: 首先 , 我 们 登 录 JasperReports 的官 方 网 站 下 载 JasperReports 的最 新 版 本 jasperreports-3.0.0 。 JasperReports 组件的文件结构: build :存放的是 JasperReports 项目编译后生成的 *.class 文件。 demo :存放的是 JasperReports 项目的演示文件,我们可以参考该路径下的演示 来学习 JasperReports 框架的使用。 dist :存放的是 JasperReports 项目的二进制 JAR 文件,还包括了 JasperRepor ts 项目的 API 文档。 docs :存放的是两份 XML 文档,没有什么用。 lib :存放的是 JasperReports 项目编译和运行所需的 JAR 文件。 src :存放的是 JasperReports 项目的所有源文件。 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 5 页共 46 页 为 了 在 我 们 的 项 目 中 使 用 JasperReports 项 目 , 我 们 应 该 将 dist 路 径 下 的 jasperreports-3.0.0.jar 文件复制到应用的 CLASSPATH 路径下。如果是 web 应用, 将 改文件复制到 Web 应用的 WEB-INF/lib 路径下。不过 JasperReports 框架生成其他格 式 的文档还依赖另外一些开源项目,如果生成 PDF 文档依赖 iText 项目,将 JasperReport s 的 lib 下的 itext-1.3.1.jar 文件复制到系统的 CLASSPATH 路径下;如果要生成 Excel 文 件,则应将 lib 下的 poi-3.0.1-FINAL-20070705.jar 文件复制到系统的 CLASSPATH 路 径下。 光有这些还不够,如果你的 CLASSPATH 路径下没有 apache 的 commons 组件的 话 , 我们还得将 commons 组件的部分 jar 包放到我们的 CLASSPATH 中有: commons- collections-2.1.jar,commons-logging-1.0.2.jar,commons-digester-1.7.jar, Commons-beanutils-1.7.jar. 这些 jar 包在我们下载的 JasperReports 包中的 lib 路径 下。此外还要一个 eclipse 提供的编译的 jar 包,在我们下载的 JasperReports 包中 lib 路径下有这个编译的 jar 包, jdt-compiler-3.1.1.jar 。 我在简单说一下 apache 下的这个 commons 组件: commons 组件就是一个开源的 工具类的组合,集中解决了 java 的涉及的各个方面。在某些方面比 java se 提供的功能 都 强大。它的存在目的是创建和维护独立于其他框架和产品的组件。当然了这些包我们也可 以 单独使用,就想 java Jdk 一样作为我们项目的一部分,这样我们可以大大的缩短开发周 期 。 总之:我们应该在 CLASSPATH 中必须要放 8 个 jar 包: commons 的四个: ( commons-collections , commons-logging , commons-beanutils , commons-digester ), eclipse 编译包( jdt-compiler ), JasperReports 包( jasperReports ),生成 pdf 的包( iTex ),我们肯定会打印中文, 则还需要中文支持的包( iTextAsian 包)。在 itex 的官方站点下载。 至此,所有的配置工作全部完成。 当我们成功的做了上述的工作,那么我们就可以在应用中使用 JasperReports 框架 了 。 让我们一块体验她的魅力吧! JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 6 页共 46 页 第 2 章 介绍 iReport 不过,在开发报表之前还得先说一下 iReport 工具: 我们要想开发一个报表必须先定义一个报表设计文件即一个特殊的 XML 文件,这份 XML 文件中包含了大量的 JasperReports 标签,我们没有必要在去了解 JasperReports 标签的详细含义。设计 XML 此文件是相当的繁琐的。即使设计一个简单的静态报表也要 写 上好多的代码,而且非常容易出错。好在有了 iReport 工具, iReport 也是开源组织 sf.n et 中的一款免费软件,主要作用就是用可视化的方式设计生成 JasperReport 所使用的报表 格式文件,因为 JasperReport 本身并未提供很好的可视化报 表设计工具, iReport 的出 现正好弥补了这个缺陷。因此现在我们就不用在亲自去设计那繁琐的又必须使用的 XML 文 件了,使用 iReport 工具以所见即所得的方式来生成,这样大大的提高了工作效率。 JasperReports 和 iReport 结合起来使用,你会深深的被她们提供的功能所折服的!! 我 们 首 先 要 在 www.jasperforge.org 下 载 iReport 的 最 新 版 本 。 (iReport- 3.0.0.zip) 。在压缩包解压后有一个 iReport.exe 文件,双击即可运行 iReport 。 第 3 章 总的开发流程 在详细介绍之前,先总体的说一下开发报表的流程,让大家在整体上有个认识: 1. 开发人员开发报表设计文件,也就是定义一个 *.jrxml 文件(就是最开始的那个 X ML 文件)。 2. 使用 JasperReports 提供 API 中的 JasperCompileManager 类编译 *.jrxml 文 件,编译后生成一个 *.jasper 文件。 3. 使用 JasperReports 提供 API 中的 JasperFillManager 类填充编译后的 *.jaspe r 文件,填充后生成一个 *.jrprint 文件。 4. 使用 导 出 管 理 器 ( JasperExportManager )或 者各 种 格 式 的 文 件 导 出 器 ( JRXxxExporter )将 *.jrprit 文件导出成各种格式的报表文件。也可以使用 JRVie wer 工具类来直接浏览报表。 开发流程图: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 7 页共 46 页 第 4 章 iReport 使用说明 首先我们先开发一个静态的报表为例,介绍如何利用 JasperReports+iReport 开发 JasperReports 报表。 iReport 的应用: 这是个既简单有复杂的事情,说他简单是因为这里没什么任何技术含量,完全类 此 word 的操作,说起复杂是因为需要这些报表组合的具有一定的美感。 双击 iReport.exe 文件,即可打开 iReport 主页面:我们一睹她的模样吧! JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 8 页共 46 页 单击菜单中的 ’ 档案 ’ 菜单,然后在选择 “ 开启新档 ” 菜单项,将出现下图: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 9 页共 46 页 我们可以更改报表的名称,页边距的设置以及选择纸张的大小和类型。除次之外比较 重 要的一点就是:如果报表文件需要使用中文字符,我们应单击 i18n 选项卡,在该选 项 卡的 “ XML 编码 ” 输入框中输入 GBK 。如图: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 10 页共 46 页 我们大家都熟悉 word 了, word 中的分栏给我们带来极大的方便,同样在 pdf 报表 中 分栏也是必不可少的,我们也可以通过设置对 pdf 报表进行任意次的分栏。上两个图 的 “ 字段数 ” 选项卡,我们都看见了吧!单击该选项卡得到下图: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 11 页共 46 页 字段数输入框的数就代表了所分的栏数,默认是 1 ,也就是不分栏。如果要分两栏我 们 把他改成 2 即可。 主页面的各个工作区介绍 : 1. 设置文本格式的工具按钮: 2. 文本排列工具按钮: 3. 资源管理器: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 12 页共 46 页 4. 控制台: 5. 中间空白的一大部分则是报表设计区了。 6. 最后介绍我们常用的,也是最重要的一个: 我们经常要用到的就是 “ T ” , “ F ” 这两个按钮了。 “ T ” 添加静态文本。 “ F ” 添加文本字段。(动态)。其他按钮我们可以尝试的试试它们 的功能。 第 5 章 简单报表制作 (一)、首先我们要做重要一步,打印出中文,这不是必不可少的,那就是为当前报表建一个 风格 (Style), 并设置为当前默认风格。 步骤: 1. 单击菜单中的 ’ 格式 ’ 菜单,然后在选择 “ Style ” 菜单项,将出现下图: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 13 页共 46 页 2 .单击 “ New ” 按钮:出现 Add/Modify Styles 对话框: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 14 页共 46 页 3.Add/Modify Styles 对话框设置: 3.1 设置 Styles 标签: 在 Styles name 中输入一个名字,名字任意,并设置成默认的风格:设置后 如 图: 3.2 设置 Text Properties 标签: 拖动滑动块,在下面可以看到 Text Propertise 标签: 接着点击 Font 选项后的按钮,将弹出如下对话框: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 15 页共 46 页 在这个对话框中,我们将对打印中文问题进行设置,其中主要设置有两项: PDF Font Name 设置为: STSong-Light STSong-Light STSong-Light STSong-Light PDF Embedded 设置为: UniGB-UCS2-H UniGB-UCS2-H UniGB-UCS2-H UniGB-UCS2-H (Chinese (Chinese (Chinese (Chinese Simplified) Simplified) Simplified) Simplified) 设置后如图: 然后点击 OK 即可。打印中文的 PDF 报表设置完成。 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 16 页共 46 页 至此,总结一下, PDF PDF PDF PDF 中要想打印中文有三个地方要设置:第一, CLASSPA CLASSPA CLASSPA CLASSPA TH TH TH TH 中必须增加中文支持包 iTextAsian iTextAsian iTextAsian iTextAsian 。第二,在 i18n i18n i18n i18n 标签中 XML XML XML XML 编码必须是 GBK GBK GBK GBK (要手动输入)。第三,要设置 PDF PDF PDF PDF Font Font Font Font Name Name Name Name 和 PDF PDF PDF PDF Embedded Embedded Embedded Embedded 。 (二)、通过 “ T ” 添加静态文本 : 来制作一个简单的报表: 单击 “ T ” 按钮,然后在设计区进行拖拽:插入静态文本后的报表如图: 然后保存,保存后便可得到一个 *.jrxml 文件。假设我们保存为 test.jrxml 放在 C 盘 根目录下。这个文件相当于我们手工编写的那个 XML 文件。这份最原始报表设计文 件 (类此于 java 的源文件)可以生成各种格式的报表,包括 PDF 文 档 , Excel 文 档 , HTML 文档等。所以使用 JasperReports 开发报表的核心工作就是编辑一个报表设计文件。 这份报表文件不会自己变成任何报表,我们必须对它进行编译,填充数据,导出等工 作 。 编译:有两中编译方法, 第一种是使用 JasperReports 的 API 进行编译, JasperCompileManager.compileReportToFile( JasperCompileManager.compileReportToFile( JasperCompileManager.compileReportToFile( JasperCompileManager.compileReportToFile( “ “ “ “ c:\\test.jrxml c:\\test.jrxml c:\\test.jrxml c:\\test.jrxml ” ” ” ” , , , , ” ” ” ” *c: *c: *c: *c: \\test.jasper \\test.jasper \\test.jasper \\test.jasper ” ” ” ” ); ); ); ); 第一个参数是编译的源文件,用绝对路径即可,第二个参数是要 编译生成的文件名称。 第二种是用 iReport 编译,单击菜单中的 ’ 建立 ’ 菜单,然后在选择 “ 编译 ” 菜单项,则就 对 当前的文件进行了编译,生成 jasper 文件。因为我们肯定是用 iReport 开发,所以 第 一种编译的方式不怎么常用了。 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 17 页共 46 页 填充: jasper 文件依然不能变成报表,还需要给报表填充数据,填充报表时可以填充报表所需 的数据源,参数等内容,而报表就负责显示根据数据源查询的结果和参数等。这个只 能 是利用 API 实现了。 方 法 : JasperFillManager.fillReportToFile( JasperFillManager.fillReportToFile( JasperFillManager.fillReportToFile( JasperFillManager.fillReportToFile( “ “ “ “ c:\\.jasper c:\\.jasper c:\\.jasper c:\\.jasper ” ” ” ” ,null,new ,null,new ,null,new ,null,new JREmptyDataSource()) JREmptyDataSource()) JREmptyDataSource()) JREmptyDataSource()) ; 第一个参数是被填充的 jasper 文件,第二个参数是填 充报表的参数,我们这个没设置参数所以为 null ,第三个参数是连接的数据源,即使 没有连接数据源也要创建一个空的数据源。填充完在 C 盘根目录下将生成一个 test.jrprint 文件。 导出: jsprint 文件已经是一个可以显示的报表了,这份报表是格式无关的,也就是说它 既可以生成 PDF 文件也可以生成 Excel 文件,还可以直接使用 JasperReports 的 报表浏览工具来浏览。导出成相应的文件时有两种 API : 第一 种 使 用 文 件 导 出 器 : 导 出 PDF 文件 : JRPdfExporter , 导出 EXCEL 文档 : JRXlsexporter 导出 HTML 文档: JRHtmlexporter 等等,导出 CSV, RTF, TEXT, XML 都有相应 的 文件导出器。 第二种使用文件导出管理器: JasperExportManager 类,提供了多个 静 态 方 法 , 可 以 直 接 导 出 多 种 文 件 格 式 的 报 表 。 例 如 导 出 PDF 用 exportReportToPdfFile 方 法 , 导 出 HTML 报 表 用 exportReportToHtmlFile 等等。利用 exportReportToPdfStream 方法 , 导出成一个 PDF 格式的报表,并将该报表文件输出到一个指定输出流里。 利用第一种方法导出一个 PDF 报表的源程序: public void exporter() throws Exception{ // 使用 JRLoader 来加载一个 *.jrprint 文件,生成一个 JasperPrint 实 例 JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject("c:\\test.jrprint"); JRPdfExporter exporter = new JRPdfExporter(); // 设置要导出的实例 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 18 页共 46 页 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); // 设置导出的文件名 exporter. setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "c:\\test.pdf"); exporter.exportReport(); System.out.println(" 导出完成 "); } 第二种方法导出一个 PDF 文件:源程序 public void exp()throws Exception{ // 使用文件导出管理器 JasperExportManager.exportReportToPdfFile("c:\test.jrprint", JasperExportManager.exportReportToPdfFile("c:\test.jrprint", JasperExportManager.exportReportToPdfFile("c:\test.jrprint", JasperExportManager.exportReportToPdfFile("c:\test.jrprint", "c:\\test.pdf"); "c:\\test.pdf"); "c:\\test.pdf"); "c:\\test.pdf"); } 很显然我们一般都用第二种方法来导出报表。 至此,一个简单的静态报表制作完成。 第 6 章 动态报表的制作 单纯的静态报表是没有太大的作用的,报表都需要传入一些动态的内容,例如参数, 或 者直接从数据库查询的结果等。只有接受这些动态内容的报表才是完整的报表。 在报表中访问时: $V{variablesName} $V{variablesName} $V{variablesName} $V{variablesName} :访问变量。 $P{parameterName} $P{parameterName} $P{parameterName} $P{parameterName} :访问参数,通过填充报表时使用 Map 对象传入。 $F{filedsName} $F{filedsName} $F{filedsName} $F{filedsName} :访问字段,通常对应查询字段或者集合元素的属性值。(字 段即数据库中表的列名) JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 19 页共 46 页 6.1 6.1 6.1 6.1 给报表传入参数 首先我们要在报表中加入参数,然后在填充数据时,给相应的参数赋上值,最后将赋 的 值显示在报表中。 在报表中加入参数:单击菜单中的 ’ 预览 ’ 菜单,然后在选择 “ 报表参数 ” 菜单项,将出现 下图: 单击新增则出现下图: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 20 页共 46 页 在 Parameter Name 中添加参数的名字,在 Type 中为参数设置类型。最后单击 O K 即可。可以添加任意多的参数。 比如我们添加了 str1 , str2 , str3 三个 String 参数,则在填充时我们要给他们赋值 , 代码如下: public void fillData() throws Exception{ Map params = new HashMap(); params.put("str1", " 传参 "); params.put("str2", " 测试 "); params.put("str3", "test"); params.put("strint", Integer.valueOf(123)); JasperFillManager.fillReportToFile("c:\\report_200.jasper", params,new JREmptyDataSource()); System.out.println(" 添加成功 "); } 编译,和导出和静态报表的方法相同,在此就不多说了。 当然我们肯定要在报表中显示我们所传递参数值,我们可以使用下面的方法,来访问 iReport 中的参数: 参数中的数据是动态的,我们要单击工具栏上的 “ F ” 按钮,在工作区在进行拖拽,在 更 改成下图样式: 保存该文件,编译,填充,导出后得到的 PDF 报表中则把程序中赋的值显示了出来。 JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 21 页共 46 页 6.2 6.2 6.2 6.2 带查询的报表制作 更多的时候,系统的报表显示的是来自数据库里的数据,既需要通过查询来获得报表 数据。并且结合前面介绍的带参数的报表,可以在执行查询时动态的传入参数。 要想从数据库中取数据,第一步我们肯定要连接数据库了,我们用 iReport 制作报表 , 当然要拿 iReport 来连接数据库了。所以我们推断, iReport 肯定有连接数据库的接口, 下 面我们开始连接数据库。以连接 Oracle 数据库为例来说。 首先应将 Oracle 的驱动程序复制到 iReport 的 lib 路径下,这样完成在 iReport 中安装 Oracle 的驱动。重启 iReport 主程序。然后建立与 Oracle 数据库的连接: 1. 单击 iReport 主菜单上的 “ Data ” 菜单,在出现的菜单中单击 “ 连接 / 资料来源 ” 菜 单 项,即可看到下图所示对话框: 该对话框用于维护 iReport 的数据库连接,包括新建数据库连接和修改数据库 连 接。 2. 单击 New 按钮,将出现下面对话框: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 分享文档 -chinesedocument.com 版权部分 第 22 页共 46 页 该对话框用于选择数据库连接类型,包括 JDBC 数据库的连接, XML 文件数据 源 , Hibernian 连接等。 1. 我们需要使用 JDBC 连接数据库,所以我们选择第一项,然后单击 “ Next ” 按钮,将 出 现下图: 该对话框用来设置连接数据库的相关信息: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 23 页共 46页 Name:设 置此 连接 的名 称。 JDBC Driver:我 们选择 Oracle 的连接 driver。 JDBCURL:根 据我 们自 己的 条件 设置 连接的 url。 User Name :数 据库 用户 名。 Password:访 问数 据库 密码 。 设置 完成 后, 我们 单击 “Test”按钮 来测 试。 如果 我们 输入 的信 息正 确的 话, 我们 将看 到下 面的 提示 框: 然后 我们 单击 “Save”按钮 , 即 可 保存 连接 成功 。 我 们 也可 以将 此连 接设 置成 默认 连接 。 3.回到 iReport 主界面,我们单击主菜单上的 “Data”菜单,在出现的菜单中单击 “报表 查询 ”菜单 项, 将看 到下 图: 该对 话框 用于 设置 报表 的查 询语 句, 该 查 询语 句可 以是 各种 查询 语句 , SQL,HQL 和 XPath 等。如果需要使用系统辅助的查询设计器,则可以单击 “Query designer”按钮, JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 24 页共 46页 将弹 出查 询设 置器 。 总 之 , 不 管 我们 使用 何种 查询 , 只 能 够在 输入 框中 , 输 入有 效的 查 询 语句 即可 ,如 果查 询成 功, iReport 会自 动为 查询 语句 生成 对应的 Field 如图 所示 : 单击 “OK”按钮 ,回到 iReport 的主 界面 。至 此报 表查 询设 计成 功, 那么 我们 该如 何 显示 查询 的内 容呢 ? 和访 问参 数差 不多 ,不 过我 们用 “字段 ”来显 示数 据。 比如 在上 图中 我们从 SSBMXX 表中 查询 出了 四个 列名 , 所 以 我们 要想 显示 出数 据, 应 在 报表 中增 加四 个字 段, 注 意 : 字 段值一 定要 和数 据库 中表 的列 名相 同, 这样 才能 对应 的显 示出 数据 。也 就是 我们 要增加 “BMH”,“XM”,“MZM”,“XBM”这四 个字 段( 大小 写无 关) ,增 加字 段的 方法 如下 : 和增加参数方法差不多,在主菜单上单击 “预览 ”菜单 ,在出现的菜单中单击 “报表字 段”菜单 项, 即可 看到 下图 所示 对话 框: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 25 页共 46页 单击 “新增 ”按钮 ,出 现下 图: 我们可以在 Field Name 中输入字段的名称,在 Field CLASS Type 中设置字段的 类型 ,单 击 “OK”即可 增加 一个 字段 。在 此我 们应 增加 : “bmh”,“mzm”,“xbm”,“xm” 四个 字段 。在 报表 中我 们利 用加 入的 字段 (和 表中 列名 要对 应) 来显 示数 据库 内容 。 字段 是动 态的 , 我 们要 单击 工具 栏上 的 “F”按钮 , 在 工作 区在 进行 拖拽 来显 示数 据: 如 图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 26 页共 46页 保存 报表 , 对 此报 表进 行, 编 译 , 填 充, 导 出 。 编 译和 导出 和静 态的 报表 一样 。 只 是 填充 的 时方 法有 点不 同, 填充 的源 程序 如下 : public class FillJasper{ public static void main(String[] args) throws Exception { doFill(); } public static void doFill() throws Exception{ JasperFillManager.fillReportToFile("c:\\report_2002.jasper", null, getConn());//和数 据库 的连 接 System.out.println("Hello"); getConn().close(); } public static Connection getConn() throws Exception {//Oracle 数据库 的连 接 String driver = "oracle.jdbc.driver.OracleDriver"; String connectionString = "jdbc:oracle:thin:@172.16.12.8:1521:YJSMIS"; String user = "yjs"; String password = "tiger"; Class.forName(driver); Connection conn = DriverManager.getConnection(connectionString,user,password); return conn; } } 在执 行此 方法 时, 我们 一定 要确定 Oracle 的驱 动在 我们的 CLASSPATH 下了 。 至此 一个 动态 带查 询的 报表 制作 完成 。我 们可 以浏 览它 生成的 PDF 报表 了。 我们在打印带查询的报表时,我们进行了两次连接数据库,第一次是在 iReport 中连 接的 ,第二次是在填充时连接的。是必须的吗?经过多次测试,我发现可以不在iReport JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 27 页共 46页 中建 立连 接, 虽 然 在查 询时 它提 示要 你先 进行 连接 , 但 是我 们忽 略它 的提 示, 接 着 向下 操 作, 照样能够打印出数据,没有一点影响。不管你 iReport 中有没有进行数据库的连接但是在 填充 时, 你必 须进 行数 据库 连接 。如 果不 这样 打印 不出 数据 。 6.36.36.36.3 动态 设置 查询 条件 的查 询报 表制 作 在iReport 中虽然可以写各种查询语句,很容易的能够从数据库中取出数据来。但是 我们 发现 查询 语句 都是 写死 的, 一 旦 编译 完成 后我 们就 无法 在更 改查 询条 件了 , 这 及 其不 方 便。 iReport 的开 发者 也想 到了 这种 情况 。 我 们 可以 利用 参数 , 给 查询 语句 动态 的设 置条 件。 在查 询条 件中 我们 用参 数代 替, 在 程 序中 我们 通过 给参 数赋 值, 从 而 能够 动态 的改 变查 询 的 条件 。 第一 种, 就 像 通常在 java.sql.PreparedStatement 中使 用参 数一 样: ( str1 是自 己 新加 的一个 String 参数 ) 查询 语句 为: Select xm,mzm,xbm,bmh from ssbmxx where bmh = $P{str1} (语 句后 面没 有分 号) 那么 在填 充程 序中 我们给 str 赋值 即可 。填 充程 序: public class FillJasper { public static void main(String[] args) throws Exception { doFill(); } public static void doFill() throws Exception{ Map params = new HashMap(); params.put("str1", "130298387"); JasperFillManager.fillReportToFile("c:\\report_2002.jasper", params,getConn()); System.out.println("数据 填充 成功 "); getConn().close(); JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 28 页共 46页 } //取得 Oracle 数据 库的 连接 public static Connection getConn() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String connectionString = "jdbc:oracle:thin:@172.16.12.8:1521:YJSMIS"; String user = "yjs"; String password = "tiger"; Class.forName(driver); Connection conn = DriverManager.getConnection(connectionString,user,password); return conn; } 第二 种: 有 时 需要 用参 数来 动态 改变 SQL 查询 的部 分语 句或 者将 整个 SQL 语句 作为 参数 传给 报 表, 在这 种情 况下 ,语 法有 一点 不同 ,如 下: Select xm,mzm,xbm,bmh from ssbmxx where $P!{str2} 这样 我们 就能 在程 序中 改变 查询 语句 了: 填充 的程 序如 下: public class FillJasper { public static void main(String[] args) throws Exception { doFill(); } public static void doFill() throws Exception{ Map params = new HashMap(); params.put("str2", "bmh = 130298387 and xbm = 1 "); JasperFillManager.fillReportToFile("c:\\report_2002.jasper", params,getConn()); System.out.println("数据 填充 成功 "); getConn().close(); } JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 29 页共 46页 //取得 Oracle 数据 库的 连接 public static Connection getConn() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String connectionString = "jdbc:oracle:thin:@172.16.12.8:1521:YJSMIS"; String user = "yjs"; String password = "tiger"; Class.forName(driver); Connection conn = DriverManager.getConnection(connectionString,user,password); return conn; } 其中 $P!{}的功 能很 强大 ,我 们也 可以 将整个 sql 查询 语句 用 $P{}代替 ,在 iReport 查询 框 中输 入如 下即 可: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 30 页共 46页 那么 我们 的填 充时 ,要 将这 个查 询字 符串 赋值 给参数 str1,程 序如 下: public class FillJasper { public static void main(String[] args) throws Exception { doFill(); } public static void doFill() throws Exception{ Map params = new HashMap(); params.put("str2", " select xm,bmh ,mzm from ssbmxx where bmh = 130298387 and mzm = 1"); JasperFillManager.fillReportToFile("c:\\report_2002.jasper", params,getConn()); System.out.println("数据 填充 成功 "); getConn().close(); } //取得 Oracle 数据 库的 连接 public static Connection getConn() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String connectionString = "jdbc:oracle:thin:@172.16.12.8:1521:YJSMIS"; String user = "yjs"; String password = "tiger"; Class.forName(driver); Connection conn = DriverManager.getConnection(connectionString,user,password); return conn; } JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 31 页共 46页 这样灵活性就很大了,大大的提高了XML 文件的重用性。不过美中不足的是 $P!{}$P!{}$P!{}$P!{}这种方式不能传递中文,如果我们要传递中文的话那只能使用$P{}$P{}$P{}$P{}这种方式 了。 第7章 如何插入图片 在报 表中 显示 图片 是很 常见 的事 , 显 示 图片 也分 两种 情况 , 一 个是 显示 本地 磁盘 上的 图 片, 一个 是动 态的 显示 数据 库中 的图 片。 7.17.17.17.1 显示 本地 磁盘 上的 图片 这个 比较 简单 , 回到 iReport 主界 面, 我 们 单击 主菜 单上 的 “编辑 ”菜单 , 在 出 现 的 菜单 中单 击 “插入 物件 ”菜单 项, 在选 择 “Image”选项 。这 时用 鼠标 在工 作区 进行 拖拽 将看 到下 图: 选中 该图 , 右 击 鼠标 , 选 择 属性 , 将 弹出 Image 的属 性对 话框 , 我 们 在选择 Image 标签 如下 图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 32 页共 46页 我们 单击 右边 的 “Find”按钮 ,可 以打 开一 张存 在的 图片 。或 者在 Image Expression 中 输入 要显 示图 片的 绝对 路径 。这 样话 图片 就固 定了 ,不 能在 改换 成别 的图 片了 。如 图: 另外 一种 显示 方法 比较 灵活 点, 我 们不 直接 把图 片的 路径 写死 了, 我 们 用一 个参 数 来 代替 图片 的路 径, 然 后 在程 序中 , 将 图 片的 路径 赋值 给该 参数 , 从 而 可以 通过 修改 程序 来 改变 显示 的图 片, 设置 如下 :直 接输 入一 个参 数 $P{str1}即可 ,如 下图 : JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 33 页共 46页 我们 在填 充程 序中 直接为 str1 参数 赋值 即可 , ( 注意 : 对 于参 数、 字 段 等, 都 应 先 增 加, 在使 用) 填充 程序 : public class FillJasper { public static void main(String[] args) throws Exception { doFill(); } public static void doFill() throws Exception{ Map params = new HashMap(); params.put("str1",params.put("str1",params.put("str1",params.put("str1", "C:\\1003.gif");"C:\\1003.gif");"C:\\1003.gif");"C:\\1003.gif"); //////// 把图片的绝对路径赋值给 str1 str1 str1 str1 参 数。 JasperFillManager.fillReportToFile("c:\\report_2002.jasper", params,getConn()); System.out.println("数据 填充 成功 "); } //取得 Oracle 数据 库的 连接 public static Connection getConn() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String connectionString = "jdbc:oracle:thin:@172.16.12.8:1521:YJSMIS"; String user = "yjs"; String password = "tiger"; JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 34 页共 46页 Class.forName(driver); Connection conn = DriverManager.getConnection(connectionString,user,password); return conn; } } 7.27.27.27.2 显示 数据 库中 的图 片 我们 做报 表大 部分 都是 显示 数据 库中 的图 片, 要 显示 数据 库中 的图 片也 有两 种方 法 , 第一 是, 把要 显示 的图 片的 全部 去出 来放 到本 地, 然后 在进 行显 示。 另一 种方 法, 就是 直接 从数 据库 中取 图片 然后 显示 ,就 像从 数据 库中 显示 普通 数据 的一 样。 第一 种方 法和 1.4.1 中介 绍的 基本 一样 , 我 要 说的 是第 二种 方法 。 比 如我 要在 报 表 中显 示数 据库 中的 一个 ‘xm’(姓 名) 字段 和 ‘tp’(图 片) 字段 。 首先 我们在 iReport 中要 对数 据库 进行 查询 ,在 查询 对话 框中 输入 sql 语句 : Select xm ,tp ,from ssbmxx 如图 : JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 35 页共 46页 要想显示查询结果,在iReport 中,首先要增加这两个字段‘xm’类型为 java.lang.String 类型 , ‘tp’类型为 java.io.InputStream, 这 一 点非 常重 要一 定 要 注意 ,如 图: 字段 增加 完后 ,在 工作 区插 入一 个, 动态 显示 框和 一个 图片 物件 ,用 来显 示查 询结 果 中的 姓名 和图 片, 如图 : JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 36 页共 46页 $F{xm}用来 显示 姓名 的, 图片 物件 用来 显示 数据 库中 图片 。选 中图 片物 件, 单 击右 键, 选择 属性 选项 ,将 打开 图片 的属 性对 话框 ,如 图: 我们在 Image 标签中的 Image Expression 框中输入: $F{tp},tp中数据是 我们 在数 据库 中查 询出 来的 图片 。 因为 tp是Java.io.InputStream 类型 的, 所 以 , 在 输入 框的 下面 Image Expression Class 中要 选择 InputStream 类型 , 如下 图设 置 : JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 37 页共 46页 设置 完, 关 掉 对话 框回 到主 界面 上, 保 存 该报 表。 至 此 , 从 数据 库中 显示 图片 的 报表 制作 完成 ,然 后就 是对 报表 的编 译, 填充 ,和 导出 操作 。注 意, 填充 时要 和数 据 库进 行连 接。 编译 ,导 出都 一样 ,填 充程 序: public class FillJasper { public static void main(String[] args) throws Exception { doFill(); } public static void doFill() throws Exception{ JasperFillManager.fillReportToFile("c:\\report_2002.jasper", null,getConn()); System.out.println("数据 填充 成功 "); getConn().close(); } //取得 Oracle 数据 库的 连接 public static Connection getConn() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 38 页共 46页 String connectionString = "jdbc:oracle:thin:@172.16.12.8:1521:YJSMIS"; String user = "yjs"; String password = "tiger"; Class.forName(driver); Connection conn = DriverManager.getConnection(connectionString,user,password); return conn; } } 第8章 JasperReports 和Struts2 的结合 8.18.18.18.1 安装JasperReports JasperReports JasperReports JasperReports 插件 为了在 Struts2 中使用 JasperReports 报表。 Struts2 提供了 JasperReports 插 件支 持, Struts2 可以 非常 方便 的使用 JasperReports 来生 成报 表。 与Struts2 的其 他插 件类 似, 安装 JasperReports 插件 非常 容易 ,只 需将 struts2 的JasperReports 插件复制到 Web 应用的 WEB-INF/lib 路径先即可,当然了该路径 下还 得包括上面提到的那8个jar 包。 Struts2 的JasperReports 插件 包 在 Struts2 的解 压包 中的 lib 文件 夹下 : struts2-jasperreports-plugin-2.0.12.jar。 当我 们打 开此 插件 包下的 struts-plugi.xml 文件 ,发 现该 文件 中代 码如 下: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 39 页共 46页 从代 码中 我们 发现 , 该 插件 的主 要作 用就 是定 义了 一个 名为 jasper 的result 类型 。 我 们 肯定 要用 这种 result 类型 来生 成报 表了 。 但 我们 又发 现如 果要 用这 种 result 类型 , 那 么 我们 自己的 struts 配置 文件 中的 包一 定要 继承 此包 了, 那 么 我 们就 没法 继承 struts 的默 认包 ( 包名 : struts-default)了,struts 默认 包我 们 是必 须要 继承 的。 为 了解 决这 个矛 盾, 我 们 就将 这种 result 的类 型定 义直 接拷 贝 到我 们自 己的 struts 配置 文件 中, 这 样就 不用 继承 这个 包了 。 我 们 就可 以直 接 继 承struts 的默 认包 了。 注: 也就 是将 这段 代码 考到 我们 的包 名下 面, 别的 什么 都不 用动 。 8.28.28.28.2 配置 生 成 JasperReports JasperReports JasperReports JasperReports 报表 的 struts.xml struts.xml struts.xml struts.xml 配置 文件 配置 生成 JasperReports 报表的 struts.xml 配置 文件 和普 通的 struts.xml 稍有 不同 ,不 同之 处就 在于 需要 增加 一个 类型为 jasper 的result,该 result 会 使用 JasperReports 报表作为视图组件。因为继承的矛盾,我们已经把 jasper 的result 定义 拷贝 到我 们的 包名 下, 所以 就可 以直 接使 用这个 result 类型 了。 定义 jasper 类型的 result 时需要 3个属 性,这 3个属 性分 别是 : JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 40 页共 46页 l location:该 参数 指定 生成 报表 所用 的 *.jasper 文件 位置 。 l format:该 参数指定生成报表文件的格式,例如HTML 指定 生 成 HTML 文件格式的报表, PDF 指定生成 PDF 文件格式的报表,等等。如果不 指定 该参 数, 默认 生成 PDF 格式 的报 表。 l dataSource: 指 定 一个 POJO POJO POJO POJO 集合属性 名, JasperReports 报表 将自 动 迭 代输出 该集 合中的 POJO 对象 。 下面 是一个 struts 配置 文件 应用 的实 例: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 41 页共 46页 ssbmxx\jasper\report_txdz.jasper PDFPDFPDFPDF kstxdzskstxdzskstxdzskstxdzs 8.38.38.38.3 生成JasperReports JasperReports JasperReports JasperReports 报表 经过 上面的步骤,如果需要生成JasperReports 的报 表 非 常 简 单 了 , 只需 要提 供系 统所 需要 的报 表设 置文 件( 即那 个原 始的 *.jrxml 文件 )即 可。 我们 同样 需要 Field 类型 (既 iReport 中的 字段 )来 输出 Action 中的 集合 元 素,而集合元素(就是 POJO)的属性就是报表设置文件中的字段。在报表中不 用在 使用 报表 查询 了, 因为 要输 出的 这个 集合 就是 已结 查询 出来 的。 只要 在报 表 中增 加字 段即 可。 集合 的元素 POJO 中的 属性 要和 字段 的名 字一 一对 应。 现在只要我们能够查询出一个 POJO 集合,并把 POJO 集合封装在一个 List 的对 象中 , 比 如 封装在 List的对象 list中,并在Action中生 成该 list 对象的 setter 和getter 方法后。那么我们只需把 list 放到 struts 配置文件中的 dataSource 中, 则 系统 会自 动的 迭代 的把 list 中元 素输 出出 来。 ( 报表 中的 字段和 POJO 中 的属 性名 字要 对应 才行 ) JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 42 页共 46页 第9章 附注 9.19.19.19.1 iReport iReport iReport iReport 中的 分页 控制 ireport 控制 分页 有两 种方 法 : 第一 种: 直接 定好 DETAIL 的高 度。 第二 种: 利用 数据 条数 来控 制分 页: 定义 一个 变量 显示 每一 条记 录序 号, 然后 点击 主菜 单的 “编辑 ”菜单 , 选择 Insert page/column break, 单 击 后在 页 面 进行 拖拽 ,如 图: 选中 该物 件, 单击 鼠标 右键 ,选 择 “属性 ”选项 将弹 出下 面对 话框 : JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 43 页共 46页 或者 单击 左边 按钮 ,或 者直 接在 Print when expression 中写 表达 式, 如下 : new Boolean($V{REPORT_COUNT}.intValue() % 5 == 0) REPORT_COUNT 是系 统提供的一个记录数据的序号,让它每显示5条 就自 动分 页。 如果 显示 四条 分页 ,我 们就 直接把 5改为 4了就 OK 了。 9.29.29.29.2 iReport iReport iReport iReport 中变 量的 介绍 在iReport 中已经 定义 了几 个变 量, 我们 直接 就可 以用 了。 (变 量的显 示“$V{变量 名 }”) PAGE_NUMNBER:代 表当 前页 数。 (可 以是 页码 ,也 可以 是页 数) PAGE_COUNT:当 前页 面中 记录 的数 目。 GROUPNAME_COUNT:代 表当 前组 的记 录数 。 COLUMN_NUMBER:当前列中记录的数目(是当前页里行的序号,在新页上会 重置 1)。 REPORT_COUNT:当 前文 档中 数据 源记 录数 目。 JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 44 页共 46页 9.39.39.39.3 工作 区介 绍 title:每 个报 表一 般都 会有 一个 名字 ,比如 xxxx 生产 报表 , title 就是 搁置 这个 名称 的最 好地 方了 ,当 然你 也可 以根 据需 要搁 置在 合适 的地 方 pageHeaher:报 表的 一些 公共 要素 ,比 如页 码, 创建 时间 ,创 建人 等信 息。 columnHeader:域是用来放 static text 的,也就是不循环的部分,放置列名 称。 detail:域 是用 来放 text field 的, 也就 是循 环部 分。 pageFooter:放 置列 级别 的统 计计 算值 或是 列的 说明 。 summary:域 是用 来放 整个 表包 括所 以页 的统 计参 数的 。 可以 直接 调整 每个 域的 宽度 ,也 可以 通过 Band properties 来调 整。 如果 不需 要也 可以 把他 们宽 度设为 0.当然 总长 度是 不会 超过 页面 的原 长。 9.49.49.49.4 分栏 的设 置 就像 word 的一 样, PDF 报表 也能 进行 分栏 ,我 在前 面说 过, 先在 我说 一下 : 在主 菜单 上单 击 “档案 ”菜单 ,选 择 “开启 新档 ”选项 将弹 出如 下的 对话 框: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 45 页共 46页 我们 选择 “字段 数 ”标签 ,如 图: JasperReports JasperReports JasperReports JasperReports & & & & iReport iReport iReport iReport 开发指南 第 46 页共 46 页 字段数就单表分的栏数,要想分成两栏,把 1 改为 2 即可。
还剩45页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

microcat

贡献于2015-08-21

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf