ireport开发说明文档_第1页
ireport开发说明文档_第2页
ireport开发说明文档_第3页
ireport开发说明文档_第4页
ireport开发说明文档_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iReport 用户手册 目录 Giulio Toffoli 1 1 序言 6 什么是 iReport 6 功能特点 7 iReport 社区 7 鸣谢 8 2 入门 8 必要条件 8 下载 9 编译 iReport 9 基本的配置 9 创建 JDBC 连接 12 第一个报表 13 命令行选项 17 3 JasperReports 基础概念 17 JasperReports 17 报表生命周期 18 Jrxml 源代码和 jasper 文件 18 数据源和打印格式 22 版本兼容性 23 表达式 24 一个简单的程序 25 4 报表结构 26 Bands 26 Title 27 Page header 27 Column header 27 Group header 28 Detail 28 Group footer 28 Column footer 28 Page footer 28 Last Page footer 28 Summary 29 Background 29 报表属性 29 列 30 高级选项 32 脚本 32 更多 33 Title on a new page 选项 33 Summary on a new page 选项 35 Floating column footer 选项 35 打印顺序 35 无数据打印 如果没有数据时 36 i18n 36 Resource Bundle Base name 36 XML 源文件的编码设置 37 5 报表元素 37 选择并插入元素到报表中 37 布置和元素顺序 40 使用元素树管理元素 43 基本属性 43 线 46 矩形 46 椭圆 47 图象 47 文本元素 50 静态文本 51 文本域 51 子报表 55 专用元素 56 图表 56 条形码 56 超连接 58 Reference 59 LocalAnchor 59 LocalPage 59 RemoteAnchor 59 RemotePage 59 6 字体 59 字体 59 扩展字体 60 编码 61 使用 Unicode 字符 61 报表字体 61 7 字段 参数和变量 62 字段 62 SQL 查询的字段注册 63 JavaBean 的字段注册 64 JRExtendedBeanDataSource 的字段注册 65 字段和文本域 65 参数 66 在查询中使用参数 67 使用程序传递参数 67 内置参数 69 变量 69 内置变量 71 8 Bands and groups 71 Bands 71 Groups 72 9 Subreport 77 创建子报表 78 连接子报表到父报表 78 参数的通道 78 指定数据源 79 指定子报表 80 一步一步举例 80 返回参数 86 10 数据源 87 iReport 中的数据源 88 JDBC 连接 89 ClassNotFoundException 91 URL 不正确 91 连接参数不正确 91 使用 JDBC 连接 91 字段注册 92 JRDataSource 接口 93 JavaBean 作为数据源 93 JavaBean 的一个字段作为数据源 95 XML 数据源 96 字段的注册 98 XML 和子报表 100 CSV 数据源 104 字段的注册 105 JREmptyDataSource 105 实现一个新的 JRDataSource 106 用 iReport 实现个性化的 JRDataSource 108 JavaBean Extended 数据源 110 11 国际化 111 Resource Bundle Base Name 111 恢复本地化字符串 113 格式化消息 114 配置本地化报表 114 12 脚本 115 JRAbstractScriptlet 类 115 iReport 处理脚本 117 用脚本部署报表 118 13 模板 119 模版结构 119 使用通用模板 121 14 图表 123 创建一个简单的图表 123 级 Series 128 自动级 129 手动级 130 图表类型和属性 132 饼图 133 3D 饼图 133 柱状图 134 3D 柱状图 136 线图 136 区域图 137 15 插件和附加工具 137 插件结构 XML 文件 138 it businesslogic ireport plugin IReportPlugin 类 139 大型编译器插件 142 文本向导插件 144 16 常规问题解决方案 145 打印百分比 145 计算组的发生数 146 分离 detail 148 插入一个页 149 交叉报表 152 使用多重连接找回数据 152 如何使用存储过程 153 1 序言序言 什么是什么是 iReport iReport是一个能够创建复杂报表的开源项目 并且它能调用 JasperReports库应用于任何一种java应用程序 本身是分布式的且由符合GNU 通用公共许可的百分之百纯java编写 由于它丰富的图形界面 你能够很快的创建出任何一种你想要的报表 iReport能够让我们提高技术方面的信心 比如它能降低学习JasperReports的 XML语法的难度 而且能够为熟练的技术人员节省大量的时间并能开发出非常精 细的报表 这里将带给大家的虽然是0 4 1版本的 但是大部分的资源都是来自于 0 2 0版本发布之后的 因为早先的0 2 0版本不是用java编写的 而是用 Visual J 因此这些版本都只能在微软的Windows 系统运行 自从0 2 0版本 发布以后便停止了用Visual J 的开发 我的任务就将最新的版本的iReport介绍给大家 因此 我不可能应用老的 版本讲解 功能特点 功能特点 以下将列出iRreport的一些比较突出的功能 百分之九十九支持JasperReports XML标签 所见即所得的报表编辑器 也就是说它具有创建矩形 线 椭圆 正文区域 标签 图表 子报表 条码等完善的工具图标供使用 嵌入式编辑器带有灯泡提示代码规则 支持Unicode和非拉丁语言 俄文 中文 日文 韩文 文档结构浏览器 完善的报表编译器和输出器 支持所有可以通过JDBC连接的数据库 支持所有有效的数据源 自动报表创建向导 支持子报表 源文件的备份 支持文档模版 支持TrueType字型 支持本地化 可添加插件扩展功能 完全支持脚本 支持图表 标准对象库管理 页码 支持拖拽 无限制的取消 重做 iReport开发团队是那些来自世界各地的工程师 他们默默无闻的用他们熟 练的技术和丰富的经验日负一日的为iReport添加功能排除bugs iReport 社区 社区 iReport网址是 企业的网址是 讨论交流 Help 在这里你不但可以提出要求 也可以提出技术上的问题 Open Discussion 这个社区是用来发布注释 判定讨论结果和提出新的功能建 议的 如果你还是无法解决你的问题 不要着急 我们还有一个特殊的跟踪系统来帮 助你 为了能编译jasper文件就必须 安装完整的java2 JDK 不光是 JRE 这个运行环境 如果你还想编译 iReport源代码 你还要安装Jakarta Ant version 1 6以上版本 硬件方面 类似于java的环境 iReport也占很多的RAM 所以它也需要只 少256Mb 的内存和至少20Mb的磁盘空间 下载下载 你可以到SourceForge网站上的企业主页上下载最新发布的iReport 可能有几种不同的分类 iReport x x x zipiReport x x x zip 这是官方的zip格式的二进制文件 iReport x x x tgziReport x x x tgz 这是官方的tar gz格式的二进制文件 iReport x x x src zipiReport x x x src zip 这是官方的包含源代码的zip格式的二进制文件 x x x表明了iReport的版本号 每一种都包含必须使用的第三方的库和程序及 附加文件 例如模板和一些html格式的基础教程 如果你想要更多最新版本的源程序 你可以直接地连接CVS库 但必须要有 一个CVS客户端 像CVS JCVS或者WinCVS 如果你有CVS那就执行如下的命令行 cvs d pserver anonymous cvsroot ireport login 目前好象无法连接 and then all on the same line cvs z3 d pserver anonymous cvsroot ireport co iReport2 这样CVS客户端就可以将iReport的所有文件下载到本地 包括所有的文档 库和所有有用的编译iReport的文件 就使用其他CVS的用户来说 SourceForge网站也自制了详细的解释用来检 出工程 编译编译 iReport 这些源中包含一个build xml文件 它是被Jakarta Ant 用来编译和启动 iReport 和或用来创建不同类型的工程 下载 iReport x x x src zip 解压缩到你指定的目录 例如 c devel or usr devel on unix system 打开命令提示符或shell 进入你 解压的目录和iReport目录 C devel iReport 0 3 2 antant iReportiReport 如果这个源完整的存在与目录中 它将被编译进类中iReport就能直接启动 基本的配置基本的配置 如果选择下载了iReport二进制版本的 那就直接将该压缩文件解压缩到指 定目录 例如 c devel or usr devel on a unix system 打开命令提示 符或shell 进入被解压缩的目录 输入iReport目录 C devel iReport 0 3 2 iReport batiReport bat or on unix iReport sh iReport sh in this case it should be preceded by a chmod x if the file is not executable 第一步执行完毕时iReport将创建一个名叫 ireport 的文件在用户的主 目录 这里的主目录指由自己设置和配置的目录 如果文件夹不能被创建 这 就有可能是解压缩造成的影响而不能够配置成功 这时 你就要自己手动的创 建一个目录 进行下一步之前你需要将tools jar 文件拷贝到JDK的lib目录下以及 iReport的lib目录下 如果没有这个文件的话在编译report时将会产生一些异 常 carried out by using classes contained in this java library 在 MacOS X系统中tools jar文件就不需要拉 因为具有编译ireport所必须的类的 classes jar文件代替它 iReport的初始化配置包括 设置所要查看运行后的文档的格式 选择语言 设置编译后的文件目录 其他的配置说明将在以下进行 为了继续的进行配置 必须打开ireport 然后选择菜单选项中工具选项 menu Options Tools 此时将出现2 1选项窗口 2 1图 选择你最熟悉的语言接下来点 Compiler 选项卡 2 2图 这个选项卡是用来设置编译后的文件存储目录 默认的目录会在iReport的根目 录 一般情况下是要指定一个有效的目录来保存编译文件 这个目录也可以是 加载报表源时的目录 既然这样就选择 Use the reports directory for compiles 复选框 2 3图 完成以上列出的配置后 接下来我们还要设置报表输出格式和查看XML源所 用编辑器 重启iReport继续设置上图的选项 创建一个空白报表测试一下我们的设置 menu File New Document 领悟一下iReport所提供的功能 之后点工具条上的运行按扭 如果你操作 的正确 将会有一个保存jrxml文件的提示 相应的一个jrxml文件将被创建 之后会发布出一个预先设置的空白页 这就意味着你刚才的配置ok拉 创建创建 JDBC 连接连接 一个有代表性的关系数据库可以提供最普通的数据源给一个报表 首先 我们来看看如何设置一个JDBC连接 点菜单Datasource Connections Datasources 并点窗口的连接列表的new按扭 此时打开一个新建 连接 图2 4 窗口 在这个面板上填写连接名 i e My new connection 并选择正确的JDBC驱动 iReport支持大部分的JDBC驱动URL格式 因此你能够自动创建一个URL通过在相应的输入框中填写服务器地址和数据库名 若要完成连接你就必须输入数据库名和密码用来连接数据库 如果你想保存密 码 那就将 Save password 打对勾 注意 iReport将密码保存在一个txt文件中 如果你不想保存密码就不要 选择 Save password 复选框 点test按扭测试一下连接 不过最好是再保存之前测试 2 4图 iReport被装入的JDBC驱动只有MYSQL和HSQLDB 如果在测试期间发现有 ClassNotFound异常 很有可能是能被选择的驱动的classpath中不包含JAR或 ZIP 文件 不用关闭iReport 拷贝这个JDBC驱动到lib目录下 重试一下 这个JAR将被重新被iReport加载 在第十章 我们将深入广泛的解释所有的数 据源的配置形式 测试通过后按保存按钮保存连接 通过这种方式我创建了一个新的数据源 这样iReport就可以将它作为预置的数 据源来使用 选择菜单中 build Set active connection 项目 2 5图 从列表中选择我们的连接按OK 按钮 图2 5 那么iReport就会在需要使用数据 库时用这个连接 我们想要字段就可以通过SQL查询和打印来创建 第一个报表 第一个报表 现在我们已经安装配置了iReport 并创建了一个JDBC连接数据库 接下来 我们将创建一个简单的报表用这个向导 这个例子以及以后的所有例子我们都用HSQL 数据库引擎 HSQLDB 它是一个 小型的用java编写的关系型数据库 而且提供了JDBC驱动 如果用它的话 我 们就必须拷贝hsqldb jar文件到libs目录 这个文件已经在0 3 2版本之后都包 含在发布文件中了 为了能了解到更多的关于这个小家伙的信息 就登陆 HSQLDB的官方网站 为了能设置一个有效的数据库连接我们给出以下例子 来源与本手册 使用 以下参数 ProprietiesValue NameNorthwind JDBC Driverorg hsqldb jdbcDriver JDBC Urljdbc hsqldb c devel northwind northwind Usernamesa Password 表格2 1 配置的最后请设置Northwind作为一个有效的连接 Build Set active connection 选择菜单 File Report Wizard 这是一个用来一步步创 建报表的工具 图2 6 在文本区域输入SQL查询用来充当报表中的数据 例如 select from customers order by country 点 Next 这里的分组选项是非常重要的一条 接下来我们将详细讨论 iReport 将读取customers 表的这些字段 图 2 7 图2 7 选择你需要的字段然后点 Next 你会得到一个提示 你希望从这些被选择到报 表中的那个字段用来分组 即便要 图 2 8 图2 8 根据这个向导 你最多可以创建四个组 其他的可以随后来定义 事实上 它是可以设置很多组的 我们将定义一个简单的组用COUNTRY字段 图 2 8 下一步向导会让你选择一个能被用来创建一个基本报表的模板 iReport提供了 一些非常简单摸板供选择 接下来我将试着创建一个新模板 目前我们知道的 有两种类型的模板 the tabular templates 所有的记录都在同一条表格线 内 一个字段后面跟的一个数据 the columnar templates 这里是将字段按 列排列 每列一个字段 下面将是所有数据 图2 9 第一个报表选择tabular模板 它是著名的T样式 T的意思就是tabular 一 但你选择这个模板 那就点next 之后向导将展示我们操作的结果 点Finish 来创建这个报表 它将展现在iReport的中央区域 等待被执行 执行之前你得 先保存报表源 这样它才能被用来编译创建报表 该如何编译创建呢 你可以 点工具条上按钮 使用连接的运行报表 图2 10 接下来你就点这个带连接的运行报表按钮 此时将会提示你输入你个文件名来 保存这个文件 可以以report1 jrxml的文件名来保存 在控制面板上的下面的 窗口将会有一些提示信息 这些信息就是告诉你发生了什么事 一个报表被编 译 并完成创建 输出 exported 图2 11 操作完成后 如果不出以外 这个报表将以缺省的PDF格式展示在你面前 原因 是你最初设置输出格式为PDF 命令行选项命令行选项 可能有一些特殊的参数出现在命令行上 所有的参数不区分大小写的 特们能 被缩写知道最短 例如 这个命令 ireport home c就可以被指定为 i 并 不是它因为以 i 开头 命令解释器将认为 i是一个不明确是否是 ireport home选项 根据需要Boolean型选项可能被指定用缩写型 opzione和扩展型 opzione true 或 opzione false 以下命令可以得到命令选项的列表 iReport batiReport bat 或 iReport sh iReport sh 以下的表格能解释不同的有效选项 它引用0 4 1版本 可能不能完成所有连续 的版本 OptionDescription config file 指定一个配置文件的文件名 这个文件不会修改ireport 他 将保存一个最终修改后的配置 到规范性的目录 用户主目录 ireport ireport home 指定程序目录 temp dir 指定一个存储临时性文件的目 录 user home 指定用户目录 默认的是系统 的根目录 version用这项可以立即打印出iReport 的版本信息 表格2 2 如果Ant被使用 它就不可能指定这些选项立即执行从命令行 但是它却是必须 的 可以修改build xml文件来达到 可添加标签有利于java任务在 iReport运行时 3 JasperReports 基础概念基础概念 JasperReports iReport的核心就是一个开源的JasperReports库 它是由一个罗马的叫Teodor Danciu的开发者开发 是目前最有利于创建分布式和强有力的报表的免费软件 库 这章我们就来阐述一下JasperReports的基础概念来加深我们对iReport工作 流程的理解 JasperReports API 为报表定义的XML结构语法 以及在我们程序中需要用的库 的详细资料都归档在这本名叫 The JasperReports Ultimate Guide 的手册中 这 本书非常的超值 目前标价35 其他可以直接利用的信息和例子可以到官方网 站 两者不相同的是 iReport的分布式依照GPL规范 而JasperReports依照LGPL规 范 因此它的局限性很小 这就意味着JasperReports能够被随意应用于商业 不用购买昂贵的软件许可或呆在家里从网上搜索复杂的开源的许可 这是用 iReport创建一个被用做商品报表的基本原则 事实上 程序仅仅需要用 JasperReports库来打印出报表来 仅仅在程序运行时用到它 由于没有完整的 商业许可 指需求以外的许可 iReport只能作为一种开发工具 也不可能成 为一个不符合GPL分布式标准的程序的一部分 报表生命周期 报表生命周期 报表的生命周期和java类的生命周期非常的相似 Java被一些源文件来组成 也 就是它可以依照它的语言规则进行自身的扩展 编写 这些源代码被编译器编 译成扩展名为class的文件 可以通过接口来实例化或直接加载到内存中调用 执行期间这些属性将被加强 同样的 一个报表也是由一个源代码的文件来描述 这个源文件就是由 DTD jasperreport dtd version 0 6 3 is listed in Appendix B 来定义的XML标记 在0 5 3版本中它的源文件扩展名变成了 jrxml 例如 JasperReports XML 取代 了一般的 xml扩展名 报表的源代码被编译成jasper文件 扩展名是 jasper jasper文件是一种预报表 严密的说就像是java的类被封状成的对象 Jasper文件 通过你的应用程序来加载 它被添加一个数据源的标记从而创建报表 接着它 就能以你想要的格式输出 例如 pdf或xls 因此它可以被定义成两种截然不同的动作 一个是用于执行在开发期间 设计 和编写一个报表 编辑一个jasper源文件 另一个是用于执行在运行期间 加载开发期间的jasper文件生成报表 Jrxml 源代码和源代码和 jasper 文件 文件 已经解释过 一个报表就由一个被创建的DTD文件定义的XML文件 jasperreport dtd 这个源文件是由一系列的片段定义 这些片段就是一些关于 报表的物理特性 像这个页面的尺寸 版面的布置 以及版块的高度等等 还 有一些逻辑上的特性 像参数 变量 一个为得到被选择的数据的查询的定义 等等 简单的说 这个jrxml源代码包含的片段就是下面这些 Report main characteristics Property 0 Import 0 Global font 0 Parameters 0 SQL query 0 1 Fields 0 Variables 0 Groups 0 Group header Group header elements 0 Group footer Group footer elements 0 Predefined bands Predefined bands elements jrxml文件例子 清单3 1 图3 1展示了清单3 1打印出来的结果 其实清单3 1是iReport的加长型 它比我 们需要的太长拉 这是因为iReport不能生成精短的代码 例 不能一些具有缺 省值的属性 图3 1 不管如何减少XML代码 也无法改变报表的最终结果和生成速度 在编辑 通过一些JasperReport类来实现 jrxml文件期间 这个xml文件被分解 加载为JRBaseReport对象 JRBaseReport一个丰富的数据结构 可以将xml的内 容精确的放到内存中 所有的解析表达式被加载 生成它相应java类文件 这 些类继承JRCalculator 依靠普通java编译器编译成的这些类被加载为缓冲字节 开始初始化JRBaseReport 一个JasperReport类 继承JRBaseReport类 被实例化 先前的JRCalculator类缓冲字节被存储在新类的compileData区域 从而获得的 JasperReport类连续的写进jasper文件 并随时准备被加载 JasperReports的速度取决于实际情况 所有的报表规则被编辑到java的本地字节 码中 报表的结构在编辑时被检验 而不是在运行时 数据源和打印格式 数据源和打印格式 通过其他方式提供数据来完成打印是不可能的 这些最经久耐用 吸引人的报 表是没有意义的 Without the possibility of filling a print through some dynamically supplied data the most sophisticated and appealing report would be useless JasperReports 允许通过两种不同的方法来提供指定的数据来打印 通过参数和 数据源 这主要依赖一个普通的接口JRDataSource 图3 2 一整章的内容都是关于datasources 哪儿将解释它如何应用在iReport中和如何 能定义一个符合常规的datasources 为了能提供一个准确的JasperReports JRDataSource能读取一组被整理在表格中的记录体 行和列 JasperReports可能被报表用任何地方 来代替一个直接的datasources 一个 JDBC 已经举过例子 能连接任何一个关系型数据库 对指定的一个报表执行 sql查询 如果数据 通过datasources 不足够 或者它需要指定特定的值完成 执行 它将很有可能产生一些名值对传送给打印机 这些对被叫做 parameters 参数 他们可以被预先性的传给报表 通过fillManager 能够加 入一个jasper文件和datasource在一个 JasperPrint 对象 通过实现JRExporter接 口的类这个对象能够创建一个真实的打印以你所期望的格式输出 JasperReports 可以由你做主来选择不同格式的输出 用来创建 pdf xls cvs xml html 等文件 通过JRViewer类能够直接打印你屏幕上所看到 版本兼容性 版本兼容性 当一个新的版本的JasperReport被发布 通常一些类会有所改变 这些改进的 类特意地定义报表的结构 所以为了避免在编译报表时因用了不同的库而产生 的冲突 JasperReport使每个编译过的jasper文件具有联系性 可以精确的判别库 版本并使用老版本进行编辑 如果你执行一个打印加载一个jasper文件 它不同 于老版本支持的文件 就会产生一个错误 可能是这种情况 java io InvalidClassException net sf jasperreports engine base JRBaseReport local class incompatible stream classdesc serialVersionUID 406 local class serialVersionUID 600 net sf jasperreports engine JRException Error loading object from InputStream Caused by java io InvalidClassException net sf jasperreports engine base JRBaseReport local class incompatible stream classdesc serialVersionUID 406 local class serialVersionUID 600 然而 老的报表源可能被编译用新版本的库 这个源代码被第一次编译 这是 因为锌版本的通常仅仅传入新的标签但又不是必须的 并没有修改XML通常的 结构 移植一个JasperReports到下一个版本下完全可以的 它能够很快的被执行由于 一个叫massive compiler 的iReport插件 它能够编辑所有在同一目录结构下的报 表 能安全的拷贝已经现有的jasper文件 我们将讨论massive compiler 在插件章节 表达式 表达式 所有的JasperReports的规则被定义通过表达式 一个表达式符合java语法 即有 一个对象和结果 表达式的例子 This is an expression new Boolean true new Integer 3 P MyParam equals S Yes No 无效的表达式例子 3 2 5 true P MyParam 1 Yes No 详细的查看第一个和第二个例子都是无效的 因为他们都是简单类型 int 在第 一个事例 boolean在第二个事例 第三个表达式也无效的 因为采取 MyParam参数 之后我们将定义为 P 格式 是一个简单类型 它能被比较 通过 和一个int型 但结果不是true 表达式返回的类型是由上下文决定的 举个例子如果一个表达式恰好终止当一 个元素被打印之后 这个返回类型将是boolean型 同样地 如果我写一个加了 下划线的number型字段 返回类型就是Integer或Double 在表达式中我提到了参数 变量和字段 报表定义的语法概要 SyntaxDescription F name field 指定字段名 F means Field V name variable 指定变量名 P name parameter 指定参数名 P name parameter 这是一种特殊的格式 是报表 查询的一部分 这个参数肯定 不会负一个值传递给预编译语 句 但它是这个查询的一部分 表3 2 字段 变量 参数永远作为一个对象 他们可以负null值 他们的类型在被声 明时被指定 JasperReports0 6 2版本以后 出现了一个新类型 R name resource 结 构 它被用做字符串的本地化 我们将在国际化那章来讨论 通常定义一个返回对象用一个表达式是不够的 例如 如果你想打印一个罗马 字体的数字 或者用一个特别的数据代替周日 就可能要将详细的细节传给一 个外部类方法 这个方法应该声明为staitic 例如 MyFormatter toRomanNumber F MyInteger intValue toRomanNumber 是 MyFormatter 类的静态方法 带有唯一的int型参数并 传回这个罗马版的数字in a lace 很多地方都用到这个技巧 比如推断出一个CLOB区域的文本内容 或者添加 一个值到HashMap参数中 这种操作就不能依靠简单的表达式 一个简单的程序 一个简单的程序 我们用一个简单的程序 清单3 2 来完成这章关于JasperReports提出的介绍 这段代码将展示如何由一个jasper文件生成一个pdf文件 这里用一个特殊的 datasources JREmptyDataSource JREmptyDataSource 是一种空的datasources 我 们引用test jasper文件 清单3 1 来进行编译 import net sf jasperreports engine import net sf jasperreports engine export import java util public class JasperTest public static void main String args String fileName devel examples test jasper String outFileName devel examples test pdf HashMap hm new HashMap try JasperPrint print JasperFillManager fillReport fileName hm new JREmptyDataSource JRExporter exporter new net sf jasperreports engine export JRPdfExporter exporter setParameter JRExporterParameter OUTPUT FILE NAME outFileName exporter setParameter JRExporterParameter JASPER PRINT print exporter exportReport System out println Created file outFileName catch JRException e e printStackTrace System exit 1 catch Exception e e printStackTrace System exit 1 清单3 2 4 报表结构报表结构 这章我们将分析报表的构成 来观察一下它由那几部分构成 当用数据打印时 这几部分是如何运转的 Bands 一个报表依靠 type 页来定义说明 它被分成不同水平的一份被叫做bands 当 报表加入数据去打印时 这些部分被印刷很多次依照他们自身的属性 依照报 表创建者设计的规则 举个例子 page header 被重复的打印在每页的开始部 分 这样的话 每个band都会重复的打印每一单一的记录 这个 type 页被分成9个预先确定的bands作为新组被加进去 事实上 iReport 控制每一个头条 Group header 和一个摘要条 Group footer 为每一个组 图4 1 一个带总是和页的宽度一样 左右的空白除外 然而它的高度 即使已经被设 计好 但可能还会依据被包含在内的元素的实际来打印 它能够自由的延长靠 近页底 这种特色的出现在bands包含一个subreports或者text field时纵向的内容 通常情况下 bands的高度被用户指定一个 minimal height 不是所有的 bands能依照内容被这个外力改变 特别是 Column Footer Page Footer 和 Last Page Footer 所有的band高度的总和 除了background 总是小于或等于页的top 和bottome之间的最小高度 Title 这是首先看到的band 它被创建仅仅一次 可能被打印在每一分开的页 耍点 小聪明 你能利用这个模拟一个无效的subreports 随后我将看看如何做 关 于尺度的确认 它是不可能躲过去的 在报表页的高度设计期间 As regards the admitted dimensions it is not possible to exceed during design time the report page height 包含top和bottome标记之间 如果title 被打印在几张单独的页面上 这个band的高度不用被包括在整个band的高度之 内的 一般低与page的高度 Page header 这个band允许你设计一个page的header 它的高度在设计阶段被定义 通常不会 改变在创建报表的过程中 除非有垂直插入相当大的成分 例如这个textfields 包含很长的文本和subreports 页面的header出现在整个打印页的相同位置在 设计阶段期间 Title和Summary bands不包括page header 在打印一个单独的页 时 Column header 这个band在每一个详细的列开始时被打印 这column的概念一会儿再结实 通 常的 包含标签的tabular报表的列的名字被插入在这里 Group header 一个报表能容纳零个到多个group bands 它允许收藏详细的记录在不动 groups 有group header 自然要有group footer 他们能能独立的展现和取消 不同的属性被联合在一个group 他们确定他们的行为功过查看 graphic point 它是可能的影响一个新的页的group header或者一个newcolumn 打印这个band 在整个页的下面 如果这个bands超出了一个单独的页 以一个组的级别作为一 个page header 它 是可能的去修改被请求的高度并打印它 如果它是超过其 他的高度 这个group将被打印在一个新的page 特别要注意它的值由于太长 在打印时会无限的循环 等等 接下来我们将详细讨论groups Detail Detail band 将每个通过datasources读到记录响应的传给打印机 很可能 大多 数的元素都被放在这里 Group footer 这个band表示一个group的结束 通常它包含的区域显示小计或者分开图解元素 作为一条线 等等 Column footer 这个band的出现表示每一个column的结束 它的尺寸是不能被调整的 即使它 包含一个相当大的元素 像subreports或者文本域 Page footer 这是页脚 它和page header同时出现在每页 同column footer一样 他是不足够 大的 Last Page footer 如果你想使最后一页的footer与其他的页的footers不一样 这时可能就要用到这 个band 如果这个band的高度是0 他将被完全的忽视 其他确定结构的普通页 也能适用在最后一页 它首次出现在JasperReports的0 6 2版本 Summary 在其他的地方这个组名被叫做report footer 它允许你在report的最后插入你想要 的任何内容关于总结等 Background Band第一次出现在JasperReport0 4 6版本时 它由于许多用户的坚持不懈的要求 能够创建水印和similar effects而引入 整个页面的结构 它可以具有最大的高度 以至于和页面高度一样 报表属性 报表属性 现在我们已经看过报表的单个部分 我们将继续创建一个新的报表 按菜单上 的这个按钮选择New Document 打开一个窗口 在这里填写报表的属性 图4 2 这个窗口可以随时打开通过view菜单的Report properties 图4 2 报表的名字是第一个属性 这个名字是本地命名 它和源文件的名字是相互独 立的 它仅仅被JasperReports library 调用 例如 命名一个报表编译后的java 文件 页面的尺寸大概是报表最重要的属性 一系列报表的尺寸标准被提议 iReport 和 JasperReports使用的最小量度单位是像素 像素大小是75点每英寸 每英 寸的点数 然而 我们经常使用的报表的量度单位更为平常 像厘米 英寸或毫米 表4 1列出了量度标准和像素大小 由于尺寸管理基于像素 所以当我们用不同 的量度看同一数据会发生很大改动 Page typeDimensions in pixel 像素 像素 LETTER612 x 792 NOTE540 x 720 LEGAL612 x 1008 A02380 x 3368 A11684 x 2380 A21190 x 1684 A3842 x 1190 A4595 x 842 A5421 x 595 A6297 x 421 A7210 x 297 A8148 x 210 A9105 x 148 A1074 x 105 B02836 x 4008 B12004 x 2836 B21418 x 2004 B31002 x 1418 B4709 x 1002 B5501 x 709 ARCH E2592 x 3456 ARCH D1728 x 2592 ARCH C1296 x 1728 ARCH B864 x 1296 ARCH A648 x 864 FLSA612 x 936 FLSE612 x 936 HALFLETTER396 x 612 11X17792 x 1224 LEDGER1224 x 792 表4 1 通过修改高度和宽度 你就可以创建任意大小的报表 报表页的定位有 landscape和portrait选项 事实上这并没有太大的意义 因为报表页是由宽和高 来刻画它的尺度的 并且每个单页都是相互独立 然而这个属性可以别用来确 定报表的输出 页面的空白尺寸依赖于Margin选项卡的四个输入值来确定 列列 像你看到的那样 一个报表页被几条平行线分开为几部分 bands 这个选项页 是用来排版报表的 现在的这部分具有独立的数据 像title片段 或者page footers 和其他的片段一样被打印根据数据记录的不同从零开始 像group headers和detail 这个选项页的最后一个属性值能分开垂直的列为了利用报表 页中可利用的空间 上下文中的column的概念很容易被 field 搞混 事实上 column和记录集是没 有关系的 只和detail band有关系 意思就是说一条记录用十个fields和一个表 的话 不需要十列 然而 这些元素可以用table实现恰当的放置 十列将导致 一个很长的记录列 非常狭窄的横条 被打印 下面的例子将告诉你怎样设置 值为一个简单的列报表在A4纸上 图4 3 Columns的值是1 它的宽度和整个页面一样 除了空白 列之间的空间没有意 义 所以它的值是0 图4 4图4 5 看4 5图 这个页的大部分没有被使用 如果使用大量的列 这个报表看起来会 好看一些 图4 6展示了两列报表的尺寸大小 图4 6 既然这样 在这个 columns 我们输入2 iReport将自动的计算列的宽度依 照页的空白和宽度 如果你想在两列之间插入空白 那就为 spacing 填写一个 值 像4 8图中看到的 这个页面的空白有被更好的利用 滥用列的话可能将打印一个非常长列 像一个电话本一样 总之 当detail band和连续的bands出现超过一列的宽度空白时你要记住使用列来减少宽度 所 有的空白 列的宽度和每列之间的空白 加起来要小于页的宽度 如果不检验 这种情形的话可能导致错误产生 图4 7图4 8 在图4 5和4 7中页面上有用区域设置报表的元素 像fields images等等 这部 分是不可利用的 像空白和第一列余下的空白 The parts which are not utilizable such as margins and columns following the first one which have to be considered like the continuation of this one are highlighted in grey 高级选项 高级选项 以上我们看到的仅仅是基础关于设计的基础设置 现在我们将看一些高级选项 其中一些将被彻底的检查和粉肠详细的解释在以下章节 如果要想完全的理解 和应用 那就要在努力学习JasperReports的用法一直到精通 脚本 脚本 脚本是一个java类 它的方法执行在报表生成期间 通过触发一个特殊的事件 像一个新页的开始 一个group的结束等 我们常常可以看到那些生动的工具图 片 像MS Access 或 MS Excel 脚本就相当于一个module 是一些程序和特殊 的事件的关联或可返回的功能 在报表的上下文被插入 例如text field的表达 式 将有一个章节全部用来讲解脚本 在scriptlet选项卡 图4 9 可以指定一个外 部的脚本 java类 或激活iReport的内部脚本支持 图4 9 如果你不想使用脚本 那就设置下拉菜单的值为 Don t use scriptlet class 或者 在输入区域填写你所要使用的类的名字 更多更多 在 more 选项卡 图4 10 可以对打印进行设置 图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论