使用JfreeChart创建基于WEB的图形报表newWord格式文档下载.docx
《使用JfreeChart创建基于WEB的图形报表newWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《使用JfreeChart创建基于WEB的图形报表newWord格式文档下载.docx(95页珍藏版)》请在冰豆网上搜索。
●barcharts(regularandstacked,withanoptional3Deffect);
●lineandareacharts;
●scatterplotsandbubblecharts;
●timeseries,high/low/open/closechartsandcandlestickcharts;
●combinationcharts;
●Paretocharts;
●Ganttcharts;
●windplots,meterchartsandsymbolcharts;
●wafermapcharts;
JfreeChart提供的其他特性:
●completesourcecodeisincluded,underthetermsoftheGNULesserGeneralPublicLicence;
●accesstodatafromanysourceviadatasetinterfaces;
●supportformultiplesecondaryaxesanddatasets;
●tooltips,zooming,printing;
●directexporttoPNGandJPEG;
●exporttoPDFviaiTextandSVGviaBatik(bothdescribedintheJFreeChartDeveloperGuide).
●支持servlets,JSP(感谢Cewolf),applets或者JavaApplication;
●完善的Javadoc文档;
第二章体验JFreeChart
本章采用JfreeChart的演示程序说明JfreeChart的基本功能。
2.1环境
可以采用Javac+UltraEdit方式演示,本文讲述依赖JbuilderXIDE开发。
首先,解压缩jfreechart-0.9.16.zip包。
(
获得jfreechart包,最新包为0.9.21版本。
)
1,将src/org/jfree/chart/目录下的demo目录保留,删除其他目录。
2,将jfreechart-0.9.16.jar包放到lib目录下。
3,建立Jbuilder工程;
工程应用四个gnujaxp.jar;
jcommon-0.9.1.jar;
jfreechart-0.9.16.jar;
servlet.jar
4,编译工程。
5,以Application方式运行各个Demo。
6,工程增加一个WEBModule,命名为cewolf,支持Servlet。
2.2运行
由于我们主要是WEB应用,所以演示以Servlet运行。
1,在src/org/jfree/chart/demo目录下增加下面的文件
packageorg.jfree.chart.demo;
importjava.io.IOException;
importjavax.servlet.*;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.ServletException;
importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importorg.jfree.data.*;
importorg.jfree.chart.*;
/**
*演示通过servlet直接输出图表
*@authorWinterLau
*/
publicclassBarChart3DDemo2SextendsHttpServlet{
//ProcesstheHTTPPostrequest
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,IOException{
doGet(request,response);
}
//ProcesstheHTTPGetrequest
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throws
response.setContentType("
image/jpeg"
);
DefaultPieDatasetdata=getDataSet();
JFreeChartchart=ChartFactory.createPie3DChart("
水果产量图"
data,
true,
false,
false
);
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),
100,chart,400,300,null);
}
/**
*获取一个演示用的简单数据集对象
*@return
privatestaticDefaultPieDatasetgetDataSet(){
DefaultPieDatasetdataset=newDefaultPieDataset();
dataset.setValue("
苹果"
100);
梨子"
200);
葡萄"
300);
香蕉"
400);
荔枝"
500);
returndataset;
}
2,编译程序
3,配置web.xml文件
<
?
xmlversion="
1.0"
encoding="
UTF-8"
>
!
DOCTYPEweb-appPUBLIC"
-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"
"
web-app>
<
servlet>
servlet-name>
BarChart3DDemo2S<
/servlet-name>
servlet-class>
org.jfree.chart.demo.BarChart3DDemo2S<
/servlet-class>
/servlet>
/web-app>
4,启动Tomcat,运行
http:
//localhost:
8080/cewolf/BarChart3DDemo2S
5,在IE浏览器上可以看到如下图片,则恭喜你成功了!
6,有兴趣可以实现下面几个图片
曲线图
柱状图
2.3问题
遇到问题了么,学会利用Jbuilder自己建立一个WEB工程吧!
2.4JFreeChart实现图形和应用交互
很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。
例如前面生成的简单柱状图,用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。
为此就要求该图形具有交互操作的功能。
在HTML中为了让一个图像具有可交互的功能就必须给该图像定义一个Map对象。
下表节选一段具有该功能的HTML代码
MAPNAME="
chartMap"
AREASHAPE="
RECT"
COORDS="
81,15,126,254"
href="
series=0&
category=100"
title="
100=7,048"
onclick="
javascript:
clickChart('
100'
returnfalse;
"
143,27,188,255"
category=200"
200=6,721"
clickChart('
200'
205,54,250,255"
category=300"
300=5,929"
300'
267,85,312,255"
category=400"
400=5,005"
400'
329,17,374,255"
category=Diet"
Diet=7,017"
Diet'
/MAP>
由此就产生了一个问题:
如果根据一个图像来生成对应的MAP对象。
我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是ChartFactory.createBarChart3D方法中的最后两个参数,这两个参数的类型都是布尔值。
这两个参数意思分别是:
是否创建工具提示(tooltip)以及是否生成URL。
这两个参数分别对应着MAP中一个AREA的title属性以及href属性。
可是我想知道的是怎么来产生这个MAP啊!
哈哈,不要着急,JFreeChart已经帮我们做好生成MAP对象的功能。
为了生成MAP对象就要引入另外一个对象:
ChartRenderingInfo。
因为JFreeChart没有直接的方法利用一个图表对象直接生成MAP数据,它需要一个中间对象来过渡,这个对象就是ChartRenderingInfo。
下图是生成MAP数据的流程图:
如上图所示,ChartUtilities类是整个流程的核心,它周围的对象都是一些例如数据对象或者是文件等。
这个流程简单描述如下:
首先创建一个ChartRenderingInfo对象并在调用ChartUtilities的writeChartAsJPEG时作为最后一个参数传递进去。
调用该方法结束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象,有了这个对象我们还是没有办法获取具体的MAP数据,我们还必须借助于ChartUtilities的writeImageMap方法来将ChartRenderingInfo对象读取出来。
下面一段程序是JavaApplication方式运行,生成一个html文件,运行该html文件可以展示交互效果。
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.OutputStream;
importjava.io.PrintWriter;
importorg.jfree.chart.ChartFactory;
importorg.jfree.chart.ChartRenderingInfo;
importorg.jfree.chart.ChartUtilities;
importorg.jfree.chart.JFreeChart;
importorg.jfree.chart.axis.CategoryAxis;
importorg.jfree.chart.axis.NumberAxis;
importorg.jfree.chart.axis.ValueAxis;
importorg.jfree.chart.entity.StandardEntityCollection;
importorg.jfree.chart.labels.StandardCategoryItemLabelGenerator;
importorg.jfree.chart.plot.CategoryPlot;
importorg.jfree.chart.plot.PlotOrientation;
importorg.jfree.chart.renderer.BarRenderer;
importorg.jfree.chart.urls.StandardCategoryURLGenerator;
importorg.jfree.data.CategoryDataset;
importorg.jfree.data.DatasetUtilities;
*AdemoshowinghowtocreateanHTMLimagemapwithJFreeChart.
*
*@authorDavidGilbert
publicclassImageMapDemo1{
*Defaultconstructor.
publicImageMapDemo1(){
*Startingpointforthedemo.
*@paramargsignored.
publicstaticvoidmain(String[]args){
//createachart
double[][]data=newdouble[][]{
{56.0,-12.0,34.0,76.0,56.0,100.0,67.0,45.0},
{37.0,45.0,67.0,25.0,34.0,34.0,100.0,53.0},
{43.0,54.0,34.0,34.0,87.0,64.0,73.0,12.0}
};
CategoryDatasetdataset=DatasetUtilities.createCategoryDataset("
Series"
"
Type"
data);
JFreeChartchart=null;
booleandrilldown=true;
if(drilldown){
CategoryAxiscategoryAxis=newCategoryAxis("
Category"
ValueAxisvalueAxis=newNumberAxis("
Value"
BarRendererrenderer=newBarRenderer();
renderer.setItemLabelGenerator(newStandardCategoryItemLabelGenerator());
renderer.setItemURLGenerator(newStandardCategoryURLGenerator("
bar_chart_detail.jsp"
));
CategoryPlotplot=newCategoryPlot(dataset,categoryAxis,valueAxis,renderer);
plot.setOrientation(PlotOrientation.VERTICAL);
chart=newJFreeChart("
BarChart"
JFreeChart.DEFAULT_TITLE_FONT,plot,true);
else{
chart=ChartFactory.createBarChart(
VerticalBarChart"
//charttitle
//domainaxislabel
//rangeaxislabel
dataset,//data
PlotOrientation.VERTICAL,
true,//includelegend
chart.setBackgroundPaint(java.awt.Color.white);
//****************************************************************************
//*JFREECHARTDEVELOPERGUIDE*
//*TheJFreeChartDeveloperGuide,writtenbyDavidGilbert,isavailable*
//*topurchasefromObjectRefineryLimited:
//**
//*http:
//www.object-*
//*SalesareusedtoprovidefundingfortheJFreeChartproject-please*
//*supportussothatwecancontinuedevelopingfreesoftware.**
//saveittoanimage
try{
ChartRenderingInfoinfo=newChartRenderingInfo(newStandardEntityCollection());
Filefile1=newFile("
barchart100.png"
ChartUtilities.saveChartAsPNG(file1,chart,600,400,info);
//writeanHTMLpageincorporatingtheimagewithanimagemap
Filefile2=newFile("
barchart100.html"
OutputStreamout=newBufferedOutputStream(newFileOutputStream(file2));
PrintWriterwriter=newPrintWriter(out);
writer.println("
HTML>
HEAD>
TITLE>
JFreeChartImageMapDemo<
/TITLE>
/HEAD>
BODY>
ChartUtilities.writeImageMap(writer,"
chart"
info);
IMGSRC=\"
barchart100.png\"
+"
WIDTH=\"
600\"
HEIGHT=\"
400\"
BORDER=\"
0\"
USEMAP=\"
#chart\"
/BODY>
/HTML>
writer.close();
catch(IOExceptione){
System.out.println(e.toString());
第三章体验CeWolf标签库
简单的说,Cewolf以MVC框架的方式提供一个基于JFree