1、 1 一、 JavaReport 介绍 JavaReport 主要有如下优点。 ( 1)支持实时的、动态的 Web 统计报表 JavaReport 所展示的报表是动态的报表。所有的数据都是实时的数据;所有的统计图也是动态生成的。报表里面的数据源可从数据库中即时查询产生,适合于对实时统计要求高的 应用系统 。 ( 2)接口丰富 ,对图表提供良好的支持 JavaReport 提供了丰富的应用程序接口、减少代码复用、灵活的图表形式、即时图表生成、更短的生成时间等。 Java 报表对图表有良好的支持,可以生成柱图、饼图和折线图等十几种图表。 ( 3)报表可导出成各种格式的文档 JavaReport 在
2、报表展现方面表现优异,能实现 Word, Excel, PDF, CSV 等格式精确导出等功能,并提供了全部的页面与打印控制。 ( 4)开发简便,程序员只须编写少量程序代码 有许多的问题在 JavaReport 组件内已经解决,如报表的导出功能、打印功能和数据的分页处理等。在很多 B/S 结构体系的系统开发时,分页是开发过程中要重点考虑的问题。但在 JavaReport 中,就不需要考虑上下翻页,跨页分页,因为这些问题报表引擎已经实现了。在设计报表的过 程中,把 Report 类当作容器类,统计图类,表格类,标签类,图片类等,把它们当作组件类。至于跨页分页,上下翻页由报表引擎自动完成。 Jav
3、aReport 系统中有自动跨页分页的功能,当表格超过当前页的大小时,系统会自动把接着部分放到下一页。报表设计在开发过程中是感觉不到要跨页的存在,只有一个全部数据完整的表格对象。 如果把引入图片文件加入到报表中,可使用报表系统的 Report 类,通过这个类的addImage()方法把 Image 对象加进来,如果需要自定义图像,可通过第三方画图程序(例如是 JFreeChart 程 序)生产需要的统计图 /图片,然后再把图像加到报表中去。 本书中使用的 JavaReport 版本是 V3.0, JavaReport 根据客户的应用需要,按照功能和性能的等级,分成三个版本:专业版, 服务器 版
4、,企业版。本书使用企业版。 JavaReport 三个版本产品都是免费使用的。也就是说这三个版本都不需要购买 License许可, 可以自由使用 JavaReport 的所有功能。免费提供报表在 Web 展示功能,表和图怎样混合功能,跨页分页功能,导出电子文档 Word, PDF, Excel, CSV, HTML 等诸多功能。 专业版客户( Client)的 IP 最大连接数限制为 10 个,也就是 JavaReport 同时并行处理线程的最大数受限制。限制是为了避免系统 资源 占用过大,使系统反应迟 钝。该版本适合中小型的应用系统,保障应用系统正常运行。 服务器版在最大连接数没有受限,它能
5、充分发挥服务器的个部分硬件设备的作用;相对要求服务器的设备配置高,保障最优性能效率。该版本适合大中型的应用系统使用。 2 企业版提供垃圾回收机制管理,自动处理在内存中无用对象的引用;支持多服务器处理模式,提供在多个服务器的集群功能和服务器之间负载均衡功能。提高服务器群的负载能力和和快速响应能力。该版本适合负载繁重的应用系统使用。 二、 安装 JavaReport 找到 JavaReport-V3-Enterprise-Released.jar 这个 Jar 文件,把这个文件的路径加入到 classpath系统变量中,或拷贝到当前 Web应用的 WEB-INFlib目录下,或拷贝到 Tomcat
6、5的安装目录的 commonlib 目录中;第一种方法和第三种方法对所有 Web 应用有效,而第二种方法仅对当前 Web 应用有效。 好了,至此, JavaReport 就算安装完毕了。接下来,继续介绍 JavaReport。 三、 相关类介绍 下面给出 Web 报表显示时的情况,如图 17-11 所示。 在这个图中,对报表的显示情况一目了然,再介绍常用的类理解起来就会比较清晰了。 JavaReport 的组件包中有许多的类,体系庞大而复杂,在这里无法一一介绍,仅列出一些常用的类来作出说明,有兴趣的可参考详细的 API 手册。 ( 1) WebReportEngine 类 即 com.java
7、report.http.WebReportEngine,这个类是整个 JavaReport 中的 Web 引擎的开发接口。所有的 JSP 或 Servlet 从这个类继承下来,覆盖 createReport()函数就实现基本的报表开发工作。 WebReportEngine 是 JavaReport 的 Servlet 或 JSP 的开发接口,是 JSP 或 Servlet 的父类,报表系统在应用中的程序从此处继承下来,可以根据需要调整接口内容。部分函数可以适当删除。在开发中一般是实现 createReport()函数就可以,形成实时动态报表就是3 在这个函数里实现的。剩下的工作(怎样在 Web
8、 上显示,怎样形成 Work, PDF 文件,等)交给报表引擎自动实现。 如果是在 JSP 中,在页头部分 应加入如下语句: 如果是 Servlet,相应的 Servlet 类声明时语句如下: public class Servlet 类名称 extends WebReportEngine ? createReport() 方法原型如下: public Report createReport(javax.servlet.http.HttpServletRequest request) throws java.lang.Exception 此方法用于建立报表,并返回报表的实例。这个报表实例可以在
9、 Web 上显示,同时也可以导出 Word, Excel, PDF, CSV, HTML 等格式的文档以供使用。 参数 request 可用于获取所有的动态请求的数据。 ? validate() 此方法用于对上一个页面 Form 提交的参数进行检查,由于实时报表需要动态的参数,在这里进行数据校验。方法原型如下: public java.lang.String validate(javax.servlet.http.HttpServletRequest request) 其中,参数 request 可用于获取所有的动态请求的数据;方法的返回值为 null 时代表通过,其他内容则为参数错误的提示信
10、息。 ? getStartScript() 方法用于构造报表内容在 Web 页面上显示之前执行的 JavaScript 或 VBScript 脚本,如果要定制则要重载这个方法。方法原型如下: public java.lang.String getStartScript(javax.servlet.http.HttpServletRequest request) 其中,参数 request 可用于获取所有的动态请求的数据;方法返回值为 null 时代表没有脚本内容。 ? getEndScript() 方法用于构造报表内容在 Web 页面上显示之后执行的 JavaScript 或 VBScript
11、 脚本,如果要定制则要重载这个方法。方法原型如下: public java.lang.String getEndScript(javax.servlet.http.HttpServletRequest request) 其中,参数 request 可用于获取所有的动态请求的数据;方法返回值为 null 时代表没有脚本内容。 ? getToolbarScript() 4 方法用于定制 Web 报表在页面首部显示的工具栏为 标准 的样式(上下翻页,导出文件),可以在此扩展工具栏的内容,如:添加公司主页的链接,返回上一层链接的“返回”按钮,如果要定制则要重载这个方法。方法原型如下: public j
12、ava.lang.String getToolbarScript(javax.servlet.http.HttpServletRequest request) 其中,参数 request 可用于获取所有的动态请求的数据;方法返回值为 null 时代表不添加内容。 ? isShowToolbar() 如果不想在页面上显示报表工具栏,可重载这个方法,并设定返回值为 false。需要注意的是,如果是多页报表,上下翻页按钮就无法使用。方法原型如下: public boolean isShowToolbar() 方法的返回值是是否显示工具栏的布尔值标志。 ? getAllEchoButton() 方法用
13、于自定义显示在 Web页面中的报表导出文件的按钮,比如应用中只导出 PDF文件,其他的不需要,就可以这里设定。按钮值从 Word 按钮开始是( 1, 2, 4, 8, .),需要显示的按钮则将它们的值相加就可以了。默认情况下工具栏上的按钮如图 17-12 所示: 图 17-12 默认情况下工具栏上的按钮 方法原型如下: public int getAllEchoButton() 方法的返回值是显示按钮对应的和值。要作自定义,需要重载这个方法,并将返回值设为要显示的按钮对应的和值。 ( 2) Report 类 即 com.javareport.beans.Report,报表类。这个类的对象用于代
14、表一张报表,是所有报表元素的容器,这是整个系统的核心,也是在浏览器上显示和生成电子文档( Word, Excel,PDF, Html 等)的基础。 ? addHeaderSeparator() 方法用于在报表的页眉添加一条横直线。方法原型如下: public java.lang.String addHeaderSeparator(int num) 其中,参数 num 表示横直线的粗细程度,以自然数表示,数字越大表示线越粗。 ? addHeaderSpace() 此方法用于在页眉中添加若干个空格。方法原型如下: public java.lang.String addHeaderSpace(int
15、 num) 5 其中,参数 num 是要添加的空格的个数。 ? addHeaderTab() 方法用于在页眉中添加若干个【 Tab】键,【 Tab】键跟空格键一样是不可见的,默认每个【 Tab】为 8 个空格。方法原型如下: public java.lang.String addHeaderTab(int num) 其中,参数 num 是要添加的【 Tab】键的个数。 ? addHeaderBreak() 在页眉中添加一个换行符号,紧跟后面的内容则从下行第一个字符的位置开始。方法原型如下: public java.lang.String addHeaderBreak() ? addHeader
16、Text() 在页眉中添加文本信息内容,紧跟后面的内容则从下行第一个字符的位置开始。方法原型如下: public java.lang.String addHeaderText(java.lang.String text) 其中,参数 text 是要添加的文本信息内容。其中, P代表当前页, N代表总页数,如:“第 P页,共 N页”。 ? addChart() 在报表中添加图表信息内容。方法原型如下: public java.lang.String addChart(ChartImpl chart) 其中,参数 chart 是要添加的图表,图表类 ChartImpl 是 JavaReport 的
17、核心模块,各种各样统计图由图表类生成。 ? setCurrentFont() 设置报表当前的字体。原型如下: public void setCurrentFont(java.awt.Font font) 其中,参数是要设置的字体对象,为 Java 中 java.awt.*包中的 Font 对象。 ? setCurrentBackground() 设置报表当前的背景颜色。原型如下 : public void setCurrentBackground(java.awt.Color color) 其中,参数 color 是要添加的图形对象,为 Java 中 java.awt.*包中的 color 对
18、象。 ? setCurrentForeground() 设置报表当前的前景颜色。原型如下: public void setCurrentForeground(java.awt.Color color) 其中,参数 color 是要添加的图形对象,为 Java 中 java.awt.*包中的 color 对象。 ? addImage() 6 在报表中添加图片信息内容。原型如下: public java.lang.String addImage(java.awt.Image image) 其中,参数 image 是要添加的图形对象,为 Java 中 java.awt.*包中的 Image 对象。
19、? addBullet() 这个方法有两种形式: public java.lang.String addBullet() 或 public java.lang.String addBullet(java.awt.Image image) 该方法用于添加项目符号的表示符号。第一种形式添加默认的项目符号(圆点)的表示符号,第二种形式用自定义的图片内容代替默认的圆点内容。参数 image 是要添加的图形对象,为 Java 中 java.awt.*包中的 Image 对象。 ? addNewline() 方法用于在报表中添加一个换行符号,紧跟后面的内容则从下行第一个字符的位置开始。方法原型如下: pu
20、blic java.lang.String addNewline(int num) 其中,参数 num 代表 换行的数量,即多次换行。 ? addPageBreak() 方法用于在报表中添加换页的标识符号,当报表系统做分页显示时,遇到这个符号时,则紧跟后面的内容在新的一页开始显示。方法原型如下: public java.lang.String addPageBreak() ? addSeparator() 在报表中添加一条横直线。方法原型如下: public java.lang.String addSeparator(int num) 其中,参数 num 表示横直线的粗细程度,以自然数表示,数
21、字 越大表示线越粗。 ? addSpace() 添加若干个空格。方法原型如下: public java.lang.String addSpace(int num) 其中,参数 num 代表空格的个数。 ? addTab() 在报表中添加若干个【 Tab】键,【 Tab】键跟空格键一样是不可见的,默认每个【 Tab】键为 8 个空格。方法原型如下: public java.lang.String addTab(int num) 其中,参数 num 是要添加的【 Tab】键的个数。 ? addText() 在 报表中添加文本信息内容,紧跟后面的内容则从下行第一个字符的位置开始。方法原型如下: pu
22、blic java.lang.String addText(java.lang.String text) 7 其中,参数 text 为要添加的文本信息内容。 ? addTable() 添加报表中的表格信息内容。方法原型如下: public java.lang.String addTable(Table table) 其中,参数 table 是要添加的表格,有关 Table 类的内容详见本节中( 3)中的内容。 ? addFooterSeparator() 在页尾添加一条横直线。方法的原型如下: public java.lang.String addFooterSeparator(int num
23、) 其中,参数 num 为横直线的粗细程度,以自然数表示,数字越大表示线越粗。 ? addFooterSpace() 在页尾添加若干个空格。方法的原型如下: public java.lang.String addFooterSpace(int num) 其中,参数 num 代表要添加的空格的个数。 ? addFooterTab() 在页尾添加若干个【 Tab】键,【 Tab】键跟空格键一样是不可见的,默认每个【 Tab】键为 8 个空格。方法的原型如下: public java.lang.String addFooterTab(int num) 其中,参数 num 为要添加的【 Tab】键的个
24、数。 ? addFooterTab() 在页尾添加一个换行符号,紧跟后面的内容则从下行第一个字符的位置开始。 public java.lang.String addFooterBreak() ? addFooterText() 在页尾添加文本信息内容,紧跟后面的内容则从下行第一个字符的位置开始。方法的原型如下: public java.lang.String addFooterText(java.lang.String text) 其中,参数 text 是要添加的文本信息内容。其中, P代表当前页, N代表总页数,如:“第 P页,共 N页”。 ( 3) Table 类 即 com.javare
25、port.beans.Table,表格类。这个类的对象属于报表对象 Report 中的元素。表格在报表中是不可缺 少的,整齐排列着数据内容。表格单元里面的内容可以是文本内容,也可以是图形和其他元素,同时这个对象也是表套表的基础。 JavaReport 会自动处理表格的跨页、分页问题和新页中的表头显示问题,开发过程中把它想象成连续的就可以了。 ? Table() Table 类的构造函数,用于实例化一个表格对象,方法的原型如下: public Table(java.lang.Object data) 8 其中,参数 data 为填充表格内容的二维数组。 ? setRowAlignment() 设
26、置指定行的对齐方式。方法的原型如下: public void setRowAlignment(int row,int align) 其中,参数 row 为要设置对齐方式的行的编号;参数 align 为要对齐的方式(左,中,右;上,中,下;同时设置左右上下,将两个值相加就可以了)。 ? setRowBackground() 设置指定行的背景颜色,形式如下: public void setRowBackground(int row,java.awt.Color color) 其中,参数 row 为要设置背景颜色的行的编号;参数 color 为要设置的颜色对象,为Java 中 java.awt.*包
27、中的 Color 对象。 ? setRowBorder() 设置表格中所有行的边界外观样式。方法的原型如下: public void setRowBorder(int style) 其中,参数 style 为边界外观样式,即表格单元之间的边界线的粗细情况,该值为整数,值越大 代表线越粗, 0 代表不显示。 ? setRowBorderColor() 设置表格中指定行的边界的颜色,方法的原型如下: public void setRowBorderColor(int row,java.awt.Color color) 其中,参数 row 为要设置边界颜色的行的编号;参数 color 是要设置的颜色
28、对象,为Java 中 java.awt.*包中的 Color 对象。 ? setRowFont() 设置表格中指定行内容的字体。方法的原型如下: public void setRowFont(int row,java.awt.Font font) 其中,参数 row 为要设置字体的指定行;参数 font 是要设置的字体对象,为 Java 中java.awt.*包中的 Font 对象。 ? setRowForeground() 设置表格中指定行的前景颜色,方法的原型如下: public void setRowForeground(int row,java.awt.Color color) 其中,
29、参数 row 是要设置前景颜色的行的编号;参数 color 是要设置的颜色对象,为Java 中 java.awt.*包中的 Color 对象。 ? setRowHeight() 设置表格中指定行的高度。方法的原型如下: public void setRowHeight(int row,int height) 其中,参数 row 是要设置高度的行的编号;参数 height 是要设置的行的高度。 ? setColAlignment() 9 设置表格中指定列的对齐方式,方法的原型如下: public void setColAlignment(int col,int align) 其中,参数 col
30、是指定对齐方式 的列;参数 align 指出对齐的方式,依次为横向左,中,右;竖向上,中,下(如果要同时设置左右上下,可将两个值相加就可以了),值可以用数字表示,也可以用 Table 类的常量来表示(实质上 Table 类实现了com.javareport.ReportConstants 接口,所有常量在 ReportConstants 接口中作了定义),其常量与值的对应情况如下: Table.H_LEFT:横向左对齐,值为 1; Table.H_CENTER:横向居中对齐,值为 2; Table.H_RIGHT:横向右对齐,值为 4; Table.V_TOP:竖向上对齐,值为 8; Tabl
31、e.V_CENTER:竖向居中对齐,值为 16; Table.V_BOTTOM:竖向下对齐,值为 32。 ? setColBackground() 设置表格中指定列的背景颜色。方法的原型如下: public void setColBackground(int index,java.awt.Color color) 其中,参数 index 是指定的列;参数 color 是要设置的颜色对象,为 Java 中 java.awt.*包中的 Color 对象。 ? setColBorder() 设置表格的所有列的边界外观样式,方法的原型如下: public void setColBorder(int s
32、tyle) 其中,参数 style 指定边界外观样式,即表格单元之间边界线的粗细情况,该值为整数,值越大代表线越粗, 0 代表不显示。 ? setColBorder() 设置表格中指定列的边界外观 样式。方法的原型如下: public void setColBorder(int index,int style) 其中,参数 int 为指定的列;参数 style 指定边界外观样式,即表格单元之间边界线的粗细情况,该值为整数,值越大代表线越粗, 0 代表不显示。 ? setColBorderColor() 设置表格中指定列的边界的颜色,方法的原型如下: public void setColBord
33、erColor(int index,java.awt.Color color) 其中,参数 index 为指定的列;参数 color 是要设置的颜色对象,为 Java 中 java.awt.*包中的 Color 对象。 ? setColFont() 设置表格中指定列内容的字体。方法的原型如下: public void setColFont(int index,java.awt.Font font) 其中,参数 index 为指定的列;参数 font 是要设置的字体对象,为 Java 中 java.awt.*10 包中的 Font 对象。 ? setColForeground() 设置表格中指定
34、列的前景颜色,方法的原型如下: public void setColForeground(int index,java.awt.Color color) 其中,参数 index 为指定的列;参数 color 是要设置的颜色对象,为 Java 中 java.awt.*包中的 Color 对象。 ? setColWidth() 设置表格中指定列的宽度。方法的原型如下: public void setColWidth(int index,int width) 其中,参数 index 是要设置高度的列的编号;参数 width 为要设置的列的宽度。 ? setData() 给表格填充数据。表格单元的数据
35、可以是数据,也可以是其他元素。方法的原型如下: public void setData(java.lang.Object data) 其中,参数 data 是填充表格内容的二维数据。 ? setAlignment() 设置表格中所有单元的对齐方式。方法的原型如下: public void setAlignment(int align) 其中,参数 align 是要对齐的方式,具体如何取值请参见 setColAlignment()方法。 ? setColAutoSize() 设置表格中所有列是否自动调整宽度。方法的原型如下: public void setColAutoSize(boolean
36、flag) 其中,参数 flag 是布尔型的标志值。 ? setRowAutoSize() 设置表格中所有行是否自动调整宽度。方法的原型如下: public void setRowAutoSize(boolean flag) 其中,参数 flag 是布尔型的标志值。 ? setFont() 设置所有表格单元的字体。方 法的原型如下: public void setFont(java.awt.Font font) 其中,参数 font 是要设置的字体对象,为 Java 中 java.awt.*包中的 Font 对象。 ? setHeaderColCount() 设置表格列表头的数目。方法的原型如下: public void setHeaderColCount(int count) 其中,参数 count 为列表头的数目。 ? setHeaderRowCount()