报表简明文档.docx

上传人:b****5 文档编号:8161596 上传时间:2023-01-29 格式:DOCX 页数:37 大小:555.88KB
下载 相关 举报
报表简明文档.docx_第1页
第1页 / 共37页
报表简明文档.docx_第2页
第2页 / 共37页
报表简明文档.docx_第3页
第3页 / 共37页
报表简明文档.docx_第4页
第4页 / 共37页
报表简明文档.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

报表简明文档.docx

《报表简明文档.docx》由会员分享,可在线阅读,更多相关《报表简明文档.docx(37页珍藏版)》请在冰豆网上搜索。

报表简明文档.docx

报表简明文档

JasperReort,JFreeChart简明教程

摘要

本文先从通用的角度定义了与报表相关的各种概念。

然后介绍了怎么应用JasperReport和Ireport设计报表,最后介绍了怎么使用JfreeChart生成图形报表。

1、什么是报表,什么是报表应用程序

1.1什么是报表

报表是数据统计结果的呈现。

常见的报表格式有表格、数据立方体(多维表)、曲线图、直方图、饼图等等,其中以表格最为常见。

总结各种报表的共同特征,可以这样来定义报表的结构。

一般来说,

Report=Title+Page(s)+ReportFooter

Pages(s)表示一个报表可能有一页或多页

Page=PageHeader+Content+PageFooter

Content则代表真正的数据,它一般由若干列和若干行组成。

Content=ColumnHeader+Row(s)+ColumnFooter

一个报表的结构可以表示为下图所示的树形:

1个或多个

 

1个或多个

 

这棵树中的所有叶结点,就构成了报表的实体。

一个叶结点一般称作一个Band,从上到下排列,一个Report的组成如下图所示:

Title

(标题)

PageHeader

(页头,可以提供一些说明性信息,比如页码)

ColumnHeader

(列头,一般填入列名)

Row(s)

(实际的数据)

ColumnFooter

(列脚,一般填入列的汇总信息,如和,平均值等等)

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源码的基本结构如下所示:

………….

……………

………..

…………

……………..

……………..

…………

…………

……..

………….

parameter:

代表报表的查询参数。

比如上一章所举例子中的“书籍类型”。

queryString:

代表从数据库取数据的Query。

一个queryString中一般会有若干个parameter。

field:

代表报表数据的字段。

variable:

变量,意即它在报表的不同位置、在报表运行的不同时刻都会有不同的值。

它一搬用来实现各个Band内容的动态显示

Report源码举例:

下面的代码片断节选自上例报表的XML源码,注意其中的高亮部分。

//JasperReport根元素

name="example"

………………….

//参数,书籍类型

//用在图形界面中提示用户输入参数信息(isForPrompting)

//作为数据源的Query

[CDATA[select*frombookswherebookType=$P{type}]]>

//变量:

报告日期

class="java.util.Date"resetType="Report"calculation="Nothing">

[CDATA[newDate()]]>

//3个field:

编号,名称,类型

…………………………………

//backgroudband,在例子中为空

…………………………….

//titleband,对应于上例中的“DISK类书籍汇总”

</p><p>…………….</p><p><textFieldExpressionclass="java.lang.String"></p><p><!</p><p>[CDATA[$P{type}+"类书籍汇总"]]></p><p></textFieldExpression></p><p>……………</p><p>

//PageHeaderBand,对应于上例中的“第1页”

……………………………….

[CDATA["第"+$V{PAGE_NUMBER}.intValue()+"页"]]>

………..

//ColumnHeaderBand,对应于例中的列名

………….

[CDATA[编号]]>

………………….

[CDATA[名称]]>

………………….

[CDATA[类型]]>

………………….

//DetailBand对应于表格中的内容

[CDATA[$F{bookId}]]>

[CDATA[$F{bookName}]]>

[CDATA[$F{bookType}]]>

//ColumnFooterBand,在例中为空

//PageFooterBand,对应于例中的“本页合计:

15”

………………

[CDATA[本页合计:

]]>

…………………….

[CDATA[$V{PAGE_COUNT}]]>

………………….

//LastPageFooterBand,在例中为空

//SummaryBand,在例中对应于总计:

37以及“三月26,2005”

…………….

[CDATA[总计:

]]>

……………..

[CDATA[$V{REPORT_COUNT}]]>

…………………..

[CDATA[$V{reportdate}]]>

读完这个代码片断,对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中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1