作者:薛笛
严正声明:本来我在以前把JasperReport1.0的用户文档由中文译成了英文,花了两周多时间写了几万字,并把它贴到了CSDN的Blog上,并凡是要翻译完的PDF文档的朋友我都尽量给邮过去。但是最近我发现问我要文档的人总管我叫“良子大哥”,我开始还不明所以,后来一查才知道CSDN上有个叫良子的人把我翻译的东西整理了一下,调整了一下格式变成了他的作品,上面压根就没提我,但是里面的注明的索要文档PDF版的E-Mail(jxuedi@gmail.com)却是还是我的—所以别人还是问我要PDF文档!!这令我十分不爽。本来嘛,我想公开大家看是件好事,但你不能连个转载标志也不写啊!??这行为不是明抢吗,做人不能这样啊?但是今天我终于想通了,我好歹也念过这么多年书,不能和他一般见识,最终又重新把它贴出来,不过还是希望不要有人再这么做。
JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。最重要的是它是开源的,这给我们带来很大方便,但是文档却要钱,让人不爽。不过人总要生存,再说,做这么一个好东西,用户总不能一点代价也不付(虽然对于中国普通程序原来说太贵了点)。它还有一个相关的开源工程—IReport,这是一个图形化的辅助工具,因为JasperReport仅提供了可使用的类库而未提供更好的开发工具,IReport的出现解决了这一难题。它们配合使用将会更大程度的提高效率。
该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。它的主要目的是辅助生成面向页面的(page oriented),准备付诸打印的文档。
JasperReport借由定义于XML文档中的report design进行数据组织。这些数据可能来自不同的数据源,包括关系型数据库,collections,java对象数组。通过实现简单的接口,用户可以将report library插入到订制好的数据源中,在以后我们将提到有关内容。
其实这是一份JasperReport Ultimate Guide的简单翻译以及我的理解和例子。在最后,我将描述一个我正在做的工程,将其中用到的相关信息贡献出来。我这么做是因为当我在学这个类库的时候苦于很少有相关的中文文档,诱惑语焉不详,希望其他人不再受苦。这个文档将分几次贴出来,与原文档的章节相对应。这份文档的Word形式将在全部完成之后放在我的公开邮箱中与各位共享。我的EMail是jxuedi@gmail.com有什么意见或想法请与我联系。
闲言少叙,进入正题。
上图为一个生成报表并打印(导出)的全过程。我将会把涉及到的重要的类进行一一说明。
这是一个未经加工的报表实例,供JasperReport Library使用。这个类可以在JasperReport类库内置的XML解析器对XML report design进行解析处理之后得到。如果你的程序不想对直接XML文件进行操作,在例子noxmldesign中有不使用XML设计文件而动态生成这个类的方法。我们稍稍看看这个例子:
import 略
public class NoXmlDesignApp
{
private static JasperDesign getJasperDesign() throws JRException
{
//JasperDesign定义JasperDesign的头信息
JasperDesign jasperDesign = new JasperDesign();
jasperDesign.setName("NoXmlDesignReport");
.剩余略
//Fonts定义使用到的字体
JRDesignStyle normalStyle = new JRDesignStyle();
normalStyle.setName("Arial_Normal");
//Parameters 定义Parameters的内容—这个内容以后会提到
JRDesignParameter parameter = new JRDesignParameter();
parameter.setName("ReportTitle");
parameter.setValueClass(java.lang.String.class);
jasperDesign.addParameter(parameter);
parameter = new JRDesignParameter();
parameter.setName("OrderByClause");
parameter.setValueClass(java.lang.String.class);
jasperDesign.addParameter(parameter);
//Query 定义查询
JRDesignQuery query = new JRDesignQuery();
query.setText("SELECT * FROM Address $P!{OrderByClause}");
jasperDesign.setQuery(query);
//Fields
JRDesignField field = new JRDesignField();
field.setName("Id");
field.setValueClass(java.lang.Integer.class);
jasperDesign.addField(field);
//Variables 定义变量
JRDesignVariable variable = new JRDesignVariable();
variable.setName("CityNumber");
variable.setValueClass(java.lang.Integer.class);
variable.setResetType(JRVariable.RESET_TYPE_GROUP);
//Groups 定义组
group.setMinHeightToStartNewPage(60);
expression = new JRDesignExpression();
//余下定义一个文档的其他内容,这里省略
return jasperDesign;
}
从getJasperDesign()方法我们可以看出,这个应用程序并没有从XML文件里面将report design提取出来在生成JasperDesign类,而是直接利用JasperDesign提供的函数生成了一个报表设计。这样做的原因是基于灵活性的考虑,你可以在程序中随时动态生成报表,而不需要去从硬盘或网络中读取XML设计文件。但通常我不这么做,因为比较麻烦,而且要对JasperReport的每个元素都非常熟悉才行。
这个类的实例包含了一个经过编译的report design对象。生成它的时机是对报表编译之后,但尚未对其填入数据的时候。编译过程中,JasperReport需要生成一个临时的类文件,用以保存report expression,如变量表达式,文本,图像表达式,组表达式等等。这个临时的Java Source File是被动态编译的,编译器使用的是JDK中用来执行应用程序的编译器类(compiler class)。如果 tools.jar不在classpath中,编译过程将采用javac.exe来进行后台编译。编译后所得的字节码保存在JasperReport类中,用来在执行期装填数据(filling the report with data)和给表达式赋值(evaluate various report expression)。
这是一个上面提到的与编译有关的类。利用它提供的一些方法,你将有能力编译从本地硬盘或一个Input Stream获得的XML report;还可以通过传给JasperCompileManager一个JasperDesign类,来对内存中的report design进行编译—功能很强大。
当一个报表已经装填好数据之后,这个文档就以JasperPrint类的实例出现。这个类可以直接用JasperReport内置的viewer进行查看,也可以序列化到硬盘以备后用,或者发送到网上去。这个类的实例是报表装填过程后的产物,它可以被JasperReport类库中的导出方法导出成各种流行的格式—PDF,HTML,XML等等。
这个类与报表的数据源有关。只要能够恰当的实现他的一些接口,用户就可以在报表中使用各种数据源,在报表装填的时候由报表引擎负责对数据进行解释和获取。当报表装填的时候,报表引擎都会在后台生成或提供一个该接口的实例。
这是一个JRDataSource的缺省实现,因为很多报表数据都来源于关系数据库,所以JasperReport缺省包含了这个外覆(wrap)了java.sql.ResultSet对象的实现。
这个类可以用来包裹(wrap)用以对报表进行装填的、已经载入的结果集,也可以被报表引擎用来包裹通过JDBC执行完查询后所得的数据----非常有用。
顾名思义,这个类用于包裹java.swing.table.TableModel类中的数据,它也是实现了JRDataSource接口,用于在Java Swing程序中使用已经被载入到table中的数据来生成报表。
这是JRDataSouce接口的最简单实现,这个类用在不需要显示数据源数据而从参数中获取数据的报表和仅需要知道数据源中的实际行数(number of virtual rows)的报表中。
JasperReport自带的例子:fonts,images,shapes和unicode中使用这个类对报表进行装填,来模拟没有任何record的数据源,这时所有的field都为null。例如:
JasperRunManager.runReportToPdfFile(fileName, null, new JREmptyDataSource());
这个类用来实现报表的数据装填。这个类提供了很多方法来接受各种类型的report design--可以是一个对象,一个文件,或一个输入流。它的输出结果也是多样的:file,Object,output Stream。
report的装填引擎需要接收一个可以从中获取数据和value的数据源作为报表参数。参数值(Parameters value)通常使用Java.util.Map来提供,里面包含的KEY是报表的参数名。
数据源可以通过两种方式提供,这取决于你的解决方案:
通常情况下,用户应该提供一个JRDataSource对象,例如我前面提到的那些。
但是大多数的报表都是采用关系数据库中的值来装填数据,所以JasperReport拥有一个内置的缺省行为—让用户在报表设计的时候提供一个SQL查询。在运行期,这个查询将被执行以用来从数据库中获取要装填的数据。在这种情况下,JasperReport仅需要一个java.sql.Connection对象来取代通常的数据对象。JasperReport需要这个连接对象来连接数据库管理系统并执行查询操作。
在查询结束之后,JasperReport将自动生成一个JRResultSetDataSource,并将它返回给报表装填过程。
这个类同样用于报表装填期间,用户可以自己定义一些代码,并由报表引擎在装填过程中执行。这些用户代码可以处理报表数据操作,或在一些定义好的时刻执行,例如page,列,或组的分割处。
这是一个非常方便的JRAbstractScriptlet的子类。通常情况下你应该选择继承这个类。
这个类用户提供打印方法,用户可以将整个文档或部分文档传递给它,也可以选择是否显示打印Dialog,这在他的API文档中可以找到,这里不再赘述。
顾名思义,这个类负责文档的导出。这个类的具体信息详见API文档。非常明显和清除,没什么好解释的,Just use it即可。
有时,我们仅仅需要构造一个流行的文档格式,例如PDF,或HTML,而不需要将装填过程后生成的JasperPrint对象保存到硬盘或其他中间媒体上。这时,可以使用这个类来直接将装填过程生成的文档导出到所需的格式。
这是一个基于Swing的应用程序,你可以将它视为一个独立组件,用来进行打印预览。用户可以继承这个类,来构造满足自身要求的预览程序。
这个类更像是使用JRViewer的教学组件,它演示了一个Swing应用程序如何装在并显示报表。
这个类用于报表的设计期间,用来预览报表模版。它仅作为一个开发工具存在于类库中。
text-indent:
分享到:
相关推荐
《IReport v1.0 用户手册》是一份详尽的指南,旨在帮助用户深入理解和有效使用IReport这一强大的报表设计工具。IReport是Jaspersoft公司开发的一款开源报表设计软件,它允许用户通过直观的图形界面创建、编辑和管理...
### Jasper Report 用户手册知识点概述 #### 一、简介 Jasper Reports是一款开源的报表工具,由Jaspersoft公司开发并维护。它能够帮助开发者轻松地将数据转化为专业的报表格式,并支持多种输出方式,如PDF、HTML、...
Jasper Report用户手册 version1.0 1 简介 2 API概览 Class net.sf.jasper.engine.design.JasperDesign Class net.sf.jasper.engine.JasperReport Class net.sf.jasper.engine.JasperCompileManager Class ...
这份《Jasper Report用户手册》详尽地介绍了如何使用JasperReport进行报表的设计、编译、预览、填充、查看、打印以及导出等操作。 首先,手册简要介绍了JasperReport的基本概念,包括API概览。API中涉及的主要类和...
《JasperReport用户手册》是针对Java开发人员和报表设计者的一份详尽指南,它提供了使用JasperReport库创建、设计和管理复杂报表的全面知识。JasperReport是一款开源的报表工具,允许开发者在各种应用程序中嵌入交互...
### iReport 1.0 用户手册关键知识点 #### 一、概述 - **iReport** 是一款用于设计和创建 **JasperReports** 报表的工具。它为开发者提供了直观的图形界面,使得报表的设计变得更加简单高效。 - **功能特点**: - ...
jaspersoft-studio 最新版使用手册 Jaspersoft Studio 是一个基于 Eclipse 的商业智能开发环境,提供了一个统一的平台来设计、开发、测试和部署基于 Jaspersoft 的报告和 dashboard。下面是从《Jaspersoft Studio ...
《JasperSoft Studio使用手册》是一本详细介绍如何使用...这本手册是JasperSoft Studio用户不可或缺的指南,通过该手册用户可以高效地掌握JasperSoft Studio的使用,并在实际工作中发挥其强大的报表设计能力。
Jasper Report
JasperServer中文版是一款专为满足中国用户需求而设计的开源商业智能(BI)平台,它基于JasperReports项目,提供了丰富的报表和数据分析功能。这个资源包包含了JasperServer界面的中文语言翻译,使得中国用户在使用...
《ireport+jasper中文手册》是一本针对Java报表开发工具ireport和jasperReports的详尽指南,旨在帮助开发者在Java环境下高效地设计和生成复杂的报表。这份PDF版的手册涵盖了这两个工具的基础知识、进阶功能以及实际...
标题和描述均提到了"The First Jasper Report Ever",这标志着Jasper Reports的首个报告实例,Jasper Reports是一种广泛使用的开源报告工具,它允许用户创建、填充和查看复杂的报表。此报告由byteodord在2001年至...
总结来说,`struts2 + jasper report`的组合为Java Web应用提供了强大的报表生成能力,通过Struts2的控制层管理和JasperReport的报表引擎,可以方便地将后台数据转化为直观的报表展示给用户。在项目`...
在本篇文章中,我们将深入探讨如何使用Jasper来构建各种类型的报表,包括普通报表、分组报表、自定义报表、图形报表以及图形表格混合的报表。 首先,我们从基础开始——普通报表。JasperReport的基础在于JRXML文件...
jasper report 报表源码 里面有demo 容我多说俩,jasperReports 是一个基于 Java 的开源报表工具,它可以在 Java 环境下像其它 IDE 报表工具一样来制作报表。JasperReports 支持 PDF、HTML、XLS、CSV 和 XML 文件输出...
编译时,可以通过设置系统属性`jasper.reports.compile.class.path`和`jasper.reports.compile.temp`来定制类路径和临时目录。 填充阶段,使用`JasperFillManager`类的`fillReportXXX()`方法,结合JDBC链接从数据库...
当服务器接收到用户的请求时,Jasper编译器就会介入,将JSP文件转换并编译成Servlet,然后执行生成动态内容的Java代码。这些动态内容可能包括根据数据库查询结果来展示的商品信息,包括商品名称、价格等。然后,这些...
在Java开发领域,`commons-el-1.0.jar`,`jasper-compiler.jar`,以及`jasper-runtime.jar`是三个重要的库文件,它们分别服务于不同的功能,并且与Java服务器页面(JSP)和表达式语言(EL)密切相关。 `commons-el-...
首先,我们关注`dori.jasper.engine.design.JasperDesign`类。这个类是报表设计的原始模型,它代表了报表的结构和布局信息。当JasperReports解析XML报表设计文件时,会生成`JasperDesign`实例。如果在不使用XML文件...