ChartDirector与JFreeChart两款主要web图表工具调研报告

一、引言:
    实习单位安排让调研报表工具选择一款,让学习和比较ChartDirector与Jasperreports,掌握技术路径,即掌握安装配置方式,接口,调用方法,例子等。
    于是,下载了ChartDirector,挺简单的,照着提供的jsp的例子,改一下数据、横坐标内容就马上能运行了,提供的函数命名也很规范,一看大概就知道用途,挺好理解的,生成的图表也很漂亮。
    于是,下载Jasperreports,这个东东要跑起来还真有点麻烦,首先得了解一下ANT,ant不难,但是为了运行一下示例还是被它拉路了一小会,然后是jdk版本兼容问题,然后是数据源的连接问题,折腾了一个星期,总会把它的示例都跑起来了,同时也写了三份学习笔记。接着了解了一下它的可视化设计工具ireports。总的感觉这个东西不如ChartDirector方便好用。
    接着,跟莫sir讨论一下,发现自己犯了一个很严重的概念性错误。那就是,图表和报表是不同的!图表是指图片,即柱状图,折线图,饼图等,选择图表工具主要关注的是图表是否漂亮;而报表是指表格形式的表,如财务报表等,选择报表工具主要关注的是能否解决中国报表表头复杂,交叉报表等问题。ChartDirector是图形报表工具;而Jasperreports是报表工具,生成图表底层用的是JreeChart。所以,应该比较的是ChartDirector与JreeChart,而不是ChartDirector与Jasperreports的比较。
    下面主要介绍和比较ChartDirector与JreeChart这两款web图形报表工具。

二、    ChartDirector与JreeChart的介绍与比较
2.1    官方网址
ChartDirector:  http://www.advsofteng.com/
JreeChart:  http://www.jfree.org/jfreechart/index.html
2.2    基本介绍
两款都是流行的web图表工具;
ChartDirector:  
ChartDirector is a fast and powerful charting component for creating professional and clickable charts. It's innovative ChartDirector Mark Up Language, flexible object oriented API, layering architecture and advanced coloring system provide unprecedent chart design, formatting and customization capabilities to developers. Supports numerous chart types - Pie, donut, bar, line, spline, step line, trend line, curve-fitting, inter-line coloring, area, scatter, bubble, floating box, box-whisker, waterfall, finance (numerous indicators support), gantt, vector, radar, polar, rose, angular and linear meters and guages. ChartDirector is 100% pure Java code and is suitable for both client and server side usage. Specially designed graphics subsystem allows ChartDirector to run on headless servers without requiring headless support. Includes SWING controls to support client side applications. Easy to use and with comprehensive documentation. Come with numerous examples.

JreeChart: 
JFreeChart是一个开源的 JAVA 项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 ) 、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图表上可以满足目前商业系统的要求。 JFreeChart 是一种基于 JAVA 语言的图表开发技术。 JFreeChart 可用于 Servlet 、 JSP 、 Applet 、 Java Appication 环境中,通过 JDBC 可动态显示任何数据库数据,结合 Itext 可以输出至 PDF 文件。

2.3    收费情况
ChartDirector:  商业;价格根据使用权限不同在59美元到749美元之间;也可以免费使用,只是在画出来的图形下面都有一条它的广告条。网上有破解方法,破解后图形下面不再出现它的广告条。

JreeChart:      开源;但是文档要花钱买,40美元;

2.4    支持语言
ChartDirector:  支持很多种语言,例如.NET, Java, ASP, COM,VB, PHP, Perl, Python,Ruby, ColdFusion, C++等;
JreeChart:      Java;

2.5    图表比较
ChartDirector:  图表特别精细,漂亮;
样例库:http://www.advsofteng.com/gallery.html
 

JreeChart:      画出来的图形不够精细,看起来有些模糊;图表的文字边缘、颜色和颜色的分界也比较模糊。
样例库:http://www.jfree.org/jfreechart/samples.html
 

2.6    对中文问题支持的比较
ChartDirector:  中文的问题,比较容易解决。
JreeChart:      虽然有字体的解决办法,但仍然存在问题。他使用的默认字体显示出来的中文会很模糊,你可能需要修改源代码。

2.7    开发使用易用性比较
从自己分别使用它们用jsp显示柱状图的例子来看,两者的开发的易用性差不多,都是设置一下数据、横坐标等就可以了。

三、    分别用ChartDirector和JFreeChart画柱状图的JSP程序示例
3.1 用ChartDirector在JSP中画统计图
      下面是一个柱状图的例子:
 
      范例程序:
 <%@page import="ChartDirector.*" %>
 <%
 //The data for the bar chart
  double[] data = {85, 156, 179.5, 211, 123};
 
 //The labels for the bar chart
  String[] labels = {"Mon", "Tue", "Wed", "Thu", "Fri"};
 
 //Create a XYChart object of size 300 x 280 pixels
 XYChart c = new XYChart(300, 280);
 
 //Set the plotarea at (45, 30) and of size 200 x 200 pixels
 c.setPlotArea(45, 30, 200, 200);
 
 //Add a title to the chart
 c.addTitle("Weekly Server Load");
 
 //Add a title to the y axis
 c.yAxis().setTitle("MBytes");
 
 //Add a title to the x axis
 c.xAxis().setTitle("Work Week 25");
 
 //Add a bar chart layer with green (0x00ff00) bars using the given data
 c.addBarLayer(data, 0xff00).set3D();
 
 //Set the labels on the x axis.
 c.xAxis().setLabels(labels);
 
 //output the chart
 String chart1URL = c.makeSession(request, "chart1");
 
 //include tool tip for the chart
 String imageMap1 = c.getHTMLImageMap("", "", "title='{xLabel}: {value} MBytes'")
     ;
 %>
 <html>
 <body topmargin="5" leftmargin="5" rightmargin="0">
 <div style="font-size:18pt; font-family:verdana; font-weight:bold">
     3D Bar Chart
 </div>
 <hr color="#000080">
 <a href="viewsource.jsp?file=<%=request.getServletPath()%>">
     <font size="2" face="Verdana">View Chart Source Code</font>
 </a>
 </div>
 <br>
 <img src='<%=response.encodeURL("getchart.jsp?"+chart1URL)%>'
     usemap="#map1" border="0">
 <map name="map1"><%=imageMap1%></map>
 </body>
 </html>
 

3.2 用JFreeChart画柱状图的范例

这个范例说明如何用JFreeChart画简单的柱状图,下面是一个JSP的简单范例:
 <%@ page contentType="text/html; charset=GB2312" %>
 <%@ page import="java.awt.*, java.text.*, java.util.*" %>
 <%@ page import="org.jfree.chart.*" %>
 <%@ page import="org.jfree.chart.axis.*" %>
 <%@ page import="org.jfree.chart.labels.StandardCategoryItemLabelGenerator" %>
 <%@ page import="org.jfree.chart.plot.*" %>
 <%@ page import="org.jfree.chart.renderer.*" %>
 <%@ page import="org.jfree.chart.servlet.ServletUtilities" %>
 <%@ page import="org.jfree.data.DefaultCategoryDataset" %>
 <%@ page import="org.jfree.ui.TextAnchor" %>
 
 <%
   //The data for the bar chart
    double[] data = {85, 156, 179.5, 211, 123};
   //The labels for the bar chart
    String[] labels = {"Mon", "Tue", "Wed", "Thu", "Fri"};
   
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    for (int i = 0; i < data.length; i++) {
     dataset.addValue(data[i], null, labels[i]);
   }
   
   JFreeChart chart = ChartFactory.createBarChart3D("Weekly Server Load", "Work Week 25", "MBytes", dataset, PlotOrientation.VERTICAL, false, false, false);
   chart.setBackgroundPaint(new Color(0xE1E1E1));
   
   CategoryPlot plot = chart.getCategoryPlot();
   
   // 设置Y轴显示整数
   NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
   rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
   
   CategoryAxis domainAxis = plot.getDomainAxis();
   //设置距离图片左端距离
   domainAxis.setLowerMargin(0.05);
   
   BarRenderer3D renderer = new BarRenderer3D();
   //设置柱的颜色
   renderer.setSeriesPaint(0, new Color(0xff00));
   plot.setRenderer(renderer);
   
   String filename = ServletUtilities.saveChartAsPNG(chart, 300, 280, null, session);
   String graphURL = request.getContextPath() + "/displayChart?filename=" + filename;
 %>
 <html>
 <body topmargin="5" leftmargin="5" rightmargin="0">
 <div style="font-size:18pt; font-family:verdana; font-weight:bold">
     3D Bar Chart
 </div>
 <br>
 <img src="<%= graphURL %>" border=0>
 </body>
 </html>
 
画出来的图:
 
和ChartDirector画出来的图做一个比较:
 
四、    web图表工具选择
了解了关键的两款web图表工具ChartDirector与JreeChart之后,我们应该选择哪一个报表工具呢?下面是本人提供的参考方案:
ChartDirector:图片精细漂亮,如果舍得花钱购买,建议使用这款;
JreeChart:图片不够清晰有些模糊,如果只考虑免费工具,建议使用这款;

五、    参考资料
1.    http://www.advsofteng.com/
2.    http://www.jfree.org/jfreechart/index.html
3.    ChartDirector (Java Edition)
http://nuclearscripts.com/java/jsp-and-servlets/graphs-and-charts/chartdirector-java-edition.html
4.    JFreeChat的介绍http://www.blogjava.net/chunkyo/archive/2007/01/13/jfreechat.html
5.    用JFreeChart画柱状图的范例
    用ChartDirector在JSP中画统计图
http://www.blogjava.net/georgehill/default.html?page=3
6.    一个很棒的WEB图表项目??ChartDirector
http://www.dlog.cn/html/diary/showlog.vm?sid=2&cat_id=-1&log_id=413
7.    ChartDirector与JFreeChart
http://blog.csdn.net/keelsike/archive/2006/05/30/762869.aspx

你可能感兴趣的:(c,Web,jsp,jfreechart,asp.net)