分享
 
 
 

使用JFreeReport生成报表

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

报表生成一直是企业信息化过程中重要的一环,也是目前比较难于实现的一环,今天作者给大家介绍一种新的报表生成组件――JFreeReport。JFreeReport是JFreeReport.Org基于LGPL授权协议提供的一组Java包,用于生成各类报表,JFreeReport的数据继续自Swing组件的TableModel接口,使用基于XML的报表格式定义文件对报表进行格式化。JFreeReport生成的报表可以分页预览、打印,而且支持导出为多种格式的文件如pdf、Excel、CSV、Html等。更重要的是,JFreeReport不仅支持基于C/S结构的系统,而且支持基于B/S结构的系统中的在线报表显示。更具体的关于JFreeReport的介绍请大家访问JFreeReport的官方网站JFree.org。

1环境预备

1.1JFreeReport组件

请大家到http://prdownloads.sourceforge.net/jfreereport/jfreereport-0.8.4_7.zip?download下载JFreeReport组件,下载的是一个ZIP文件,然后将ZIP文件解压缩到c:\jfreereport(后面的章节中将使用%jfreereport_home%表示这个目录)目录下。

1.2JFreeReport扩展组件

请大家到http://www.jfree.org/jfreereport/jfreereport-ext-0.8.4_7.zip下载JFreeReport扩展组件,他用于支持JFreeReport组件生成的报表的在线显示。请大载后解压缩到c:\jfreereport-ext目录下(后面的章节中将使用%jfreereport_ext_home%表示这个目录)

1.3Ant工具

Apache公司提供的一个基于JAVA的自动化脚本引擎,请大家到http://ant.apache.org/下载ant的可执行文件,关于如何使用ant请大家查看ant的帮助文档或者http://ant.apache.org/网站上的在线帮助文档。示例中主要是用ant来负责编译java代码。

1.4作者提供的代码

为了运行本文中作者提到的例子和相关资源文件,请大家下载作者提供的vivianjDemo.zip文件和中文转换工具gb2unicode.jar。然后解压缩到%jfreereport_home%\vivianjDemo(后面的章节中将使用%demo _home%表示这个目录)目录下。

2JFreeReport生成报表的基本步骤

我们首先演示一个简单的例子,说明使用JFreeReport生成报表的一些必要的步骤。

2.1实例说明

在这个例子中,我们将循环生成100条数据放入TableModel中,然后使用JFreeReport组件提供的预览功能在屏幕上显示生成的报表。

[注] 为了简化,这里仅仅是逐条显示数据,不作任何修饰和统计工作,所以也不使用报表格式定义文件。

2.2代码编制

整个演示实例(HelloWorld.java)的代码和相关注释如下,假如你执行了1.3中规定的步骤,你可以在%demo _home%/src/org/vivianj/jfreereport/看到这个文件。

/**

* HelloWorld.java

*/

package org.vivianj.jfreereport;

import java.awt.Color;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.geom.Point2D;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableModel;

import org.jfree.report.Boot;

import org.jfree.report.ElementAlignment;

import org.jfree.report.JFreeReport;

import org.jfree.report.ReportProcessingException;

import org.jfree.report.elementfactory.TextFieldElementFactory;

import org.jfree.report.modules.gui.base.PreviewDialog;

import org.jfree.ui.FloatDimension;

/**

* 使用JFreeReport生成报表的简单例子,用于演示使用JFreeReport生成报表的一些基本步骤

*

* 本例子中,为了简化操作,报表定义是使用java直接编码

*

* @ 作者 : bookman

*/

public class HelloWorld

{

/**

* 处理窗口关闭事件

*/

protected static class CloseHandler extends WindowAdapter

{

public void windowClosing(final WindowEvent event)

{

System.exit(0);

}

}

/**

* 创建和显示简单的报表

*/

public HelloWorld()

{

// 获得创建报表需要用到的数据

final TableModel data = createData();

//获得报表要用到的报表定义内容

final JFreeReport report = createReportDefinition();

//将报表定义和数据结合

report.setData(data);

try

{

//将生成的报表放到预览窗口中

final PreviewDialog preview = new PreviewDialog(report);

preview.addWindowListener(new CloseHandler());

preview.pack();

//显示报表预览窗口

preview.setVisible(true);

}

catch (ReportProcessingException e)

{

System.out.println(e);

}

}

/**

* 创建生成报表需要用到的数据

*

* @返回一个TableModel实例

*/

private TableModel createData()

{

final Object[] columnNames = new String[]{"Column1", "Column2"};

final DefaultTableModel result = new DefaultTableModel(columnNames, 100);

int rownum = 0;

int colnum = 0;

for (;rownum

{

result.setValueAt("say Hello " + rownum + "次", rownum, 0);

result.setValueAt("say World " + rownum + "次" , rownum, 1);

}

return result;

}

/**

* 创建一个报表定义

*

* @返回一个报表定义实例

*/

private JFreeReport createReportDefinition()

{

final JFreeReport report = new JFreeReport();

report.setName("A Very Simple Report");

/**

* 定义要显示报表第一列的样式

*/

TextFieldElementFactory factory = new TextFieldElementFactory();

factory.setName("T1");

factory.setAbsolutePosition(new Point2D.Float(0, 0));

factory.setMinimumSize(new FloatDimension(150, 20));

factory.setColor(Color.black);

factory.setHorizontalAlignment(ElementAlignment.LEFT);

factory.setVerticalAlignment(ElementAlignment.MIDDLE);

factory.setNullString("-");

factory.setFieldname("Column1");

report.getItemBand().addElement(factory.createElement());

/**

* 定义要显示报表第二列的样式

*/

factory = new TextFieldElementFactory();

factory.setName("T2");

factory.setAbsolutePosition(new Point2D.Float(200, 0));

factory.setMinimumSize(new FloatDimension(150, 20));

factory.setColor(Color.black);

factory.setHorizontalAlignment(ElementAlignment.LEFT);

factory.setVerticalAlignment(ElementAlignment.MIDDLE);

factory.setNullString("-");

factory.setFieldname("Column2");

report.getItemBand().addElement(factory.createElement());

/**

* 返回一个报表定义的实例

*/

return report;

}

public static void main(final String[] args)

{

// 初始化JFreeReport

Boot.start();

//调用演示实例

new HelloWorld();

}

}

2.3运行例子

假如你执行了1.3中规定的步骤,你可以进入命令行界面,然后进入%demo_home%目录下,修改setenv.cmd中的相关设置,执行serenv.cmd设置环境变量。执行java org.vivianj.jfreereport.HelloWorld查看运行结果。下面这个图片是作者执行后结果的屏幕截图:

大家可以看到,JFreeReport已经自动帮我们实现了分页。上面这个图片显示的是第一页的数据,你可以通过工具栏中的查看其它页面中的内容。

2.4基本步骤解释

使用JFreeReport生成报表通常需要以下三个基本步骤:

生成可通过TableModel接口访问的数据,如本例中的createData方法完成的功能

生成一个JFreeReport实例,他定义了我们如何格式化显示数据,如本例中的createReportDefinition方法完成的功能

将数据和JFreeReport实例连接起来,并且将该JFreeReport实例传给PreviewDialog的一个实例显示给用户

3使用JFreeReport生成复杂报表

3.1报表定义文件

报表定义文件是JFreeReport生成复杂报表的重要文件,他就是一个XML文档,主要描述如何使用指定的格式生成复杂的报表,同时使用报表定义文件也可以在报表格式需要修改时只需要更新该报表定义文件,而不需要修改应用代码。

3.1.1报表定义文件分类

JFreeReport中使用了两种基于XML的报表定义文件来保存报表定义信息:简单格式和扩展格式.很明显,简单格式不能够完全的描述JFreeReport支持的全部报表定义信息,但是他更易于上手使用。而扩展格式则能够对JFreeReport的报表定义提供完整的支持,但是扩展格式太具体了,不太轻易使用。

关于这两种报表定义格式文件所

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有