使用JFreeReport生成报表
2008-01-05 10:02:18 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃闁硅櫕鎹囬垾鏃堝礃椤忎礁浜鹃柨婵嗙凹缁ㄧ粯銇勯幒瀣仾闁靛洤瀚伴獮鍥敍濮f寧鎹囬弻鐔哥瑹閸喖顬堝銈庡亝缁挸鐣烽崡鐐嶆棃鍩€椤掑嫮宓佸┑鐘插绾句粙鏌涚仦鎹愬闁逞屽墰閹虫捇锝炲┑瀣╅柍杞拌兌閻ゅ懐绱撴担鍓插剱妞ゆ垶鐟╁畷銉р偓锝庡枟閻撴洘銇勯幇闈涗簼缂佽埖姘ㄧ槐鎾诲礃閳哄倻顦板┑顔硷工椤嘲鐣烽幒鎴旀瀻闁规惌鍘借ⅵ濠电姷鏁告慨顓㈠磻閹剧粯鈷戞い鎺嗗亾缂佸鏁婚獮鍡涙倷閸濆嫮顔愬┑鐑囩秵閸撴瑦淇婇懖鈺冪<闁归偊鍙庡▓婊堟煛鐏炵硶鍋撻幇浣告倯闁硅偐琛ラ埀顒冨皺閺佹牕鈹戦悙鏉戠仸闁圭ǹ鎽滅划鏃堟偨缁嬭锕傛煕閺囥劌鐏犻柛鎰ㄥ亾婵$偑鍊栭崝锕€顭块埀顒佺箾瀹€濠侀偗婵﹨娅g槐鎺懳熺拠鑼舵暱闂備胶枪濞寸兘寮拠宸殨濠电姵纰嶉弲鎻掝熆鐠虹尨宸ョ€规挸妫濆铏圭磼濡搫顫嶇紓浣风劍閹稿啿鐣烽幋锕€绠婚悹鍥у级瀹撳秴顪冮妶鍡樺鞍缂佸鍨剁粋宥夋倷椤掍礁寮垮┑鈽嗗灣閸樠勭妤e啯鍊垫慨妯煎亾鐎氾拷

核心提示:报表生成一直是企业信息化过程中重要的一环,也是目前比较难于实现的一环,使用JFreeReport生成报表,今天作者给大家介绍一种新的报表生成组件――JFreeReport,JFreeReport是JFreeReport.Org基于LGPL授权协议提供的一组java包,而扩展格式则能够对JFreeReport的报表定义提
报表生成一直是企业信息化过程中重要的一环,也是目前比较难于实现的一环,今天作者给大家介绍一种新的报表生成组件――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.1 JFreeReport组件
请大家到http://PRdownloads.sourceforge.net/jfreereport/jfreereport-0.8.4_7.zip?download下载JFreeReport组件,下载的是一个ZIP文件,然后将ZIP文件解压缩到c:\jfreereport(后面的章节中将使用%jfreereport_home%表示这个目录)目录下。
1.2 JFreeReport扩展组件
请大家到http://www.jfree.org/jfreereport/jfreereport-ext-0.8.4_7.zip下载JFreeReport扩展组件,他用于支持JFreeReport组件生成的报表的在线显示。请大载后解压缩到c:\jfreereport-ext目录下(后面的章节中将使用%jfreereport_ext_home%表示这个目录)
1.3 Ant工具
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%表示这个目录)目录下。
2 JFreeReport生成报表的基本步骤
我们首先演示一个简单的例子,说明使用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 < 100 ; 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的报表定义提供完整的支持,但是扩展格式太具体了,不太轻易使用。
关于这两种报表定义格式文件所
Tags:使用 JFreeReport 生成
编辑录入:爽爽 [复制链接] [打 印][]
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接