`
xls
  • 浏览: 109959 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用JSP生成PDF报表

 
阅读更多

报表生成一直是企业信息化过程中重要的一环,也是目前比较难于实现的一环,今天作者给大家介绍一种新的报表生成组件――JFreeReport。JFreeReport是JFreeReport.Org基于LGPL授权协议提供的一组java包,用于生成各类报表,JFreeReport的数据继承自Swing组件的TableModel接口,使用基于XML的报表格式定义文件对报表进行格式化。JFreeReport生成的报表可以分页预览、打印,而且支持导出为多种格式的文件如pdf、Excel、CSV、html等。更重要的是,JFreeReport不仅支持基于C/S结构的系统,而且支持基于B/S结构的系统中的在线报表显示。更详细的关于JFreeReport的介绍请大家访问JFreeReport的官方网站JFreeReport.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文件。然后解压缩到%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生成报表通常需要以下三个基本步骤:
1. 生成可通过TableModel接口访问的数据,如本例中的createData方法完成的功能
2. 生成一个JFreeReport实例,他定义了我们如何格式化显示数据,如本例中的createReportDefinition方法完成的功能
3. 将数据和JFreeReport实例连接起来,并且将该JFreeReport实例传给PreviewDialog的一个实例显示给用户

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

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

关于这两种报表定义格式文件所支持的标签内容以及如何编写这两种格式的报表定义文件请大家参考%jfreereport_home%下的jfreereport-0.8.3-A4.pdf中的相关部分,该文件附录中还包括了这两种格式的报表定义文件的DTD文档供大家参考.当然大家也JFreeReport的例子中提供了多种形式的报表定义文件,基本上涵盖了常用的报表格式定义,大家可以参考这些例子编写自己的报表定义文件,。
3.2 代码编制
这个例子和2.2中的代码基本一致,只是报表定义内容不再由java编码实现,而是由报表定义文件提供,所以调用方面稍微有点不同,详细的代码如下,请大家注意其中加粗显示的部分:
/**
* JFreeReport.java
*/

package org.vivianj.jfreereport;

import java.io.File;
import java.text.MessageFormat;
import javax.swing.table.TableModel;
import javax.swing.JFrame;

import org.jfree.ui.RefineryUtilities;
import org.jfree.report.Boot;
import org.jfree.report.modules.gui.base.PreviewFrame;
import org.jfree.report.modules.parser.base.ReportGenerator;
import org.jfree.report.JFreeReport;

import org.vivianj.jfreereport.tablemodel.SampleData;

/**
* 使用JFreeReport生成复杂报表的例子,用于演示使用JFreeReport生成复杂报表的一些基本步骤
*
* 本例子中,报表定义使用了报表定义文件,该文件是保存在c:\下的report3.xml文件
* 本例中使用的报表定义使用了简单报表定义格式
*
* @ 作者 : bookman
*/
public class JFreeTest
{

public JFreeTest(final String urlname, final TableModel data)
{
//创建对报表定义文件的引用
final File in = new File(urlname);;
if (in == null)
{
System.out.print(" in is null");
return;
}

System.out.print("Processing Report: " + in);
final ReportGenerator gen = ReportGenerator.getInstance();

try
{
//从报表定义文件中获得要用到的报表定义内容
final JFreeReport report1 = gen.parseReport(in);
if (report1 == null)
{
System.out.print(" report1 is null");
return;
}
//将报表定义和数据结合
report1.setData(data);
//将生成的报表放到预览窗口中
final PreviewFrame frame1 = new PreviewFrame(report1);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.pack();
RefineryUtilities.positionFrameRandomly(frame1);
frame1.setVisible(true);
frame1.requestFocus();
}
catch (Exception e)
{
System.out.print("report.definitionfailure-----------------------\r\n" + e);
}
}

 

public static void main(String[] args)
{
Boot.start();

final TableModel data3 = new SampleData();
JFreeTest jft = new JFreeTest("c:
report3.xml",data3);
}
}
4 中文乱码问题
大家在参看报表定义文件的时候会发现,里面的报表头定义中有一些显示内容,如果你直接将他修改成中文,显示在报表上就会乱码,这是因为这些报表定义文件都是XML文档,他的encoding默认设置是ISO-8859-1,所以出现了中文乱码的问题,解决办法有两个:
1. 最简单的方法就是将encoding的设置修改为GB2312
2. 还有一个方法就是不修改encoding的设置,而是将这些中文内容使用他们的unicode码来代替。
[注] 作者提供了一个GUI的界面提供这种转化功能,你只需要输入中文就可以获得对应的unicode码,请大家下载作者提供的gb2unicode.jar,设置好java运行环境,然后执行java –jar gb2unicode.jar就可以了。

分享到:
评论

相关推荐

    JAVA生成PDF报表.pdf

    通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好地解决了B/S系统的报表处理问题。 一、前言 在企业的信息系统中,报表处理一直占据着重要的作用。报表处理的...

    利用iText在JSP中生成PDF报表.rar源码都有 和列子

    在JSP(JavaServer Pages)环境中,开发者经常使用iText来动态生成PDF报表,这在数据导出、报告生成或者电子发票等场景中非常常见。这个压缩包“利用iText在JSP中生成PDF报表.rar”提供了一个实例,帮助我们理解如何...

    jsp生成pdf文件

    在IT行业中,生成PDF文件是常见的需求,尤其是在报表和数据分析领域。JSP(JavaServer Pages)作为Java平台上的动态网页技术,提供了与后端数据交互并呈现的方式。本篇文章将详细探讨如何在JSP页面中利用Highcharts...

    Java动态生成PDF格式报表

    在企业的信息系统中,报表处理一直占比较重要的作用,这里介绍一种生成PDF...通过在服务器端使用Jsp或 JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题

    生成PDF报表.rar

    标题中的“生成PDF报表”指...综上所述,“生成PDF报表.rar”资源很可能包含一个或多个JSP相关的示例项目或代码片段,用于演示如何在Java Web环境中生成PDF报表。用户可以参考这些代码来学习和实现自己的PDF报表功能。

    ireport利用jsp导出excel&pdf;报表源代码

    本教程将详细介绍如何利用iReport和JSP在服务器端生成Excel和PDF格式的报表。 首先,理解iReport的核心概念至关重要。iReport允许用户通过拖拽和设计元素来创建报表模板,这些模板可以包含静态文本、图像、表格以及...

    利用iText在JSP中生成PDF报表

    问题的由来 前不久做了一个通过JSP生成PDF报表的小项目,算得上开了一次眼界。企业的一些信息通过网络形成Html报表,虽然IE可以直接打印显示在其中的内容,但是从界面上来看,如果直接将Html的显示结果打印出来,...

    JSP使用水晶报表实例

    本实例以"JSP使用水晶报表"为主题,将介绍如何在JSP项目中集成并利用水晶报表来展示数据。首先,你需要确保已安装了水晶报表的相关库,包括水晶报表的Java API和运行时环境。这些组件通常可以通过官方渠道或第三方库...

    Jsp轻松实现PDF格式报表

    #### 五、通过JSP页面生成PDF报表 除了在Java程序中生成PDF文件外,还可以直接在JSP页面中生成PDF文件,并立即显示给用户查看。这种方法的优点是无需在服务器端生成PDF文件,可以有效节省服务器空间。 在JSP页面中...

    用Java实现PDF报表

    总的来说,使用Java和iText生成PDF报表是一种高效且灵活的方法,特别适合于需要在Web应用程序中提供可下载的高质量报告的场景。通过熟练掌握iText的使用,开发者能够创建出专业且功能丰富的PDF报表,从而提升企业...

    使用jspdf生成pdf报表

    在现代Web应用中,生成PDF报表的需求越来越普遍,特别是在用户需要离线查看或打印数据时。本场景中,我们讨论如何使用JavaScript库jspdf来创建PDF报表,特别是处理前端动态生成的HTML图表,这些图表可能包含SVG元素...

    JSP使用JFreeChart生成各种图表并生成PDF文档

    在JSP中,我们可以用它来将生成的图表整合到PDF中: 1. **引入IText库**: 添加IText依赖到项目中。 2. **创建PDF文档**: 使用`Document`类初始化一个新的PDF文档,设置页面大小、边距等属性。 3. **创建PDF ...

    java jsp水晶报表详解

    为了在JSP环境中使用水晶报表,需要完成一系列的配置步骤: 1. **安装与配置** - 安装Crystal Reports XI和J2SE 5.0 SDK。 - 将JRC组件添加到项目中。 2. **环境准备** - 配置服务器环境,确保JSP页面可以访问...

    报表与打印(jsp).rar

    如果需要更高级的控制,如自定义页眉页脚、分页等,可以使用Java的PrintService API或者第三方库如PDFBox,生成PDF后再进行打印。 此外,压缩包中的"10报表与打印"可能是一个目录或文件,这可能包含了示例代码、...

    jsp上使用jasper做报表

    JasperReports是一个用Java编写的报表引擎,它可以读取设计文件(通常是JRXML格式),并根据这些设计生成各种类型的报表,如PDF、HTML、Excel等。设计报表的过程通常分为两个阶段:设计和编译。设计阶段是在iReport...

    jsp结合ireport报表工具实现的分页程序。

    通过这个项目,开发者可以掌握JSP与报表工具的结合使用,提升数据展现和分析能力,为企业或个人项目提供更强大的报表解决方案。同时,这也为学习Java Web开发和数据分析的人员提供了一个实用的实践案例。

    jsp导出pdf文件代码

    在某些应用场景下,如报表生成、数据导出等,我们可能需要在JSP页面上提供功能来导出数据为PDF文件。下面将详细介绍如何在JSP中实现PDF文件的导出。 首先,我们需要一个库来帮助我们生成PDF。一个常见的选择是iText...

    在JSP中导出pdf和excel.docx

    2. 生成报表:使用 JasperReports 生成报表,选择报表格式(PDF、Excel 等)。 3. 导出报表:使用 JasperReports 导出报表为 PDF、Excel 等格式。 四、使用 iText 生成 PDF 文件 iText 是一个开源的 Java 类库,...

    JSP.rar_jsp_jsp project design_jsp 报表_mvc_报表 java

    Java作为后端语言,提供强大的数据处理能力,支持与各种数据库的连接,以及丰富的类库和框架,如Hibernate用于对象关系映射,Spring MVC用于构建MVC架构,iText或Flying Saucer用于PDF报表生成。 **文件列表** 在...

    根据PDF模板生成PDF文件 下载 在线预览 需要的jar、templet

    在IT行业中,生成PDF文件是一项常见的任务,尤其在文档生成、报表输出以及电子发票等领域。本主题关注的是如何根据PDF模板来生成PDF文件,这通常涉及到一些特定的技术框架和库。下面将详细介绍这个过程,以及相关...

Global site tag (gtag.js) - Google Analytics