
使用JFreeReport生成报表(1) |
文章摘要 JFreeReport用于生成报表。JFreeReport的数据继承自Swing组件的TableModel接口,使用基于XML的报表格式定义文件对报表进行格式化。JFreeReport生成的报表可以分页预览、打印或者保存为多种格式的文件如pdf、Excel、html等。作者在本文中详细的介绍了如何定义报表格式定义文件、如何使用JFreeReport生成/预览报表和将报表转为其它各种格式。 关键词 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; } |