JasperReports+iReports制作PDF报表

jianglei

贡献于2011-10-10

字数:0 关键词: JasperReport 图表/报表制作

分享 文 档系 列 JasperReportsJasperReportsJasperReportsJasperReports &&&& iReportiReportiReportiReport 开 发指 南 开 发指 南 开 发指 南 开 发指 南 (制作(制作(制作(制作PDF PDF PDF PDF 报 表) 报 表) 报 表) 报 表) 作者:小召 日期: 2008-11-17 版本: V1.0(2008-11-17) PDF 制作 : 本文是小召的作品。 大 家可以自由阅读、 在 网络上进行分发, 前提是必须保留 本 文档的完整性。 分享文档是一家专业 的 Java 技术网站, 给中 国 Java 程序员提供 各 种 Java 资 源如文档,工具,教程,社区交流等。 我们的官方网站是: http://chinesedocument.com 我们的官方论坛是: http://bbs.chinesedocument.com 请大家多多关注分享文档,我们还会发布更多优秀的文档! JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 2 页共 46页 前言 什么也不写。 JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 3 页共 46页 目录 第1111章介绍JASPERREPORTSJASPERREPORTSJASPERREPORTSJASPERREPORTS.................................................................................................................................................................................................... 4444 第2222章介绍IREPORTIREPORTIREPORTIREPORT.................................................................................................................................................................................................................................................... 6666 第3333章总的 开发 流程 .................................................................................................................................................................................................................................................................... 6666 第4444章IREPORT IREPORT IREPORT IREPORT 使用 说明 ................................................................................................................................................................................................................................7777 第5555章简单 报表 制作 ............................................................................................................................................................................................................................................................ 12121212 第6666章动态 报表 的制 作 ................................................................................................................................................................................................................................................ 18181818 6.16.16.16.1 给报表传入参数:................................................................................................................................................................................................................................................................................................................................19191919 6.26.26.26.2 带查询的报表制作................................................................................................................................................................................................................................................................................................................................21212121 6.36.36.36.3 动态设置查询条件的查询报表制作................................................................................................................................................................................................................................................ 27272727 第7777章如何 插入 图片 ............................................................................................................................................................................................................................................................ 31313131 7.17.17.17.1 显示本地磁盘上的图片........................................................................................................................................................................................................................................................................................................ 31313131 7.27.27.27.2 显示数据库中的图片.................................................................................................................................................................................................................................................................................................................... 34343434 第8888章JASPERREPORTS JASPERREPORTS JASPERREPORTS JASPERREPORTS 和STRUTS2 STRUTS2 STRUTS2 STRUTS2 的结合 ........................................................................................................38383838 8.18.18.18.1 安装JasperReports JasperReports JasperReports JasperReports 插件............................................................................................................................................................................................................................................................................ 38383838 8.28.28.28.2 配置生成JasperReports JasperReports JasperReports JasperReports 报表的struts.xml struts.xml struts.xml struts.xml 配置文件........................................................................................................................ 39393939 8.38.38.38.3 生成JasperReports JasperReports JasperReports JasperReports 报表............................................................................................................................................................................................................................................................................ 41414141 第9999章附注 ........................................................................................................................................................................................................................................................................................................ 42424242 9.19.19.19.1 iReport iReport iReport iReport 中的分页控制.................................................................................................................................................................................................................................................................................................... 42424242 9.29.29.29.2 iReport iReport iReport iReport 中变量的介绍.................................................................................................................................................................................................................................................................................................... 43434343 9.39.39.39.3 工作区介绍................................................................................................................................................................................................................................................................................................................................................................ 44444444 9.49.49.49.4 分栏的设置................................................................................................................................................................................................................................................................................................................................................................ 44444444 JasperReportsJasperReportsJasperReportsJasperReports &&&& 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 文件 , 还 包括了 JasperReports 项目的 API 文档 。 docs:存 放的 是两份 XML 文档 ,没 有什 么用 。 lib:存 放的是 JasperReports 项目 编译 和运 行所 需的 JAR 文件 。 src:存 放的是 JasperReports 项目 的所 有源 文件 。 JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 5 页共 46页 为了在我们的项目中使用JasperReports 项目,我们应该将dist 路径下的 jasperreports-3.0.0.jar 文件 复制 到应 用的 CLASSPATH 路径 下。 如 果是 web 应用 , 将 改文 件复 制到 Web 应用的 WEB-INF/lib 路径 下。 不过 JasperReports 框架 生成 其他 格 式 的文 档还 依赖 另外 一些 开源 项目 , 如 果 生成 PDF 文档 依赖 iText 项目 , 将 JasperReports 的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 框架 了。 让我 们一 块体 验她 的魅 力吧 ! JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 6 页共 46页 第2章 介绍 iReport 不过 ,在 开发 报表 之前 还得 先说 一下 iReport 工具 : 我们 要想开发一个报表必须先定义一个报表设计文件即一个特殊的XML 文件 , 这 份 XML 文件中包含了大量的 JasperReports 标签,我们没有必要在去了解 JasperReports 标签 的详 细含 义。 设计 XML 此文 件是 相当 的繁 琐的 。即 使设 计一 个简 单的 静态 报表 也要 写 上好 多的 代码 , 而 且 非常 容易 出错 。 好 在 有了 iReport 工具,iReport 也是 开源 组织 sf.net 中的一款免费软件,主要作用就是用可视化的方式设计生成 JasperReport 所使用的报表 格式文件,因为 JasperReport 本身并未提供很好的可视化报 表设计工具, iReport 的出 现正 好弥 补了 这个 缺陷 。 因此 现在 我们 就不 用在 亲自 去设 计那 繁琐 的又 必须 使用的 XML 文 件了,使用iReport 工具以所见即所得的方式来生成,这样大大的提高了工作效率。 JasperReports 和iReport 结合 起来 使用 ,你 会深 深的 被她 们提 供的 功能 所折 服的 !! 我们首先要在www.jasperforge.org 下载iReport 的最新版本。(iReport- 3.0.0.zip)。在 压缩 包解 压后 有一个 iReport.exe 文件 ,双 击即 可运行 iReport。 第3章 总的开发流程 在详 细介 绍之 前, 先总 体的 说一 下开 发报 表的 流程 ,让 大家 在整 体上 有个 认识 : 1.开发 人员 开发 报表 设计 文件 , 也 就 是定 义一 个 *.jrxml 文件 ( 就是 最开 始的 那个 XML 文件 )。 2.使用 JasperReports 提供 API 中的 JasperCompileManager 类编 译 *.jrxml 文 件, 编译 后生 成一 个 *.jasper 文件 。 3.使用 JasperReports 提供 API 中的 JasperFillManager 类填 充编 译后 的 *.jasper 文件 ,填 充后 生成 一个 *.jrprint 文件 。 4.使用导出管理器(JasperExportManager )或者各种格式的文件导出器 (JRXxxExporter)将*.jrprit 文件 导出 成各 种格 式的 报表 文件 。 也 可 以使用 JRViewer 工具 类来 直接 浏览 报表 。 开发 流程 图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 7 页共 46页 第4章 iReport 使用说明 首先我们先开发一个静态的报表为例,介绍如何利用 JasperReports+iReport 开发 JasperReports 报表 。 iReport 的应 用: 这是 个既 简单 有复 杂的 事情 , 说 他 简单 是因 为这 里没 什么 任何 技术 含量 , 完 全类 此 word 的操 作, 说起 复杂 是因 为需 要这 些报 表组 合的 具有 一定 的美 感。 双击 iReport.exe 文件 ,即 可打开 iReport 主页 面: 我们 一睹 她的 模样 吧! JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 8 页共 46页 单击 菜单 中的 ’档案 ’菜单 ,然 后在 选择 “开启 新档 ”菜单 项, 将出 现下 图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 9 页共 46页 我们 可以 更改 报表 的名 称, 页 边距 的设 置以 及选 择纸 张的 大小 和类 型。 除 次 之外 比较 重 要的 一点 就是 : 如 果 报表 文件 需要 使用 中文 字符 , 我 们 应单击 i18n 选项 卡, 在 该 选 项 卡的 “XML 编码 ”输入 框中 输入 GBK。如 图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 10 页共 46页 我们 大家 都熟悉 word 了,word 中的 分栏 给我 们带 来极 大的 方便 , 同 样在 pdf 报表 中 分栏也是必不可少的,我们也可以通过设置对 pdf 报表进行任意次的分栏。上两个图 的“字段 数 ”选项 卡, 我们 都看 见了 吧! 单击 该选 项卡 得到 下图 : JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 11 页共 46页 字段 数输 入框 的数 就代 表了 所分 的栏 数, 默 认是 1, 也 就是 不分 栏。 如 果 要分 两栏 我 们 把他 改成 2即可 。 主 页面的各个工作区介绍 : 1.设置 文本 格式 的工 具按 钮: 2.文本 排列 工具 按钮 : 3.资源 管理 器: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 12 页共 46页 4.控制 台: 5.中间 空白 的一 大部 分则 是报 表设 计区 了。 6.最后 介绍 我们 常用 的, 也是 最重 要的 一个 : 我们 经常 要用 到的 就是 “T”,“F”这两 个按 钮了 。 “T”添加静态文本。 “F”添加文本字段。(动态)。其他按钮我们可以尝试的试试它们 的功 能。 第5章 简单报表制作 (一 )、 首先 我们 要做 重要 一步 ,打 印出 中文 ,这 不是 必不 可少 的, 那就 是为 当前 报表 建一 个 风格 (Style),并设 置为 当前 默认 风格 。 步骤 : 1. 单击 菜单 中的 ’格式 ’菜单 ,然 后在 选择 “Style”菜单项,将出现下图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 13 页共 46页 2.单 击 “New”按钮 :出现 Add/Modify Styles 对话 框: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 14 页共 46页 3.Add/Modify Styles 对话 框设 置: 3.1 设置 Styles 标签 : 在Styles name 中输 入一 个名 字, 名 字 任意 , 并 设置 成默 认的 风格 : 设 置 后 如 图: 3.2 设置 Text Properties 标签 : 拖动 滑动 块, 在下 面可 以看到 Text Propertise 标签 : 接着 点击 Font 选项 后的 按钮 ,将 弹出 如下 对话 框: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 15 页共 46页 在这 个对 话框 中, 我们 将对 打印 中文 问题 进行 设置 ,其 中主 要设 置有 两项 : PDF Font Name 设置 为: STSong-LightSTSong-LightSTSong-LightSTSong-Light PDF Embedded 设置 为: UniGB-UCS2-HUniGB-UCS2-HUniGB-UCS2-HUniGB-UCS2-H (Chinese(Chinese(Chinese(Chinese Simplified)Simplified)Simplified)Simplified) 设置 后如 图: 然后 点击 OK 即可 。打 印中 文的 PDF 报表 设置 完成 。 JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 16 页共 46页 至此,总结一下,PDF PDF PDF PDF 中 要想打印中文有三个地方要设 置 : 第 一, CLASSPACLASSPACLASSPACLASSPATHTHTHTH 中必须增加中文支持包iTextAsianiTextAsianiTextAsianiTextAsian。第二,在i18n i18n i18n i18n 标签中XML XML XML XML 编码必须是 GBKGBKGBKGBK( 要手动输入) 。 第三, 要设 置 PDFPDFPDFPDF FontFontFontFont Name Name Name Name 和PDFPDFPDFPDF EmbeddedEmbeddedEmbeddedEmbedded。 (二 )、 通过 “T”添加 静态 文本 :来制 作一 个简 单的 报表 : 单击 “T”按钮 ,然 后在 设计 区进 行拖 拽: 插入 静态 文本 后的 报表 如图 : 然后 保存 ,保 存后 便可 得到 一个 *.jrxml 文件 。假 设我 们保 存为 test.jrxml 放在 C盘 根目 录下 。 这 个 文件 相当 于我 们手 工编 写的 那个 XML 文件 。 这 份 最原 始报 表设 计文 件 (类 此于 java 的源 文件 ) 可 以生 成各 种格 式的 报表 , 包括 PDF 文档,Excel 文档,HTML 文档等。所以使用 JasperReports 开发报表的核心工作就是编辑一个报表设计文件。 这份 报表 文件 不会 自己 变成 任何 报表 , 我 们必 须对 它进 行编 译, 填 充 数据 , 导 出 等工 作。 编译 :有 两中 编译 方法 , 第一 种是 使用 JasperReports 的API 进行 编译 , JasperCompileManager.compileReportToFile(JasperCompileManager.compileReportToFile(JasperCompileManager.compileReportToFile(JasperCompileManager.compileReportToFile(““““c:\\test.jrxmlc:\\test.jrxmlc:\\test.jrxmlc:\\test.jrxml””””,,,,””””*c:*c:*c:*c: \\test.jasper\\test.jasper\\test.jasper\\test.jasper””””);););); 第一 个参 数是 编译 的源 文件 ,用 绝对 路径 即可 ,第 二个 参数 是要 编译 生成 的文 件名 称。 第二 种是用 iReport 编译 , 单 击菜 单中 的 ’建立 ’菜单 , 然 后在 选择 “编译 ”菜单 项, 则 就 对 当前 的文 件进 行了 编译 , 生成 jasper 文件 。 因 为 我们 肯定 是用 iReport 开发 , 所 以 第 一种 编译 的方 式不 怎么 常用 了。 JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 17 页共 46页 填充 : jasper 文件 依然 不能 变成 报表 ,还 需要 给报 表填 充数 据, 填充 报表 时可 以填 充报 表所 需 的数 据源 , 参 数 等内 容, 而 报 表就 负责 显示 根据 数据 源查 询的 结果 和参 数等 。 这 个 只 能 是利用 API 实现 了。 方法:JasperFillManager.fillReportToFile(JasperFillManager.fillReportToFile(JasperFillManager.fillReportToFile(JasperFillManager.fillReportToFile(““““c:\\.jasperc:\\.jasperc:\\.jasperc:\\.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(); //设置 要导 出的 实例 JasperReportsJasperReportsJasperReportsJasperReports &&&& 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}:访问 字段 ,通 常对 应查 询字 段或 者集 合元 素的 属性 值。 (字 段即 数据 库中 表的 列名 ) JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 19 页共 46页 6.16.16.16.1 给报 表传 入参 数 首先 我们 要在 报表 中加 入参 数, 然 后 在填 充数 据时 , 给 相 应的 参数 赋上 值, 最 后将 赋 的 值显 示在 报表 中。 在报 表中 加入 参数 :单 击菜 单中 的 ’预览 ’菜单 ,然 后在 选择 “报表 参数 ”菜单 项, 将出 现 下图 : 单击 新增 则出 现下 图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 20 页共 46页 在Parameter Name 中添 加参 数的 名字 , 在 Type 中为 参数 设置 类型 。 最 后 单击 OK 即可 。可 以添 加任 意多 的参 数。 比如我们添加了 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 报表 中则 把程 序中 赋的 值显 示了 出来 。 JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 21 页共 46页 6.26.26.26.2 带查 询的 报表 制作 更多 的时 候, 系统 的报 表显 示的 是来 自数 据库 里的 数据 ,既 需要 通过 查询 来获 得报 表 数据 。并 且结 合前 面介 绍的 带参 数的 报表 ,可 以在 执行 查询 时动 态的 传入 参数 。 要想 从数 据库 中取 数据 , 第 一 步我 们肯 定要 连接 数据 库了 , 我 们用 iReport 制作 报表 , 当然 要拿 iReport 来连 接数 据库 了。 所 以我 们推 断, iReport 肯定 有连 接数 据库 的接 口, 下 面我 们开 始连 接数 据库 。以 连接 Oracle 数据 库为 例来 说。 首先 应 将 Oracle 的驱 动 程 序 复 制 到 iReport 的lib 路径 下 , 这 样 完 成 在 iReport 中安 装 Oracle 的驱 动。 重启 iReport 主程 序。 然后 建立与 Oracle 数据 库的 连接 : 1.单击 iReport 主菜 单上 的 “Data”菜单 , 在 出 现的 菜单 中单 击 “连接 /资料 来源 ”菜单 项, 即可 看到 下图 所示 对话 框: 该对 话框 用于 维护 iReport 的数 据库 连接 , 包 括 新建 数据 库连 接和 修改 数据 库 连 接。 2.单击 New 按钮 ,将 出现 下面 对话 框: JasperReportsJasperReportsJasperReportsJasperReports &&&& 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页 我们 选择 “字段 数 ”标签 ,如 图: JasperReportsJasperReportsJasperReportsJasperReports &&&& iReport iReport iReport iReport 开发 指南 分享文档-chinesedocument.com 版权部分 第 46 页共 46页 字段 数就 单表 分的 栏数 ,要 想分 成两 栏,把 1改为 2即可 。

下载文档,方便阅读与编辑

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

需要 15 金币 [ 分享文档获得金币 ] 6 人已下载

下载文档

相关文档