﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-网摘-文章分类-JFreeReport</title><link>http://www.blogjava.net/jvict/category/33897.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 23 Apr 2010 07:11:27 GMT</lastBuildDate><pubDate>Fri, 23 Apr 2010 07:11:27 GMT</pubDate><ttl>60</ttl><item><title>用JFreeChart增强JSP报表的用户体验</title><link>http://www.blogjava.net/jvict/articles/318222.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Wed, 14 Apr 2010 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/318222.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/318222.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/318222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/318222.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/318222.html</trackback:ping><description><![CDATA[<p><a href="http://www.sucai.com/Tech/List4/8746.htm">原文：http://www.sucai.com/Tech/List4/8746.htm</a><br />
<br />
JFreeChart是一组功能强大、灵活易用的Java绘图API，使用它可以生成多种通用性的报表，包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表，并且得到广泛的应用。本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用，来达到熟练使用JFreeChart的目的。</p>
<p>一．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下载与环境配置<br />
1. 下载JFreeChart<br />
JFreeChart是开放源代码的免费软件，但是它的支持文档需要付费才能得到。其下载地址为：http://sourceforge.net/project/showfiles.php?group_id=15494，当前最新版本为1.0.6。笔者下载的是1.0.6最新版。<br />
说明：1）source目录：为jfreechart的源码目录；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）lib目录：为包目录，我们需要关注的包为jfreechart-1.0.6.jar、gnujaxp.jar和jcommon-1.0.10.jar这三个包；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）根目录下的jfreechart-1.0.6-demo.jar是例子程序，大家双击后可看到其中有很多例子的运行结果。<br />
2. 环境配置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 笔者的开发环境如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JDK：1.5<br />
MyEclipse：5.1.1 GA<br />
Tomcat：5.5.28<br />
为了后续的&#8220;用JFreeChart创建基于Web的图表&#8221;的一个例子的展示，我们在MyEclipse中创建一个名为jfreechart的Web工程。将下载的JFreeChart1.0.6下lib目录下的jar包拷贝到WebRoot/WEB-INF/lib目录下。另外还需要在web.xml文件中增加如下配置：<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;DisplayChart&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;org.jfree.chart.servlet.DisplayChart&lt;/servlet-class&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;DisplayChart&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/DisplayChart&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
二．&nbsp;&nbsp; 柱状图</p>
<p>在WebRoot目录下建立bar目录，用来存放柱状图的各个例子。首先在该目录下建立一个sample1.jsp文件，让我们来看一个简单的柱状图的例子，修改后的sample1.jsp的内容如下所示：</p>
<p>&lt;%@ page contentType="text/html;charset=GBK"%&gt; &lt;%@ page import="org.jfree.chart.ChartFactory, org.jfree.chart.JFreeChart, org.jfree.chart.plot.PlotOrientation, org.jfree.chart.servlet.ServletUtilities, org.jfree.data.category.DefaultCategoryDataset"%&gt; &lt;% DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(610, "广州", "猪肉"); dataset.addValue(220, "广州", "牛肉"); dataset.addValue(530, "广州", "鸡肉"); dataset.addValue(340, "广州", "鱼肉"); JFreeChart chart = ChartFactory.createBarChart3D("肉类销量统计图", "肉类", "销量", dataset, PlotOrientation.VERTICAL, false, false, false); String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %&gt; &lt;img src="&lt;%= graphURL %&gt;" width=500 height=300 border=0 usemap="#&lt;%= filename %&gt;"&gt; </p>
<p>在浏览器中输入地址：http://localhost:8080/jfreechart/bar/sample1.jsp，可看到如下柱状图：</p>
<div style="text-indent: 21pt"><br />
<br />
<p align="center"><img height="294" alt="用JFreeChart增强JSP报表的用户体验（图一）" src="http://www.sucai.com/tech/newsfile/12000-12999/12619/080410212563410.jpg" width="504" border="0" /></p>
</div>
<div style="text-indent: 21pt"><br />
<br />
&nbsp;</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt">上面的这个柱状图比较简单，稍显单调，在有些情况下，我们需要用不同颜色来表示不同的种类，或者在种类上标上具体数值，亦或需要加上3D水晶效果。下面让我们来做更深一步的探讨。接下来让我们看一个用不同颜色来表示不通种类的例子。在WebRoot的bar目录下新建sample2.jsp页面，将其代码修改如下：<br />
<br />
</div>
<div style="scrollbar-highlight-color: buttonhighlight; overflow: auto; width: 500px">
<pre style="border-right: black 1px solid; padding-right: 4px; border-top: black 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: black 1px solid; padding-top: 4px; border-bottom: black 1px solid; background-color: #ededed">
<div>&lt;%@ page contentType="text/html;charset=GBK"%&gt;
&lt;%@ page import="org.jfree.chart.ChartFactory,
org.jfree.chart.JFreeChart,
org.jfree.chart.plot.PlotOrientation,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.data.category.CategoryDataset,
org.jfree.data.general.DatasetUtilities"%&gt;
&lt;%
double[][] data = new double[][] {{1310}, {720}, {1130}, {440}};
String[] rowKeys = {"猪肉", "牛肉","鸡肉", "鱼肉"};
String[] columnKeys = {""};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
JFreeChart chart = ChartFactory.createBarChart3D("广州肉类销量统计图",
"肉类",
"销量",
dataset,
PlotOrientation.VERTICAL,
true,
false,
false);
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;
%&gt;
&lt;img src="&lt;%= graphURL %&gt;" width=500 height=300 border=0 usemap="#&lt;%= filename %&gt;"&gt;
</div>
</pre>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该页面的运行效果如下图所示：</div>
<div><br />
<br />
<p>&nbsp;</p>
<p align="center"><img height="277" alt="用JFreeChart增强JSP报表的用户体验（图二）" src="http://www.sucai.com/tech/newsfile/12000-12999/12619/080410212563411.jpg" width="464" border="0" /></p>
</div>
<div><br />
<br />
&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 对比该例与前例，可看出createBarChart3D的倒数第三个参数修改成了true，该参数可用来显示下方的： 。上两例我们显示的只是一个城市的肉类销量，有时候我们有对比显示多个城市的不同肉类，只要将上例稍作修改即可。例如要在图中表示广州、深圳、东莞、佛山四个城市的四个肉类的销售情况，只需要将如下三句稍做修改：<br />
<br />
</div>
<div>
<div style="scrollbar-highlight-color: buttonhighlight; overflow: auto; width: 500px">
<pre style="border-right: black 1px solid; padding-right: 4px; border-top: black 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: black 1px solid; padding-top: 4px; border-bottom: black 1px solid; background-color: #ededed">
<div>double[][] data = new double[][] {{1310}, {720}, {1130}, {440}};
String[] rowKeys = {"猪肉", "牛肉","鸡肉", "鱼肉"};
String[] columnKeys = {""};
例如修改成：
double[][] data = new double[][] {{1310, 1220, 1110, 1000},
{720, 700, 680, 640},
{1130, 1020, 980, 800},
{440, 400, 360, 300}};
String[] rowKeys = {"猪肉", "牛肉","鸡肉", "鱼肉"};
String[] columnKeys = {"广州", "深圳", "东莞", "佛山"};</div>
</pre>
</div>
</div>
<div style="text-indent: 21pt">在运行该jsp页面，可看到如下界面：</div>
<div style="text-indent: 21pt">&nbsp;</div>
<div><br />
</div>
<p>&nbsp;</p>
<p align="center"><img height="301" alt="用JFreeChart增强JSP报表的用户体验（图三）" src="http://www.sucai.com/tech/newsfile/12000-12999/12619/080410212563412.jpg" width="502" border="0" /></p>
<p align="left">&nbsp;在上述几例中，在某个柱子上都没有显示相应的数值，下面让我们为每个柱子都加上它的数值，我们新建一个sample4.jsp页面，其内容如下：</p>
<p align="left">&lt;%@ page contentType="text/html;charset=GBK"%&gt; &lt;%@ page import="org.jfree.chart.ChartFactory, org.jfree.chart.JFreeChart, org.jfree.chart.plot.PlotOrientation, org.jfree.chart.servlet.ServletUtilities, org.jfree.data.category.CategoryDataset, org.jfree.data.general.DatasetUtilities, org.jfree.chart.plot.*, org.jfree.chart.labels.*, org.jfree.chart.renderer.category.BarRenderer3D, java.awt.*, org.jfree.ui.*, org.jfree.chart.axis.AxisLocation"%&gt; &lt;% double[][] data = new double[][] {{1310, 1220, 1110, 1000}, {720, 700, 680, 640}, {1130, 1020, 980, 800}, {440, 400, 360, 300}}; String[] rowKeys = {"猪肉", "牛肉","鸡肉", "鱼肉"}; String[] columnKeys = {"广州", "深圳", "东莞", "佛山"}; CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data); JFreeChart chart = ChartFactory.createBarChart3D("肉类销量统计图", "肉类", "销量", dataset, PlotOrientation.VERTICAL, true, true, false); CategoryPlot plot = chart.getCategoryPlot(); //设置网格背景颜色 plot.setBackgroundPaint(Color.white); //设置网格竖线颜色 plot.setDomainGridlinePaint(Color.pink); //设置网格横线颜色 plot.setRangeGridlinePaint(Color.pink); //显示每个柱的数值，并修改该数值的字体属性 BarRenderer3D renderer = new BarRenderer3D(); renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); //默认的数字显示在柱子中，通过如下两句可调整数字的显示 //注意：此句很关键，若无此句，那数字的显示会被覆盖，给人数字没有显示出来的问题 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); renderer.setItemLabelAnchorOffset(10D); //设置每个地区所包含的平行柱的之间距离 //renderer.setItemMargin(0.3); plot.setRenderer(renderer); //设置地区、销量的显示位置 //将下方的&#8220;肉类&#8221;放到上方 plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT); //将默认放在左边的&#8220;销量&#8221;放到右方 plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %&gt; &lt;img src="&lt;%= graphURL %&gt;" width=700 height=400 border=0 usemap="#&lt;%= filename %&gt;"&gt;</p>
<p align="left">运行效果如下所示：</p>
<p align="left"><img alt="用JFreeChart增强JSP报表的用户体验（图四）" src="http://www.sucai.com/tech/newsfile/12000-12999/12619/080410212563413.jpg" width="590" border="0" /></p>
<p align="left">注意：jfreechart的很多版本不兼容，请大家在运行此例时确认下载了对应的版本。</p>
<p align="left">三．&nbsp; 饼图</p>
<p align="left">在WebRoot目录下建立名为pie的子目录，用来存放本教程中饼图的实例jsp页面。下面让我们来看一个简单的三维饼图。首先在pie目录下建立一个名为sample1.jsp的页面。<br />
在JFreeChart中，与饼图绘制密切相关的类如下：<br />
1）&nbsp; PiePlot<br />
饼图绘制类，可以用来设置饼图的相关属性。例如：<br />
PiePlot pieplot = (PiePlot)jfreechart.getPlot();<br />
pieplot.setLabelFont(new Font("SansSerif", 0, 12));<br />
pieplot.setNoDataMessage("No data available");<br />
pieplot.setCircular(false);<br />
pieplot.setLabelGap(0.02D);<br />
2）&nbsp; DefaultPieDataset<br />
默认的饼图数据集类，用来存储饼图显示的相关数据信息。例如：<br />
DefaultPieDataset dataset = new DefaultPieDataset();<br />
dataset.setValue("品德", new Double(0.2D));<br />
dataset.setValue("体育", new Double(0.2D));<br />
dataset.setValue("音乐", new Double(0.2D));<br />
dataset.setValue("其余成绩", new Double(0.4D));<br />
3）&nbsp; ChartFactory<br />
可利用该制图工厂类createPieChart来创建一个饼图的JFreeChart对象，例如：<br />
JFreeChart jfreechart = ChartFactory.createPieChart("饼图示例", dataset, true, true, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面让我们看一个简单的例子，修改sample1.jsp的内容如下：</p>
<p align="left">&lt;%@ page contentType="text/html;charset=GBK"%&gt; &lt;%@ page import="org.jfree.chart.*, org.jfree.chart.plot.PiePlot, org.jfree.data.general.DefaultPieDataset, org.jfree.chart.servlet.ServletUtilities, java.awt.*"%&gt; &lt;% //设置数据集 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("初中高级程序员", 0.55); dataset.setValue("项目经理", 0.1); dataset.setValue("系统分析师", 0.1); dataset.setValue("软件架构师", 0.1); dataset.setValue("其他", 0.2); //通过工厂类生成JFreeChart对象 JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图", dataset, true, false, false); PiePlot pieplot = (PiePlot) chart.getPlot(); pieplot.setLabelFont(new Font("宋体", 0, 12)); //没有数据的时候显示的内容 pieplot.setNoDataMessage("无数据显示"); pieplot.setCircular(false); pieplot.setLabelGap(0.02D); String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %&gt; &lt;img src="&lt;%= graphURL %&gt;" width=500 height=300 border=0 usemap="#&lt;%= filename %&gt;"&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以看出，饼图的绘制与柱状图的绘制类似，该例的运行效果如下：</p>
<p align="left"><img height="303" alt="用JFreeChart增强JSP报表的用户体验（图五）" src="http://www.sucai.com/tech/newsfile/12000-12999/12619/080410212563414.jpg" width="496" border="0" /></p>
<p align="left">有时候我们还想知道某块所占的具体分值，或者需要突出显示某一块。这时候需要对上例进行部分修改：dataset.setValue("其他", 0.2);后的那段改成：<br />
//通过工厂类生成JFreeChart对象<br />
JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图", dataset, true, false, false);<br />
PiePlot pieplot = (PiePlot) chart.getPlot();<br />
pieplot.setLabelFont(new Font("宋体", 0, 12));<br />
//没有数据的时候显示的内容<br />
pieplot.setNoDataMessage("无数据显示");<br />
pieplot.setCircular(false);<br />
setExplodePercent方法很重要，它将Label为某名称的某块挖出来突出显示，而后两句实现的效果是在&#8220;初中高级程序员&#8221;等名称后加上百分比，改成&#8220;初中高级程序员=55%&#8221;等。加上如上的代码后，同时还需要将相关的两个java包：org.jfree.chart.labels.StandardPieSectionLabelGenerator和java.text.NumberFormat引入到该jsp页面中。此时的运行结果如下：</p>
<p align="left"><img height="248" alt="用JFreeChart增强JSP报表的用户体验（图六）" src="http://www.sucai.com/tech/newsfile/12000-12999/12619/080410212563415.jpg" width="416" border="0" /></p>
<p align="left">&nbsp;通过JFreeChart还可以提供漂亮的水晶饼图效果，接着让我们新建一个sample3.jsp页面来体验一下超炫美图吧。修改sample3.jsp页面如下：<br />
&lt;%@ page contentType="text/html;charset=GBK"%&gt;<br />
&lt;%@ page import="org.jfree.chart.*,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.jfree.chart.servlet.ServletUtilities,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.jfree.util.Rotation,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.jfree.data.general.DefaultPieDataset,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.jfree.chart.plot.PiePlot3D"%&gt;<br />
&lt;%<br />
//设置数据集<br />
DefaultPieDataset dataset = new DefaultPieDataset();<br />
dataset.setValue("初中高级程序员", 0.55);<br />
dataset.setValue("项目经理", 0.1);<br />
dataset.setValue("系统分析师", 0.1);<br />
dataset.setValue("软件架构师", 0.1);<br />
dataset.setValue("其他", 0.2);<br />
&nbsp;<br />
//通过工厂类生成JFreeChart对象<br />
JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图", dataset, true, true, false);<br />
//获得3D的水晶饼图对象<br />
PiePlot3D pieplot3d = (PiePlot3D) chart.getPlot();<br />
//设置开始角度<br />
pieplot3d.setStartAngle(150D);<br />
//设置方向为&#8221;顺时针方向&#8220;<br />
pieplot3d.setDirection(Rotation.CLOCKWISE);<br />
//设置透明度，0.5F为半透明，1为不透明，0为全透明<br />
pieplot3d.setForegroundAlpha(0.5F);<br />
pieplot3d.setNoDataMessage("无数据显示");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);<br />
String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;<br />
%&gt;<br />
&lt;img src="&lt;%= graphURL %&gt;"width=500 height=300 border=0 usemap="#&lt;%= filename %&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 利用setForegroundAlpha()方法可以设置3D饼图的透明度，利用setStartAngle()可以设置其开始角度，利用setDirection()方法可以设置其方向。该例的运行效果如下图所示：<br />
&nbsp;<img height="302" alt="用JFreeChart增强JSP报表的用户体验（图七）" src="http://www.sucai.com/tech/newsfile/12000-12999/12619/080410212563416.jpg" width="500" border="0" /></p>
 <img src ="http://www.blogjava.net/jvict/aggbug/318222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-04-14 09:15 <a href="http://www.blogjava.net/jvict/articles/318222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】使用JFreeReport生成报表 </title><link>http://www.blogjava.net/jvict/articles/223181.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Wed, 20 Aug 2008 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223181.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223181.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223181.html</trackback:ping><description><![CDATA[原文地址：http://hi.baidu.com/whoqiaoyu/blog/item/07e6cb503eb3395e1038c299.html<br />
<p><strong></p>
<p><strong>文章摘要</strong></p>
<p><br />
</p>
<p class="normal">JFreeReport用于生成报表。JFreeReport的数据继承自Swing组件的TableModel接口，使用基于XML的报表格式定义文件对报表<a class="vLink1" title="体检为全家的健康保驾护航 @Vogate.com" style="font-size: 1em" href="http://action.vogate.com/click/click.php?ads_id=3614&amp;site_id=6235007045036843&amp;click=1&amp;url=http%3A//www.renai.cn/tj/&amp;v=0&amp;k=%u8FDB%u884C&amp;s=http%3A//www.3pcode.com/article/article_100/50487.htm&amp;rn=941186" target="_blank">进行</a>格式化。JFreeReport生成的报表可以分页预览、<a class="vLink1" title="徐州永生彩印 @Vogate.com" style="font-size: 1em" href="http://action.vogate.com/click/click.php?ads_id=1239&amp;site_id=6235007045036843&amp;click=1&amp;url=http%3A//www.xzyongsheng.cn&amp;v=0&amp;k=%u6253%u5370&amp;s=http%3A//www.3pcode.com/article/article_100/50487.htm&amp;rn=918218" target="_blank">打印</a>或者保存为多种格式的文件如pdf、Excel、html等。作者在本文中详细的介绍了如何定义报表格式定义文件、如何使用JFreeReport生成／预览报表和将报表转为其它各种格式。</p>
<p><br />
</p>
<p><strong>关键词</strong></p>
<p><br />
</p>
<p class="normal"><strong>JFreeReport&nbsp;&nbsp; 报表生成&nbsp;&nbsp; 预览</strong></p>
<p><br />
</p>
<p class="normal">报表生成一直是<a class="vLink1" title="同济网Tongji.Net&nbsp;就业与实习论坛 @Vogate.com" style="font-size: 1em" href="http://action.vogate.com/click/click.php?ads_id=3746&amp;site_id=6235007045036843&amp;click=1&amp;url=http%3A//blog.tongji.net/index.php/action-forumdisplay-fid-111.html&amp;v=0&amp;k=%u4F01%u4E1A&amp;s=http%3A//www.3pcode.com/article/article_100/50487.htm&amp;rn=561124" target="_blank">企业</a>信息化过程中重要的一环，也是目前比较难于<a class="vLink1" title="慢城主义 @Vogate.com" style="font-size: 1em" href="http://action.vogate.com/click/click.php?ads_id=695&amp;site_id=6235007045036843&amp;click=1&amp;url=http%3A//www.newlandsh.com&amp;v=0&amp;k=%u5B9E%u73B0&amp;s=http%3A//www.3pcode.com/article/article_100/50487.htm&amp;rn=281229" target="_blank">实现</a>的一环，今天作者给大家介绍一种新的报表生成组件――JFreeReport。JFreeReport是JFreeReport.Org基于LGPL授权协议提供的一组java包，用于生成各类报表，JFreeReport的数据继承自Swing组件的TableModel接口，使用基于XML的报表格式定义文件对报表进行格式化。JFreeReport生成的报表可以分页预览、打印，而且支持导出为多种格式的文件如pdf、Excel、CSV、html等。更重要的是，JFreeReport不仅支持基于C/S结构的系统，而且支持基于B/S结构的系统中的在线报表显示。更详细的关于JFreeReport的介绍请大家访问JFreeReport的<a class="vLink1" title="NO!YES!游戏王国 @Vogate.com" style="font-size: 1em" href="http://action.vogate.com/click/click.php?ads_id=3751&amp;site_id=6235007045036843&amp;click=1&amp;url=http%3A//noyes.cn&amp;v=0&amp;k=%u5B98%u65B9%u7F51%u7AD9&amp;s=http%3A//www.3pcode.com/article/article_100/50487.htm&amp;rn=225378" target="_blank">官方网站</a><a href="http://www.jfree.org/"><font color="#594fbf">JFree.org</font></a>。 <br />
</p>
<p><strong>1&nbsp;&nbsp; 环境准备</strong> <br />
</p>
<p><strong>1.1&nbsp;&nbsp; JFreeReport组件</strong> <br />
</p>
<p class="normal">请大家到<a href="http://prdownloads.sourceforge.net/jfreereport/jfreereport-0.8.4_7.zip?download"><font color="#594fbf">http://prdownloads.sourceforge.net/jfreereport/jfreereport-0.8.4_7.zip?download</font></a>下载JFreeReport组件，下载的是一个ZIP文件，然后将ZIP文件解压缩到c:\jfreereport（后面的章节中将使用％jfreereport_home％<a class="vLink1" title="百事 @Vogate.com" style="font-size: 1em" href="http://action.vogate.com/click/click.php?ads_id=3845&amp;site_id=6235007045036843&amp;click=1&amp;url=http%3A//www.pepsi.com.cn/&amp;v=0&amp;k=%u8868%u793A&amp;s=http%3A//www.3pcode.com/article/article_100/50487.htm&amp;rn=187487" target="_blank">表示</a>这个目录）目录下。 <br />
</p>
<p><strong>1.2&nbsp;&nbsp; JFreeReport扩展组件</strong> <br />
</p>
<p class="normal">请大家到<a href="http://www.jfree.org/jfreereport/jfreereport-ext-0.8.4_7.zip"><font color="#594fbf">http://www.jfree.org/jfreereport/jfreereport-ext-0.8.4_7.zip</font></a>下载JFreeReport扩展组件，他用于支持JFreeReport组件生成的报表的在线显示。请大载后解压缩到c:\jfreereport-ext目录下（后面的章节中将使用％jfreereport_ext_home％表示这个目录） <br />
</p>
<p><strong>1.3&nbsp;&nbsp; Ant工具</strong> <br />
</p>
<p class="normal">Apache公司提供的一个基于JAVA的自动化脚本引擎，请大家到<a href="http://ant.apache.org/"><font color="#594fbf">http://ant.apache.org/</font></a>下载ant的可执行文件，关于如何使用ant请大家查看ant的帮助文档或者<a href="http://ant.apache.org/"><font color="#594fbf">http://ant.apache.org/</font></a>网站上的在线帮助文档。示例中主要是用ant来负责编译java代码。 <br />
</p>
<p><strong>1.4&nbsp;&nbsp; 作者提供的代码</strong></p>
<p><br />
</p>
<p class="normal">为了运行本文中作者提到的例子和相关<a class="vLink1" style="font-size: 1em" href="http://action.vogate.com/click/click.php?ads_id=809&amp;site_id=6235007045036843&amp;click=1&amp;url=http%3A//www.51eduw.com&amp;v=0&amp;k=%u8D44%u6E90&amp;s=http%3A//www.3pcode.com/article/article_100/50487.htm&amp;rn=444929" target="_blank">资源</a>文件，请大家下载作者提供的<a href="http://gceclub.sun.com.cn/staticcontent/html/2004-04-08/vivianjDemo.zip"><font color="#594fbf">vivianjDemo.zip</font></a>文件和中文转换工具<a href="http://gceclub.sun.com.cn/staticcontent/html/2004-04-08/gb2unicode.jar"><font color="#594fbf">gb2unicode.jar</font></a>。然后解压缩到％jfreereport_home％\vivianjDemo（后面的章节中将使用％demo _home％表示这个目录）目录下。 <br />
</p>
<p><strong>2&nbsp;&nbsp; JFreeReport生成报表的基本步骤</strong></p>
<p><br />
</p>
<p class="normal">我们首先演示一个简单的例子，说明使用JFreeReport生成报表的一些必要的步骤。 <br />
</p>
<p><strong>2.1&nbsp;&nbsp; 实例说明</strong></p>
<p><br />
</p>
<p class="normal">在这个例子中，我们将循环生成100条数据放入TableModel中，然后使用JFreeReport组件提供的预览功能在屏幕上显示生成的报表。 <br />
</p>
<p class="normal"><strong>［注］</strong> 为了简化，这里仅仅是逐条显示数据，不作任何修饰和统计工作，所以也不使用报表格式定义文件。 <br />
</p>
<p><strong>2.2&nbsp;&nbsp; 代码编制</strong></p>
<p><br />
</p>
<p class="normal">整个演示实例（HelloWorld.java）的代码和相关注释如下，如果你执行了1.3中规定的步骤，你可以在％demo _home％/src/org/vivianj/jfreereport/看到这个文件。</p>
<pre>/**<br />
* HelloWorld.java<br />
*/<br />
<br />
package org.vivianj.jfreereport;<br />
<br />
import java.awt.Color;<br />
import java.awt.event.WindowAdapter;<br />
import java.awt.event.WindowEvent;<br />
import java.awt.geom.Point2D;<br />
import javax.swing.table.DefaultTableModel;<br />
import javax.swing.table.TableModel;<br />
<br />
import org.jfree.report.Boot;<br />
import org.jfree.report.ElementAlignment;<br />
import org.jfree.report.JFreeReport;<br />
import org.jfree.report.ReportProcessingException;<br />
import org.jfree.report.elementfactory.TextFieldElementFactory;<br />
import org.jfree.report.modules.gui.base.PreviewDialog;<br />
import org.jfree.ui.FloatDimension;<br />
<br />
/**<br />
* 使用JFreeReport生成报表的简单例子，用于演示使用JFreeReport生成报表的一些基本步骤<br />
* <br />
* 本例子中，为了简化操作，报表定义是使用java直接编码<br />
*<br />
* @ 作者 ： bookman<br />
*/<br />
public class HelloWorld<br />
{<br />
&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; * 处理窗口关闭事件<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; protected static class CloseHandler extends WindowAdapter<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; public void windowClosing(final WindowEvent event)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; * 创建和显示简单的报表<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; public HelloWorld()<br />
&nbsp;&nbsp; {<br />
// 获得创建报表需要用到的数据<br />
&nbsp;&nbsp;&nbsp;&nbsp; final TableModel data = createData();<br />
//获得报表要用到的报表定义内容<br />
&nbsp;&nbsp;&nbsp;&nbsp; final JFreeReport report = createReportDefinition();<br />
//将报表定义和数据结合<br />
&nbsp;&nbsp;&nbsp;&nbsp; report.setData(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; //将生成的报表放到预览窗口中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final PreviewDialog preview = new PreviewDialog(report);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; preview.addWindowListener(new CloseHandler());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; preview.pack();<br />
&nbsp;&nbsp;&nbsp; //显示报表预览窗口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; preview.setVisible(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; catch (ReportProcessingException e)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; * 创建生成报表需要用到的数据<br />
&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; * @返回一个TableModel实例<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; private TableModel createData()<br />
&nbsp;&nbsp; {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; final Object[] columnNames = new String[]{"Column1", "Column2"};<br />
&nbsp;&nbsp;&nbsp;&nbsp; final DefaultTableModel result = new DefaultTableModel(columnNames, 100);<br />
int rownum = 0;<br />
int colnum = 0;<br />
for (;rownum &lt; 100 ; rownum++)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.setValueAt("say Hello " + rownum + "次", rownum, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.setValueAt("say World " + rownum + "次" , rownum, 1);<br />
}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />
<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; * 创建一个报表定义<br />
&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; * @返回一个报表定义实例<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; private JFreeReport createReportDefinition()<br />
&nbsp;&nbsp; {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; final JFreeReport report = new JFreeReport();<br />
&nbsp;&nbsp;&nbsp;&nbsp; report.setName("A Very Simple Report");<br />
/**<br />
&nbsp;&nbsp;&nbsp; * 定义要显示报表第一列的样式<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp; TextFieldElementFactory factory = new TextFieldElementFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setName("T1");<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setAbsolutePosition(new Point2D.Float(0, 0));<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setMinimumSize(new FloatDimension(150, 20));<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setColor(Color.black);<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setHorizontalAlignment(ElementAlignment.LEFT);<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setVerticalAlignment(ElementAlignment.MIDDLE);<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setNullString("-");<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setFieldname("Column1");<br />
&nbsp;&nbsp;&nbsp;&nbsp; report.getItemBand().addElement(factory.createElement());<br />
/**<br />
&nbsp;&nbsp;&nbsp; * 定义要显示报表第二列的样式<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory = new TextFieldElementFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setName("T2");<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setAbsolutePosition(new Point2D.Float(200, 0));<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setMinimumSize(new FloatDimension(150, 20));<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setColor(Color.black);<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setHorizontalAlignment(ElementAlignment.LEFT);<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setVerticalAlignment(ElementAlignment.MIDDLE);<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setNullString("-");<br />
&nbsp;&nbsp;&nbsp;&nbsp; factory.setFieldname("Column2");<br />
&nbsp;&nbsp;&nbsp;&nbsp; report.getItemBand().addElement(factory.createElement());<br />
/**<br />
&nbsp;&nbsp;&nbsp; * 返回一个报表定义的实例<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp; return report;<br />
<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; public static void main(final String[] args)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 初始化JFreeReport<br />
&nbsp;&nbsp;&nbsp;&nbsp; Boot.start();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; //调用演示实例<br />
&nbsp;&nbsp;&nbsp;&nbsp; new HelloWorld();<br />
&nbsp;&nbsp; }<br />
<br />
}<br />
</pre>
<p><br />
</p>
<p><strong>2.3&nbsp;&nbsp; 运行例子</strong></p>
<p><br />
</p>
<p class="normal">如果你执行了1.3中规定的步骤，你可以进入命令行界面，然后进入％demo_home％目录下，修改setenv.cmd中的相关设置，执行serenv.cmd设置环境变量。执行java org.vivianj.jfreereport.HelloWorld查看运行结果。下面这个图片是作者执行后结果的屏幕截图：</p>
<p><br />
</p>
<p align="center"><img height="385" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-08/img2.jpg" width="546" border="0" /></p>
<p><br />
</p>
<p class="normal">大家可以看到，JFreeReport已经自动帮我们实现了分页。上面这个图片显示的是第一页的数据，你可以通过工具栏中的<img height="24" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-08/img1.jpg" width="91" border="0" />查看其它页面中的内容。</p>
<p><br />
</p>
<p><strong>2.4&nbsp;&nbsp; 基本步骤解释</strong></p>
<p><br />
</p>
<p class="normal">使用JFreeReport生成报表通常需要以下三个基本步骤：</p>
<p><br />
</p>
<ol><br />
    <li>生成可通过TableModel接口访问的数据，如本例中的createData方法完成的功能 <br />
    <li>生成一个JFreeReport实例，他定义了我们如何格式化显示数据，如本例中的createReportDefinition方法完成的功能 <br />
    <li>将数据和JFreeReport实例连接起来，并且将该JFreeReport实例传给PreviewDialog的一个实例显示给用户 </li>
</ol>
<p><br />
</p>
<p><strong>3&nbsp;&nbsp; 使用JFreeReport生成复杂报表</strong> <br />
</p>
<p><strong>3.1&nbsp;&nbsp; 报表定义文件</strong> <br />
</p>
<p class="normal">报表定义文件是JFreeReport生成复杂报表的重要文件，他就是一个XML文档，主要描述如何使用指定的格式生成复杂的报表，同时使用报表定义文件也可以在报表格式需要修改时只需要更新该报表定义文件，而不需要修改应用代码。 <br />
</p>
<p><strong>3.1.1&nbsp;&nbsp; 报表定义文件分类</strong> <br />
</p>
<p class="normal">JFreeReport中使用了两种基于XML的报表定义文件来保存报表定义信息：简单格式和扩展格式．很明显,简单格式不能够完全的描述JFreeReport支持的全部报表定义信息,但是他更易于上手使用。而扩展格式则能够对JFreeReport的报表定义提供完整的支持，但是扩展格式太详细了，不太容易使用。 <br />
</p>
<p class="normal">关于这两种报表定义格式文件所支持的标签内容以及如何编写这两种格式的报表定义文件请大家参考％jfreereport_home％下的jfreereport-0.8.3-A4.pdf中的相关部分，该文件附录中还包括了这两种格式的报表定义文件的DTD文档供大家参考．当然大家也JFreeReport的例子中提供了多种形式的报表定义文件，基本上涵盖了常用的报表格式定义，大家可以参考这些例子编写自己的报表定义文件，。 <br />
</p>
<p><strong>3.2&nbsp;&nbsp; 代码编制</strong> <br />
</p>
<p class="normal">这个例子和2.2中的代码基本一致，只是报表定义内容不再由java编码实现，而是由报表定义文件提供，所以调用方面稍微有点不同，详细的代码如下，请大家注意其中加粗显示的部分：</p>
<pre>/**<br />
* JFreeReport.java<br />
*/<br />
<br />
package org.vivianj.jfreereport;<br />
<br />
import java.io.File;<br />
import java.text.MessageFormat;<br />
import javax.swing.table.TableModel;<br />
import javax.swing.JFrame;<br />
<br />
import org.jfree.ui.RefineryUtilities;<br />
import org.jfree.report.Boot;<br />
import org.jfree.report.modules.gui.base.PreviewFrame;<br />
import org.jfree.report.modules.parser.base.ReportGenerator;<br />
import org.jfree.report.JFreeReport;<br />
<br />
import org.vivianj.jfreereport.tablemodel.SampleData;<br />
<br />
/**<br />
* 使用JFreeReport生成复杂报表的例子，<br />
* 用于演示使用JFreeReport生成复杂报表的一些基本步骤<br />
* <br />
* 本例子中，报表定义使用了报表定义文件，该文件是保存在c:＼下的report3.xml文件<br />
* 本例中使用的报表定义使用了简单报表定义格式<br />
*<br />
* @ 作者 ： bookman<br />
*/<br />
public class JFreeTest <br />
{<br />
<br />
public JFreeTest(final String urlname, final TableModel data)<br />
&nbsp;&nbsp; {<br />
//创建对报表定义文件的引用<br />
&nbsp;&nbsp;&nbsp;&nbsp; final File in = new File(urlname);;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (in == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" in is null");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("Processing Report: " + in);<br />
&nbsp;&nbsp;&nbsp;&nbsp; final ReportGenerator gen = ReportGenerator.getInstance();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //从报表定义文件中获得要用到的报表定义内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final JFreeReport report1 = gen.parseReport(in);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (report1 == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" report1 is null");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将报表定义和数据结合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; report1.setData(data);<br />
&nbsp;&nbsp;&nbsp; //将生成的报表放到预览窗口中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final PreviewFrame frame1 = new PreviewFrame(report1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame1.pack();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RefineryUtilities.positionFrameRandomly(frame1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame1.setVisible(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame1.requestFocus();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("report.definitionfailure-----------------------\r\n" + e);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp; public static void main(String[] args) <br />
{<br />
&nbsp;&nbsp; Boot.start();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp; final TableModel data3 = new SampleData();<br />
&nbsp;&nbsp; JFreeTest jft = new JFreeTest("c:\\report3.xml",data3);<br />
}<br />
}<br />
</pre>
<p><br />
</p>
<p><strong>4&nbsp;&nbsp; 中文乱码问题</strong> <br />
</p>
<p class="normal">大家在参看报表定义文件的时候会发现，里面的报表头定义中有一些显示内容，如果你直接将他修改成中文，显示在报表上就会乱码，这是因为这些报表定义文件都是XML文档，他的encoding默认设置是ISO-8859-1，所以出现了中文乱码的问题，解决办法有两个：</p>
<p><br />
</p>
<p class="normal">1.最简单的方法就是将encoding的设置修改为GB2312</p>
<p><br />
</p>
<p class="normal">2.还有一个方法就是不修改encoding的设置，而是将这些中文内容使用他们的unicode码来代替。</p>
<p><br />
</p>
<p class="normal"><strong>［注］</strong> 作者提供了一个GUI的界面提供这种转化功能，你只需要输入中文就可以获得对应的unicode码，请大家下载作者提供的<a href="http://gceclub.sun.com.cn/staticcontent/html/2004-04-08/gb2unicode.jar"><font color="#594fbf">gb2unicode.jar</font></a>，设置好java运行环境，然后执行java -jar gb2unicode.jar就可以了。</p>
<p><br />
</p>
<p><strong>5&nbsp;&nbsp; 总结</strong> <br />
</p>
<p class="normal">报表问题是企业信息化中比较关注的一个焦点，也比较难于实现客户化，作者在本文中给大家介绍了一个新的报表生成包-JfreeReport,他可以根据XML文档中定义的报表格式，生成符合客户要求的报表。文章中给出了2个简单的例子，演示了如何使用JFreeReport生成报表的详细步骤，希望能够帮助大家熟悉JFreeReport的工作方式。同时文章中给出了使用JFreeReport过程中可能遇到的中文问题的解决办法。 <br />
</p>
<p class="normal">其实JFreeReport还支持在JSP、Servlet中显示报表，只是还需要用到他的扩展组件，作者这里没有给出例子，大家可以参考下载的JFreeReport的扩展组件中的例子。 <br />
</p>
<p><strong>参考资料</strong>： <br />
</p>
<p class="normal">JFreeReport 在线帮助文档 <a href="http://www.jfree.org/jfreereport/index.html"><font color="#594fbf">http://www.jfree.org/jfreereport/index.html</font></a> <br />
</p>
<p class="normal">JFreeReport 的JavaDoc <a href="http://www.jfree.org/jfreereport/javadoc/index.html"><font color="#594fbf">http://www.jfree.org/jfreereport/javadoc/index.html</font></a> </p>
</strong>
 <img src ="http://www.blogjava.net/jvict/aggbug/223181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-20 10:54 <a href="http://www.blogjava.net/jvict/articles/223181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>