2 API 概述
大多数情况下,人们使用JasperReports的类库的时候都只会用到一小部分,并且不会对所有的API有个整体的概念。
在这一章节里让我们近距离的来看一下那些在使用时有重要意义的类和接口。同时也可以了解在需要使用到JasperReports报表功能的应用程序里怎样使用这些类和接口。
Class dori.jasper.engine.design.JasperDesign
从这个类开始介绍是因为这个类的实例为JasperReports生成报表提供原材料。在JasperReprots使用内部的XML解析器解析了XML报表设计文件后便生成了
dori.jasper.engine.design.JasperDesign实例。如果应用程序不使用XML文件,这个实例的生成也可以通过编程来实现。在提供源代码的例子里有一个叫做noxmldesign的例
子,通过它你可以了解到如何不写XML报表设计文件而动态的生成一个
dori.jasper.engine.design.JasperDesign实例。
所有dori.jasper.engine.design.JasperDesign类的实例在被填充和生成报表使用之
前已经被编译出来了。这就是我说它为类库提供原材料的原因。
Class dori.jasper.engine.JasperReport
这个类的实例是编译好的报表设计对象。它只会作为JasperReports报表编译的结果获得,并在填充表格和生成报表时被使用。
为了以后更快速的使用,在通过不通程度的检查和报表元素整理后,这个类库创建了一个临时文件存放包括报表变量表达式、文本域和图形表达式组表达式等所有的报表表达式信息。
这个临时Java源文件可以在两种情况下被编译。一是在使用中编译,还有一种是被JDK编译。如果在classpath里没有发现tools.jare文件,编译器就会通过运行javac.exe来编译这个文件。编译出来的二进制文件在填充报表数据和计算表达式时用到。
Class dori.jasper.engine.JasperCompileManager
这个类包括了报表编译的所有功能。使用它可以编译以文件形式和流形式提供的
XML报表设计信息。它也可以直接在内存中将dori.jasper.engine.design.JasperDesign对象编译成dori.jasper.engine.JasperReport对象。
其他的实用方法还包括了报表设计校验、在内存中生成XML报表设计和构造
dori.jasper.engine.design.JasperDesign实例。通过GUI工具使用这些方法设计报表是
一件非常简单的事情。
Class dori.jasper.engine.JasperPrint
在报表设计编译过并且填上了数据后,生成的文档以
dori.jasper.engine.JasperPrint实例的形式存在。这时可以通过JasperReports内建的
报表查看器直接使用,也可以序列化后存储到磁盘上以后使用,更甚于通过网络发送给他处使用。
这个类的实例是JasperReports报表填充过程的输出,可以作为自定义格式的存储特征和页面导向的文档。它可以通过调用其他的方法被转换成诸如PDF、HTML、XML等常见的格式。
Interface dori.jasper.engine.JRDataSource
JasperReports在报表数据来源方面是具有高柔韧性的。人们可以使用任意的数据源,前提条件就是能够提供一个这个接口的恰当的实现。这样报表引擎可以在填充报表时从数据源解析和检索数据。
通常来说,如果一个报表填充了数据,肯定有一个这个接口的实例被报表引擎提供或创建。
Class dori.jasper.engine.JRResultSetDataSource
这个类是dori.jasper.engine.JRDataSource接口的一个默认实现。由于大多数的报表都由关系数据库的数据生成,JasperReports包含了一个封装了java.sql.ResultSet对象的默认实现。
这个类有着明确的目的:在传给报表填充测试之前封装已经载入的数据集。在执行了通过JDBC的报表查询后它会被用来封装从数据库获得的数据。
Class dori.jasper.engine.data.JRTableModelDataSource
这个类是dori.jasper.engine.JRDataSource接口的另外一个默认实现。它封装了
javax.swing.table.TableModel对象。它可以在Java Swing应用程序中通过已经载入的
屏幕表格的数据生成报表。
Class dori.jasper.engine.JREmptyDataSource
作为最简单的dori.jasper.engine.JRDataSource接口的实现,这个类可以在不希望显示从数据源获得的数据,而只关心数据源的虚拟行数时在报表中使用。
在提供的例子里有不少在填充报表时用到了这个类的实例,例如:fonts、images、shapes和unicode。这样做是为了模拟一个有一条空记录的数据源。
Class dori.jasper.engine.JasperFillManager
这个类实现了JasperReports的报表填充功能。它提供了接收以对象、文件或者输入流形式的报表设计和多样的输出形式如对象、文件和输出流的方法
但是由于和报表设计放在一起,报表填充引擎为了生成文档不得不通过接收数据和值来接收数据源,以便生成报表参数。参数的值通常通过一个java.util.Map对象来提供,这个Map对象的键是报表参数的名字。
数据源在不同的情况下可以通过两种方式提供:
通常情况下,它必须作为一个dori.jasper.engine.JRDataSource对象被提供,就像上面说的那样。
但是由于大多数的报表所填的值都是从关系数据库取出来的。JasperReports有一个内建的默认行为,可以让人们在报表设计的时候就指定一条SQL查询语句。当在运行时填充报表的时候,执行SQL查询语句来获得需要填充的值。在这种情况下,JasperReports需要的仅仅是一个java.sqlConnection对象,一个通常的数据源对象的实例。JasperReports需要使用这个连接对象通过JDBC连接到关系数据库管理系统,并且执行报表查询。
在执行了报表查询后,JasperReports会自动创建一个
dori.jasper.engine.JRResultSetDataSource对象来封装java.sql.ResultSet对象,并将它
传给普通的填充过程使用。
Class dori.jasper.engine.JRAbstractScriptlet
脚本程序(Scriptlets)是JasperReports类库中一个非常强大的功能。它可以让用户自己编写在填充过程中可以被报表引擎执行的代码。用户代码可以在一个定义良好的片断(例如:页、列或者组)里操作报表数据;为生成的文档建立一个新的range。
Class dori.jasper.engine.JRDefaultScriptlet
这是dori.jasper.engine.JRAbstractScriptlet的一个便利的子类。大多数时间用户在使用脚本程序时会选择这个类,这样他们就不需要实现抽象类里定义的所有抽象方法了。
Class dori.jasper.engine.JasperPrintManager
我们在这里谈论Java报表工具而报表工具的意义就在于打印(显示)。在生成了文件形式的报表后,必须有办法来显示它,将它以不同的格式输出,而不光光是打印出来。
在JapserReports中,我们可以通过这个类来打印报表,它包含了所有的打印功能。 它提供了打印整个文档或者部分文档、显不显示打印对话框的方法。
使用这个类可以将JasperReports文档的一页作为一个java.awt.Image对象来显示。
Class dori.jasper.engine.JasperExportManager
上面提到JasperReports可以将文档从它自己的格式转变成流行的文档格式,例如PDF、HTML或者XML。以后,JasperReports将会支持CSV、XSL和其他的格式。
这个管理类对不同来源和不同去处(文件、输入输出流等)的数据提供不同的方法。
Class dori.jasper.engine.JasperRunManager
有时候在报表填充过程中我们不希望生成中间的dori.jasper.egine.JasperPrint对象,而直接生成我们所需要的文档格式,例如:PDF或HTML。