报表简明文档文档格式.docx
- 文档编号:21297838
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:37
- 大小:555.88KB
报表简明文档文档格式.docx
《报表简明文档文档格式.docx》由会员分享,可在线阅读,更多相关《报表简明文档文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
(列脚,一般填入列的汇总信息,如和,平均值等等)
PageFooter
(页脚,比如页码,或者该页上数据的汇总信息)
ReportFooter
(报表脚,一般填入整个报表的汇总信息,或者一些说明性信息)
下图是一个报表的例子。
它有3页。
1.2计算机上的报表与报表应用程序
现在已经有各种各样的计算机报表设计工具,它们一般提供格式设计和数据填充等功能。
广义地讲,EXCEL、WORD、甚至写字板都可以算作报表设计工具,但是它们没有定义专门的报表结构,也无法实现报表格式和报表数据的动态决定,无法实现计算机报表的“动态化”特性,也就是说不能用它来开发“报表应用程序”,所以它们一般不能视为报表设计工具。
而所谓报表应用程序,指的是能够在运行时动态地决定报表格式和报表数据的应用
程序,它必须要实现数据格式和数据内容之间的分离,也就是报表和数据源之间的分离。
一个报表应用程序可以定义为:
报表应用程序=报表+数据源+报表的具体应用。
报表由报表设计工具来设计。
报表设计工具定义报表格式,以及报表内容与数据源之间的映射。
具体地说就是定义报表的大小、形状和各个Band的内容。
比如用设计报表的大小使它适于A4纸型,比如把报表脚的内容设为当前日期,或者定义ColumnHeader设为与数据库中字段的名字,在ColumnFooterBand中计算合计等等。
常用的报表工具有应用于微软平台下的CrystalReport,用于Java平台下的JReport,StyleReport,JasperReport等等。
数据源代表报表所显示数据的来源。
数据源并非某个具体的数据库或表。
一般来说,报表中的数据源可以理解为一个ResultSet,典型的情况下,它是执行某个SQL查询后得到的结果。
ResultSet除了来自关系数据库,也可以取自XML数据源,或者自定义的任何一种数据源。
因此,需注意“Datasource”在不同的上下文里有不同的指代,有时它指Query,有时指ResultSet,有时指底层的数据库/数据源实体。
报表的具体应用指的是:
从信息系统设计的角度来说,
(1)怎么样让用户在程序运行时自定义报表数据的内容(比如是得到今年的税务报表还是去年的)
(2)怎么样把报表提交给用户(是以WEB方式展现,还是让用户保存为EXCEL文件)
(3)采取什么样的系统架构(是桌面应用程序,还是C/S或者B/S应用程序)
这几个问题都要通过程序设计的途径来解决,并且解决的方案要到报表设计工具的制约。
比如说如果使用JasperReport技术,由于JasperReport是单纯的报表设计工具,开发者必须手工编写访问报表的程序。
而如果使用JReport技术,由于JReport的开发商提供了一个作为独立WEB服务器的JREntSrver,这个服务器可以部署报表并自动生成访问报表的页面,这时就可以减少很多代码编写的工作量。
为帮助理解,下图给出了一个非常简单的基于WEB的报表应用程序。
它用于按书类汇总书籍信息。
脑中有了这个架构,可以为与报表相关的开发提供引导作用。
下面就以一种具体的报表设计技术------JasperReport为例,介绍这个框架的具体实现。
2、JasperReport及其他
基于JAVA平台的报表设计工具有很多,有的为商业软件,有的则是开源软件。
在所有的开源软件中,JasperReport的应用最广泛。
本章先介绍JasperReport的基本要领,并给出学习JasperReport的辅助材料,然后介绍用于辅助JasperReport开发的GUI工具Ireport。
最后通过一个的实例来介绍怎么用JasperReport+Ireport+JSP开发完整的WEB报表应用程序。
2.1报表设计工具概述
正如前一章所说,除了界面设计,报表设计工具的另一个功能就是告诉应用程序怎么样填充Title、PageHeader等Band。
对RowsBand,报表设计工具通过定义报表数据与数据源(ResultSet)之间的对应关系来确定怎么样填充RowsBand。
对其他的几个Band,如果Band的内容是不变的(static),则可用设计工具直接写出这些内容。
然而在多数情形下,其他Band和RowsBand一样,内容是动态变化的(即运行时才确定的)。
举例来说,一个报表会在某个FooterBand显示汇总信息(如“合计”),它的值在设计阶段确定;
一个报表可能要求在表尾显示报表生成的日期,它的值也是动态的。
概括起来,一个报表设计工具的功能有以下几点:
1、报表的外观、布局设计。
2、设置报表数据与数据源数据之间的对应关系,并要求按用户输入的不同参数得到不同的ResultSet。
3、提供一种灵活性,以使开发者能动态确定各个Band的内容。
下面就以JasperReport为例,看看一个报表设计工具是怎样实现上述几种功能的。
2.2用JasperReport定义报表的各个Band
JapserReport用一个XML文件定义一个报表。
手写一个JasperReport,就像写一个配置文件。
JasperReport对报表结构的定义与前文所说的“标准定义”略有不同。
它把Rows称为Detail,将ReportFooter称作Summary,并增添了一个Backgroud和一个LastPageFooter。
对这两个新Band可以顾名思义,不必详细介绍。
一个JasperReport源码的基本结构如下所示:
<
jasperReport>
<
parameter>
………….<
/parameter>
queryString>
……………<
queryString/>
<
field>
………..<
/field>
variable>
…………<
/variable>
title>
……………..<
/title>
……………..
pageHeader>
/pageHeader>
…………
detail>
……..<
/detail>
………….
parameter:
代表报表的查询参数。
比如上一章所举例子中的“书籍类型”。
queryString:
代表从数据库取数据的Query。
一个queryString中一般会有若干个parameter。
field:
代表报表数据的字段。
variable:
变量,意即它在报表的不同位置、在报表运行的不同时刻都会有不同的值。
它一搬用来实现各个Band内容的动态显示
Report源码举例:
下面的代码片断节选自上例报表的XML源码,注意其中的高亮部分。
//JasperReport根元素
jasperReport
name="
example"
………………….
//参数,书籍类型
parametername="
type"
isForPrompting="
false"
class="
java.lang.String"
>
//用在图形界面中提示用户输入参数信息(isForPrompting)
//作为数据源的Query
!
[CDATA[select*frombookswherebookType=$P{type}]]>
/queryString>
//变量:
报告日期
variablename="
reportdate"
class="
java.util.Date"
resetType="
Report"
calculation="
Nothing"
variableExpression>
[CDATA[newDate()]]>
/variableExpression>
//3个field:
编号,名称,类型
fieldname="
bookId"
java.lang.Integer"
/>
bookName"
bookType"
…………………………………
//backgroudband,在例子中为空
background>
<
bandheight="
0"
isSplitAllowed="
true"
>
/band>
/background>
…………………………….
//titleband,对应于上例中的“DISK类书籍汇总”
…………….
textFieldExpressionclass="
[CDATA[$P{type}+"
类书籍汇总"
]]>
/textFieldExpression>
……………
//PageHeaderBand,对应于上例中的“第1页”
……………………………….
[CDATA["
第"
+$V{PAGE_NUMBER}.intValue()+"
页"
………..
//ColumnHeaderBand,对应于例中的列名
columnHeader>
………….
<
text>
[CDATA[编号]]>
/text>
………………….
[CDATA[名称]]>
………………….
[CDATA[类型]]>
/columnHeader>
//DetailBand对应于表格中的内容
[CDATA[$F{bookId}]]>
[CDATA[$F{bookName}]]>
[CDATA[$F{bookType}]]>
//ColumnFooterBand,在例中为空
columnFooter>
40"
/columnFooter>
//PageFooterBand,对应于例中的“本页合计:
15”
pageFooter>
………………
[CDATA[本页合计:
…………………….
[CDATA[$V{PAGE_COUNT}]]>
………………….
/pageFooter>
//LastPageFooterBand,在例中为空
lastPageFooter>
/lastPageFooter>
//SummaryBand,在例中对应于总计:
37以及“三月26,2005”
summary>
…………….
[CDATA[总计:
……………..
[CDATA[$V{REPORT_COUNT}]]>
…………………..
[CDATA[$V{reportdate}]]>
/textField>
/summary>
/jasperReport>
读完这个代码片断,对JasperReport报表的基本结构应该会有个大致的了解,对Band的填充方法也可以猜出个大概。
以XML的方式来写一个REPORT,就像写一个配置文件,脉络很清楚,也易于修改。
不过,用直接手写配置文件的方式来定义一个可视的对象,如同直接用手写HTML的方式来设计网页一样,其效率是非常低的。
网页设计者一般采用某种能够解析、生成HTML代码的GUI工具来设计网页,比如Dreamweaver;
同样,我们也需要采用一个能够解析、生成JasperReport代码的GUI工具,来帮助我们进行报表设计。
Ireport就是这样的一个GUI工具。
用Ireport和Jasperreport整合开发报表是最常用的开发模式。
学习JasperReport和Ireport不是十分简单,因为这两个开源项目的文档是收费的。
不过可以在网上找到一些前人摸索出的辅助材料,另外,对JasperReprot,还可以在网上找到一个低版本的项目文档,由于JasperReport的基本机制不变,虽然那个文档版本很低,但亦足以让你迅速入门。
下面的这个例子,可以帮助大家迅速熟悉基于JasperReport的报表设计。
2.2例:
用JasperReport+Ireport+JSP开发一个完整的WEB报表应用程序
一个报表应用程序:
BOOKREPORT
需求分析:
这个程序按书籍类别汇总一个小型图书室的书籍,以报表的形式列出书籍清单,统计书籍的册数。
报表的格式包括HTML和EXCEL,其中WEB方式用于预览,EXCEL方式让用户保存文件以离线浏览。
UseCase:
用户以WEB方式登录报表参数输入页面,输入书籍类型,提交表单后,在浏览器中显示报表结果让用户预览。
用户预览后可以点击“生成XLS文件”,就会得到与预览页面数据相同的Excel报表。
流程图:
详细设计:
一、数据源设计
DBMS:
SQLSERVER2000
数据库名:
library,里面有一张表books存放了书籍的所有信息,具体包括编号、名称、类别。
Query:
select*frombookswherebookType=类别参数
实际应用中的报表程序都要牵涉到多个表的查询,过程一般也要复杂得多,真正较常用的Query是一个能够返回ResultSet的存储过程(即最后一条语句是Select语句)。
二、报表设计
用IReport设计报表的详细步骤:
(1)、配置程序开发所需的libs。
在它的lib目录下已有了JasperReport的JAR文件已经JasperReport所需第三方API的JAR文件,我们不必再去另找这些库。
另外,由于报表要与SQLSERVER交互,所以要把JDBCDRIVERFORSQLSERVER的JAR文件拷到Ireport的lib目录下。
要注意的是,在报表设计阶段引入SQLSERVERDRIVER只是为了试运行报表,JDBC并不是开发报表本身所需的API。
顺便提一下,JasperReport在版本方面并没有向下兼容。
每更换了一个版本,JasperReport中的包名和包的组织结构都会有很大变化,所以在开发时同一个WEB应用程序时尽量使用同一个版本。
(2)配置数据源。
启动Ireport,选择Datasource----Connections/Datasources,在弹出的对话框中点击“New”,对JDBC数据源进行配置。
Datasource/Connection独立于报表,多个报表可以共享同一个Datasource/Connection。
所以我们先建数据源,再新建报表。
(3)新建报表。
设置好报表的名字、页大小等等。
(4)新建query。
由于Query要用到参数,所以要先新建一个Parameter。
选择
View—Parameters。
以后在报表中可以用$P{type}来引用这个参数。
另外,最好为Parameter设一个默认值,这样才能利用Ireport的ReadFields功能(下文将介绍)。
选择Datasource---Reportquery,输入查询语句,再点击ReadFields让Ireport读入ResultSet的元数据。
(注:
这个Query将写入报表的源码中。
然而这并不意味着报表所需的ResultSet一定要通过它来获得。
ResultSet仍然可以在具体的应用中从别处获得。
)
(5)界面设计,填充各个Band.
JapserReport中没有“表格”的概念。
ColumnHeader和Detail(第3和第4个Band)中貌似表格的东西实际上是六个独立的文本框。
JReport中有两种文本框,一种称作StaticText,即内容不变的静态文本,另一种称作TextField,它的值用JAVA表达式来决定。
在本例中,所有列名(如“编号”),“本页合计”,“合计”都是StaticText,其他的都是TextField。
新建文本框:
点击工具栏中
的“T”,生成一个StaticText,右击新生成的StaticText,选择“Properties”设置它的属性。
新建TextField:
点击工具栏中的“F”生成一个TextField。
右击这个新对象,设置它的属性。
下图是标题TextField的属性。
注意Textfieldexpression的内容,它是两个字符串的串接。
下图是每页册数统计TextField的属性。
$V{PAGE_COUNT}是一个JasperReport内建的变量(变量在Report中的记号是$V{变量名}),它代表某页的数据行数,它的类型是Integer,EvaluationTime即计算周期,是Page,表示每到换页时它的值就要更新。
下图是报表日期TextField的属性。
注意TextFieldexpression中的reportdate变量。
这个变量需要我们自己来定义。
定义一个变量的过程如下:
选择View—ReportVariables,新建一个变量,它代表当天的日期,它的值由JAVA表达式来确定(在这里用到的类是java.util.Date,有时候我们可能需要用到自定义的类,那就要把保证能在Classpath或Ireport的lib文件夹中找到这个类)。
DetailBand要用数据源的数据来填充。
点击工具栏中的“F”,在新建对象的属性设置窗口中填入相应的数据库字段(Field,记号是$F{字段名})。
如:
至此,你大概已经了解了用Ireport定义Band填充方式的主要方法。
下面,给出作者在外观设计上总结的一些经验:
A.将ColumnHeader和Detail中文本框的高度设成所在Band的高度,这样可以使数据的外观像一个表格。
B.用Ireport调整Band的高度似乎存在BUG。
最好在报表的XML源码文件中进行调整。
C.注意文本框边框的厚度设置。
与其他文本框的共同边界要设成Thin或None(如果左框的右边界是Thin,那么右邻框的左边界就应该是None),以避免表格内部的线条过粗;
未共享的边界要设成1Point,以避免表格外边框太细。
下图是$F{bookName}的边框厚度设置:
D.如果你发现某个文本框中的汉字显示不出来,只能看到小方格,那就将文本框的字体从Arial改成“宋体”或其他字体。
(6)编译、测试。
首先将报表保存为一个XML文件。
选择Tools---Options---Complier,设置与编译有关的属性。
点击工具栏中的
编译。
编译后的文件格式是*.jasper。
选择Tools----Options---Complier,设置打开各种文件类型的报表所需
的程序。
点击菜单栏中的Build,选择报表测试时的文件格式。
点击
,运行报表。
这就是一个Jasper报表的详细设计。
可以看出Ireport为我们提供了极大的便利
WEB应用程序设计:
报表设计好之后,究竟怎么样把它嵌入到JAVA程序中?
呈现一个报表的结果需要哪几个阶段?
浏览下面的例子,就可以得到这些问题的答案。
详细步骤:
(1)将JasperReport及其所需的第三方API拷到WEB应用程序的Lib中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报表 简明 文档