




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
报表设计基础及JasperReort,JFreeChart简明教程摘要本文先从通用的角度定义了与报表相关的各种概念。然后介绍了怎么应用JasperReport和Ireport设计报表,最后介绍了怎么使用JfreeChart生成图形报表。文章中出现的很多概念和定义都出自作者自己的思考,没有通用性,在阅读时请不必深究它的准确性。1、 什么是报表,什么是报表应用程序1.1 什么是报表报表是数据统计结果的呈现。常见的报表格式有表格、数据立方体(多维表)、曲线图、直方图、饼图等等,其中以表格最为常见。总结各种报表的共同特征,可以这样来定义报表的结构。一般来说,Report=Title+Page(s)+Report FooterPages(s)表示一个报表可能有一页或多页Page =PageHeader+ Content+PageFooterContent则代表真正的数据,它一般由若干列和若干行组成。Content=ColumnHeader+Row(s)+ColumnFooter一个报表的结构可以表示为下图所示的树形:Report1个或多个Report FooterTitlePagePage HeaderPage FooterContent1个或多个Column HeaderColumn FooterRows这棵树中的所有叶结点,就构成了报表的实体。一个叶结点一般称作一个Band,从上到下排列,一个Report的组成如下图所示:Title(标题)Page Header(页头,可以提供一些说明性信息,比如页码)Column Header(列头,一般填入列名)Row(s)(实际的数据)Column Footer(列脚,一般填入列的汇总信息,如和,平均值等等)Page Footer(页脚,比如页码,或者该页上数据的汇总信息)Report Footer(报表脚,一般填入整个报表的汇总信息,或者一些说明性信息)下图是一个报表的例子。它有3页。1.2 计算机上的报表与报表应用程序可以利用计算机处理数据和界面设计的功能来生成、展示报表。计算机上的报表的主要特点是动态化。已经有各种各样的计算机报表设计工具,它们一般提供格式设计和数据填充等功能。广义地讲,EXCEL、WORD、甚至写字板都可以算作报表设计工具,但是它们没有定义专门的报表结构,也无法实现报表格式和报表数据的动态决定,无法实现计算机报表的“动态化”特性,也就是说不能用它来开发“报表应用程序”,所以它们一般不能视为报表设计工具。而所谓报表应用程序,指的是能够在运行时动态地决定报表格式和报表数据的应用程序,它必须要实现数据格式和数据内容之间的分离,也就是报表和数据源之间的分离。一个报表应用程序可以定义为:报表应用程序=报表+数据源+ 报表的具体应用。报表由报表设计工具来设计。报表设计工具定义报表格式,以及报表内容与数据源之间的映射。具体地说就是定义报表的大小、形状和各个Band的内容。比如用设计报表的大小使它适于A4纸型,比如把报表脚的内容设为当前日期,或者定义Column Header 设为与数据库中字段的名字,在ColumnFooter Band中计算合计等等。常用的报表工具有应用于微软平台下的CrystalReport,用于Java平台下的JReport,StyleReport,Jasper Report等等。数据源代表报表所显示数据的来源。数据源并非某个具体的数据库或表。一般来说,报表中的数据源可以理解为一个ResultSet,典型的情况下,它是执行某个SQL查询后得到的结果。ResultSet除了来自关系数据库,也可以取自XML数据源,或者自定义的任何一种数据源。因此,需注意“Datasource”在不同的上下文里有不同的指代,有时它指Query,有时指ResultSet,有时指底层的数据库/数据源实体。报表的具体应用指的是:从信息系统设计的角度来说, (1) 怎么样让用户在程序运行时自定义报表数据的内容(比如是得到今年的税务报表还是去年的)(2) 怎么样把报表提交给用户(是以WEB方式展现,还是让用户保存为EXCEL文件)(3) 采取什么样的系统架构(是桌面应用程序,还是C/S或者B/S应用程序)这几个问题都要通过程序设计的途径来解决,并且解决的方案要到报表设计工具的制约。比如说如果使用Jasper Report技术,由于JasperReport是单纯的报表设计工具,开发者必须手工编写访问报表的程序。而如果使用JReport技术,由于JReport的开发商提供了一个作为独立WEB服务器的JREntSrver,这个服务器可以部署报表并自动生成访问报的表的页面,这时就可以减少很多代码编写的工作量。为帮助理解,下图给出了一个非常简单的基于WEB的报表应用程序。它用于按书类汇总书籍信息。作者对报表和报表应用程序的定义或许并不严谨,但亦不失为一种有意义的框架。脑中有了这个架构,可以为与报表相关的开发提供引导作用。下面就以一种具体的报表设计技术-JasperReport为例,介绍这个框架的具体实现。2、 JasperReport及其他基于JAVA平台的报表设计工具有很多,有的为商业软件,有的则是开源软件。在所有的开源软件中,JasperReport的应用最广泛。本章先介绍JasperReport的基本要领,并给出学习JasperReport的辅助材料,然后介绍用于辅助JasperReport开发的GUI工具Ireport。最后通过一个的实例来介绍怎么用JasperReport+Ireport+JSP开发完整的WEB报表应用程序。 2.1 报表设计工具概述 正如前一章所说,除了界面设计,报表设计工具的另一个功能就是告诉应用程序怎么样填充Title、Page Header等Band。对Rows Band,报表设计工具通过定义报表数据与数据源(ResultSet)之间的对应关系来确定怎么样填充Rows Band。对其他的几个Band,如果Band的内容是不变的(static),则可用设计工具直接写出这些内容。然而在多数情形下,其他Band和Rows Band一样,内容是动态变化的(即运行时才确定的)。举例来说,一个报表会在某个Footer Band显示汇总信息(如“合计”),它的值在设计阶段确定;一个报表可能要求在表尾显示报表生成的日期,它的值也是动态的。概括起来,一个报表设计工具的功能有以下几点:1、 报表的外观、布局设计2、 设置报表数据与数据源数据之间的对应关系,并要求按用户输入的不同参数得到不同的ResultSet。3、 提供一种灵活性,以使开发者能动态确定各个Band的内容。下面就以JasperReport为例,看看一个报表设计工具是怎样实现上述几种功能的。2.2 用JasperReport定义报表的各个BandJapserReport用一个XML文件定义一个报表。手写一个Jasper Report,就像写像一个配置文件。JasperReport的对报表结构的定义与前文所说的“标准定义”略有不同。它把Rows称为Detail,将ReportFooter称作Summary,并增添了一个Backgroud 和一个 LastPageFooter。对这两个新Band可以顾名思义,不必详细介绍。一个Jasper Report源码的基本结构如下所示:.parameter:代表报表的查询参数。比如上一章所举例子中的“书籍类型”。queryString:代表从数据库取数据的Query。一个queryString中一般会有若干个parameter。field:代表报表数据的字段。variable:变量,意即它在报表的不同位置、在报表运行的不同时刻都会有不同的值。它一搬用来实现各个Band内容的动态显示Report源码举例:下面的代码片断节选自上例报表的XML源码,注意其中的高亮部分。/JasperReport根元素jasperReport name=example./参数,书籍类型/作为数据源的Query/变量:报告日期/3个field:编号,名称,类型/backgroud band,在例子中为空./title band,对应于上例中的“DISK类书籍汇总”./PageHeader Band,对应于上例中的“第1页”./ColumnHeader Band,对应于例中的列名./Detail Band 对应于表格中的内容 /ColumnFooter Band,在例中为空/PageFooter Band,对应于例中的“本页合计:15”./LastPageFooter Band,在例中为空/Summary Band,在例中对应于 总计:37 以及 “三月 26,2005”.读完这个代码片断,对JasperReport报表的基本结构应该会有个大致的了解,对Band的填充方法也可以猜出个大概。以XML的方式来写一个REPORT,就像写一个配置文件,脉络很清楚,也易于修改。不过,用直接手写配置文件的方式来定义一个可视的对象,如同直接用手写HTML的方式来设计网页一样,其效率是非常低的。网页设计者一般彩某种能够解析、生成HTML代码的GUI工具来设计网页,比如Dreamweaver;同样,我们也需要采用一个能够解析、生成Jasper Report代码的GUI工具,来帮助我们进行报表设计。Ireport就是这样的一个GUI工具。用Ireport和Jasperreport整合开发报表是最常用的开发模式。学习JasperReport和Ireport不是十分简单,因为这两个开源项目的文档是收费的。不过可以在网上找到一些前人摸索出的辅助材料,另外,对JasperReprot,还可以在网上找到一个低版本的项目文档,由于JasperReport的基本机制不变,虽然那个文档版本很低,但亦足以让你迅速入门。在继续我们的文章之前,就按顺序浏览下列文档/源码:1、 Ireport和Jasperreport整合开发报表向导(一)(二)(三),可以指导入门2、 TheJasperReportsUltimateGuide.1.0.pdf,读后可以了解JasperReport的基本原理3、 JasperReport的Samples的源码。另外,有一篇文章叫做“JasperReport学习之路”,也可以起到引导作用。如果你觉得第文档3内容太多,下面的这个例子,可以帮助你迅速熟悉基于JasperReport的报表设计。2.2 例:用JasperReport+Ireport+JSP开发一个完整的WEB报表应用程序一个报表应用程序:BOOK REPORT 需求分析:这个程序按书籍类别汇总一个小型图书室的书籍,以报表的形式列出书籍清单,统计书籍的册数。报表的格式包括HTML和EXCEL,其中WEB方式用于预览,EXCEL方式让用户保存文件以离线浏览。Use Case:用户以WEB方式登录报表参数输入页面,输入书籍类型,提交表单后,在浏览器中显示报表结果让用户预览。用户预览后可以点击“生成XLS文件”,就会得到与预览页面数据相同的Excel报表。流程图:报表文件preview.jsp.jspinput.htmlExcel报表getExcel.jsp数据源预览结果 详细设计:一、 数据源设计DBMS: SQL SERVER 2000数据库名:library,里面有一张表books存放了书籍的所有信息,具体包括编号、名称、类别。Query:select * from books where bookType=类别参数实际应用中的报表程序都要牵涉到多个表的查询,过程一般也要复杂得多,真正较常用的Query是一个能够返回ResultSet的存储过程(即最后一条语句是Select语句)。二、 报表设计用IReport设计报表的详细步骤:(1)、配置程序开发所需的libs。这里所用的IReport的版本是0.4.1,在它的lib目录下已有了JasperReport 0.6.4 的JAR文件已经JasperReport所需第三方API的JAR文件,我们不必再去另找这些库。另外,由于报表要与SQL SERVER交互,所以要把JDBC DRIVER FOR SQL SERVER 的JAR文件拷到Ireport的lib目录下。要注意的是,在报表设计阶段引入SQL SERVER DRIVER只是为了试运行报表,JDBC并不是开发报表本身所需的API。顺便提一下,JasperReport在版本方面并没有向下兼容。每更换了一个版本,JasperReport中的包名和包的组织结构都会有很大变化,所以在开发时同一个WEB应用程序时尽量使用同一个版本。(2) 配置数据源。启动Ireport,选择Datasource-Connections/Datasources,在弹出的对话框中点击“New”,对JDBC数据源进行配置。Datasource/Connection独立于报表,多个报表可以共享同一个Datasource/Connection。所以我们先建数据源,再新建报表。(3)新建报表。设置好报表的名字、页大小等等。(4) 新建query。由于Query要用到参数,所以要先新建一个Parameter。选择ViewParameters。以后在报表中可以用$Ptype来引用这个参数。另外,最好为Parameter设一个默认值,这样才能利用Ireport的Read Fields功能(下文将介绍)。选择Datasource-Report query,输入查询语句,再点击Read Fields让Ireport读入ResultSet的元数据。(注:这个Query将写入报表的源码中。然而这并不意味着报表所需的ResultSet一定要通过它来获得。ResultSet仍然可以在具体的应用中从别处获得。)(5)界面设计,填充各个Band.JapserReport中没有“表格”的概念。ColumnHeader和Detail (第3和第4个Band)中貌似表格的东西实际上是六个独立的文本框。JReport中有两种文本框,一种称作Static Text,即内容不变的静态文本,另一种称作TextField,它的值用JAVA表达式来决定。在本例中,所有列名(如“编号”),“本页合计”,“合计”都是Static Text,其他的都是Text Field。新建文本框:点击工具栏中的 “T”,生成一个Static Text,右击新生成的Static Text,选择“Properties”设置它的属性。新建TextField:点击工具栏中的“F”生成一个TextField。右击这个新对象,设置它的属性。下图是标题TextField的属性。注意Textfield expression的内容,它是两个字符串的串接。下图是每页册数统计TextField的属性。$VPAGE_COUNT是一个JasperReport内建的变量(变量在Report中的记号是$V变量名),它代表某页的数据行数,它的类型是Integer,Evaluation Time即计算周期,是Page,表示每到换页时它的值就要更新。下图是报表日期TextField的属性。注意TextField expression中的reportdate变量。这个变量需要我们自己来定义。定义一个变量的过程如下:选择ViewReport Variables,新建一个变量,它代表当天的日期,它的值由JAVA表达式来确定(在这里用到的类是java.util.Date,有时候我们可能需要用到自定义的类,那就要把保证能在Classpath或Ireport的lib文件夹中找到这个类)。Detail Band 要用数据源的数据来填充。点击工具栏中的“F”,在新建对象的属性设置窗口中填入相应的数据库字段(Field,记号是$F字段名)。如:至此,你大概已经了解了用Ireport定义Band填充方式的主要方法。下面,给出作者在外观设计上总结的一些经验:A 将ColumnHeader和Detail中文本框的高度设成所在Band的高度,这样可以使数据的外观像一个表格。B 用Ireport调整Band的高度似乎存在BUG。最好在报表的XML源码文件中进行调整。C 注意文本框边框的厚度设置。与其他文本框的共同边界要设成Thin或None(如果左框的右边界是Thin,那么右邻框的左边界就应该是None),以避免表格内部的线条过粗;未共享的边界要设成1Point,以避免表格外边框太细。下图是$FbookName的边框厚度设置:D如果你发现某个文本框中的汉字显示不出来,只能看到小方格,那就将文本框的字体从Arial改成“宋体”或其他字体。(6) 编译、测试。首先将报表保存为一个XML文件。选择Tools-Options-Complier,设置与编译有关的属性。点击工具栏中的编译。编译后的文件格式是*.jasper。选择Tools-Options-Complier,设置打开各种文件类型的报表所需的程序。点击菜单栏中的 Build,选择报表测试时的文件格式。点击,运行报表。这就是一个Jasper报表的详细设计。可以看出Ireport 为我们提供了极大的便利WEB应用程序设计:报表设计好之后,究竟怎么样把它嵌入到JAVA程序中?呈现一个报表的结果需要哪几个阶段?浏览下面的例子,就可以得到这些问题的答案。详细步骤:(1) 将JasperReport 及其所需的第三方API拷到WEB应用程序的Lib中。JasperReport的项目目录下的doc/requirements.html列出了所需的库。(2) 设计预览preview.jsp。preview.jsp处理用户预览报表的请求。以下是preview.jsp的源码片断,它参照了jasper demo中的webapp/jsp/html.jsp。(注:取名为preview只是为了方便说明它的功能,作者在开发例程的时用的文件名是bookreport.jsp).运行结果:(如果用户输入Chinese)(3) getExcel.jsp. getExcel.jsp处理获取XLS报表的请求。这个JSP返回与预览结果数据相同的Excel报表。要保证结果相同,可以让它和preview.jsp共享同一个ResultSet,这要求preview.jsp将ResultSet转换为JRDatasource,再传给getExcel.jsp。为求简便,我们不使用这种方式,而只是让preview.jsp把用户传给他的参数再传给getExcel.jsp。求简便的代价是须再访问一次数据库。用户一般在预览后再点击“生成XLS报表”,所以应在preview.jsp中增加一个表单。表单中使用一隐藏元素,将参数的值传给getExcel.jsp。input name=booktype type=hidden value=以下是getExcel.jsp的代码片断。运行结果:(有一个题外的问题须说明一下。在有的用户那里,得到EXCEL格式的报表时不会出现一个下载对话框让你保存EXCEL文件,而是直接出现在IE窗口中。要解决这个问题,请参见如何配置 Internet Explorer 以在适当的 Office 程序中而不是 Internet Explorer 中打开 Office 文档。)至此,一个完整的报表应用程序的开发过程已经全部介绍完毕。相信这个例子能让你熟悉设计一个报表应用程序的基本步骤。下面我们将讨论图形报表。3、 图形报表与JfreeChart3.1概述图形报表指数据统计结果的图形显示。常用的图形报表有曲线图、直方图、饼图等等。JasperReport本身并不支持图表设计,它通过在报表中“插入图片”的方式来设计图形报表。一个常用的模式是在script中使用专门的CHART API(如JfreeChart)生成一个BufferedImage,然后把它放到报表的某个Image容器中(如果你还了解什么是Script,请先阅读在第二章介绍过的JasperReport文档)。也可以不通过报表工具而直接使用CHART API生成图像文件或者可供JSP处理的 BufferedImage。如果图形报表仅用于预览,则这种模式与“JasperReport经手模式”的效果相差不大,而且这种模式还可能因为更多的灵活性获得更好的视觉效果,比如报表的大小是固定的,它限制了图片的最大尺寸,而如果直接生成IMAGE的话,它的大小就可以动态确定了。如果图形报表要存到一个XLS文件中,似乎“JasperReport经手模式”比较好,因为报表工具提供了导出到EXCEL的API。然而遗憾的是,至今为止报表工具只能导出文字到EXCEL,而不能导出图像到来EXCEL,因为它所用到的JAVA XLS API-POI,到现在仍未实现将图像插入EXCEL的功能。所以说“JasperReport经手模式”并不具备什么优势,在灵活性上反而受到了一些限制。下面介绍目前最流行的JAVA CHART API-JfreeChart。JfreeChart是目前较流行的JAVA CHART API之一,它也是一个开源项目。(它的文档也是文档收费,而且版本和版本之间也有很多差异。在应用Jfreechart时须注意这些问题)。Jfreechart相对比较易学。请先浏览以下文档/源码:A Jfreechart
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB31/ 737-2020预应力混凝土管桩单位产品能源消耗限额
- DB31/ 540.1-2011重点单位消防安全管理要求第1部分:总则
- 羽绒制品企业产品创新与研发管理考核试卷
- 能源工程与环境保护翻译考核试卷
- 农产品加工与农业可持续发展考核试卷
- 2024年无人驾驶汽车项目资金需求报告代可行性研究报告
- 高中三年学习规划这样做不愁考不上好大学
- 2024年弹性磨块项目投资申请报告代可行性研究报告
- 石墨烯地暖系统隐蔽工程验收及维护保养协议
- 政府数据公开访问权限协议书
- GB 252-2015普通柴油
- 生产交接班记录表
- 山西洗煤厂安全管理人员机考题库大全-上(单选、多选题)
- 硅酸钙板、含锆型硅酸铝纤维棉、高铝型硅酸铝纤维棉技术规格
- 小学二年级下册道德与法治《小水滴的诉说》教学教案
- GB∕T 15762-2020 蒸压加气混凝土板
- 护士分层级培训与管理课件
- 广州版五年级英语下册期末知识点复习ppt课件
- 照明电气安装工程施工方案及工艺方法要求
- 计算方法全书课件完整版ppt整本书电子教案最全教学教程ppt课件
- 公路工程施工安全技术规范-JTG-F90-2015
评论
0/150
提交评论