轉自:http://xiayingjie.iteye.com/blog/870758
java做web報表主要分爲三類,一種在服務器生成圖片,代表的組件有jfreechart,這種圖片不美觀,而且缺乏互動性。二種用javascript生成圖片,同樣也不是很漂亮。第三種是flash報表,這種報表美感和互動性都有了。
flash報表中,比較出名的有以下三個,open flash chart(OFC),amcharts, funsionchart,OFC開源,但是感覺沒其他兩個漂亮。amcahrts感覺太複雜,功能太強一般都用不到。funsionchart,分爲免費版和商業版,一般免費版就夠我們用了,易學易用是fusionchart的最大優勢。
報表按功能分可以分爲單系列圖,多系列圖,組合圖,其他(財經圖,漏斗圖,甘特圖),我們這裏也主要講單系列圖,多系列圖,組合圖類型的圖。
本來想寫詳細一點的,但是覺得寫起來麻煩,直接上代碼好了,下面是個人寫的funtionchart通用類。
package com.xyj.com.tool.chart;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.dom4j.Document;
import org.dom4j.Element;
import com.xyj.com.tool.xml.Dom4jUtil;
/**
* @className:FusionChartUtil.java
* @classDescription:fusionChart操作類
* @author:xiayingjie
* @createTime:2010-11-26
*/
public class FusionChartUtil {
//一般提供如下圖:3D/2D柱形圖,曲線圖,3D/2D餅圖,區域圖,堆棧圖,聯合圖,蠟燭圖,漏斗圖,甘特圖,
//按程序來分:單系列圖,多系列圖,堆棧圖,組合圖,財經圖,漏斗圖,甘特圖
//此程序做 單系列圖,多系列圖,組合圖,其他圖形暫時不考慮。
/**
* 通用屬性
*attibutesMap:caption(標題);subCaption(子標題); xAxisName(X軸標籤);yAxisName(y軸標籤)
*yaxisminvalue(Y軸最小數字);yaxismaxvalue(Y軸最大);xaxisminvalue(X軸最小數字)xaxismaxvalue(X軸最大)
*numberPrefix(加上前綴比如爲“¥”) numberSuffix(後綴比如加上百分號"%25")
*decimalSeparator(小數分隔符默認爲'.') thousandSeparator(前位分隔符默認爲',')
*formatNumberScale(格式化小數,如果爲0則去掉默認的逗號如 12,345)decimalPrecision(指定小數位位數,如果不寫則默認是2位);
*
*/
public static Element getRootElement(Map<String,String>attributesMap){
//創建Docment對象
Document doc=Dom4jUtil.createDocument();
Element graph=doc.addElement("graph");
for(String name:attributesMap.keySet()){
graph.addAttribute(name, attributesMap.get(name));
}
return graph;
}
/**
* 獲取結果
*/
/**----------------------------單系列圖形--------------------------------*/
/**
FCF_Column3D.swf
FCF_Column2D.swf
FCF_Line.swf
FCF_Area2D.swf
FCF_Bar2D.swf
FCF_Pie2D.swf
FCF_Pie3D.swf
FCF_Doughnut2D.swf
*/
/**
* 設置值
* @param root 根目錄
* @param attributesMap 屬性配置 (可選項) name(x名稱),value(值),link(圖像加上鍊接,可以是js也可以是路徑,新窗口前面打開加上"n-")
*/
public static void setSingerElement(Element root,Map<String,String>attributesMap){
Element set=root.addElement("set");
for(String name:attributesMap.keySet()){
set.addAttribute(name, attributesMap.get(name));
}
}
/**----------------------------多系列圖形+組合圖形--------------------------------*/
/**
* -----多系列圖------
FCF_MSColumn2D.swf
FCF_MSColumn3D.swf
FCF_MSLine.swf
FCF_MSBar2D.swf
FCF_MSArea2D.swf
*/
/**
* -----組合圖-------
FCF_MSColumn2DLineDY.swf
FCF_MSColumn3DLineDY.swf
*/
/**
* 設置多系列圖的x座標name
* @param root 根節點
* @param attributesMap 相關屬性,比如設置字體大小 font='Arial' fontSize='11' fontColor='000000'
* @param values x具體的名稱
* @return
*/
public static Element setCategoryElement(Element root,Map<String,String>attributesMap,String[]values){
//設置多種類
Element categories=root.addElement("categories");
for(String name:attributesMap.keySet()){
categories.addAttribute(name, attributesMap.get(name));
}
for(String value:values){
categories.addElement("category").addAttribute("name", value);
}
return categories;
}
/**
* 設置值
* @param root
* @param attributesMap seriesname='Grain' color='C9198D'
* @param values
* @return
*/
public static Element setDatasetElement(Element root,Map<String,String>attributesMap,String[]values){
//設置多種類
Element dateset=root.addElement("dataset");
for(String name:attributesMap.keySet()){
dateset.addAttribute(name, attributesMap.get(name));
}
for(String value:values){
dateset.addElement("set").addAttribute("value", value);
}
return dateset;
}
//----------------------------趨勢線方便比較----------------------
/**
* 添加趨勢線
* @param root
* @return
*/
public static Element setTrendLine(Element root){
return root.addElement("trendlines");
}
/**
* 添加趨勢線
* @param trendline
* @param attributesMap startValue = '26000' color = '91C728' displayValue = 'Target' showOnTop = '1 '
* @return
*/
public static Element setLine(Element trendline,Map<String,String>attributesMap){
Element line=trendline.addElement("line");
for(String name:attributesMap.keySet()){
line.addAttribute(name, attributesMap.get(name));
}
return line;
}
/**
* 將root轉換成String
* @param root
* @return
*/
public static String toStringByRoot(Element root){
return Dom4jUtil.docToString(root.getDocument(),true);
}
public static void main(String[]args){
//---------------單系列圖形-----------------
Map rootAttributeMap=new HashMap();
rootAttributeMap.put("caption", "每月銷售額柱形圖");//主標題
rootAttributeMap.put("subcaption", "2006-2007");//符標題
rootAttributeMap.put("xAxisName", "月份");//x軸名稱
rootAttributeMap.put("yAxisName", "units");//Y軸名稱 免費版不支持中文顯示
rootAttributeMap.put("decimalPrecision", "0");
Element root=FusionChartUtil.getRootElement(rootAttributeMap);
Map singerAttributeMap=new HashMap();
String[]clors={"00","11","22","33","44","55","66","77","88","99","AA","BB","CC","DD","EE","FF"};
for(int i=1;i<=12;i++){
singerAttributeMap.put("name", i+"月");
Random r=new Random();
int value=r.nextInt(30000);
int i1=r.nextInt(clors.length);
int i2=r.nextInt(clors.length);
int i3=r.nextInt(clors.length);
singerAttributeMap.put("value", String.valueOf(value));
singerAttributeMap.put("color", String.valueOf(clors[i1]+clors[i2]+clors[i3]));
FusionChartUtil.setSingerElement(root, singerAttributeMap);
}
Map lam=new HashMap();
lam.put("startValue", "26000");
lam.put("color", "91C728");
FusionChartUtil.setLine(FusionChartUtil.setTrendLine(root), lam);
System.out.println(FusionChartUtil.toStringByRoot(root));
//---------------------多系列圖--------------------------
// Map rootAttributeMap=new HashMap();
// rootAttributeMap.put("caption", "每月銷售額柱形圖");//主標題
// rootAttributeMap.put("subcaption", "2006-2007");//符標題
// rootAttributeMap.put("xAxisName", "月份");//x軸名稱
// rootAttributeMap.put("yAxisName", "units");//Y軸名稱 免費版不支持中文顯示
// rootAttributeMap.put("showvalues", "0");//是否顯示數字,0爲不顯示,1爲顯示
//
//
//
//
// Element root=FusionChartUtil.getRootElement(rootAttributeMap);
//
// Map categoryAttributeMap=new HashMap();
// categoryAttributeMap.put("font", "Arial");
// categoryAttributeMap.put("fontSize", "13");
// categoryAttributeMap.put("fontColor", "000000");
// String[] values={"1月","","3月","","5月","","7月","","9月","","11月","12月"};
//
// FusionChartUtil.setCategoryElement(root,categoryAttributeMap,values);
//
//
// Map datasetAttributeMap=new HashMap();
// datasetAttributeMap.put("seriesName", "2006");
// datasetAttributeMap.put("color", "c4e3f7");
//
//
// Random r=new Random();
// String[] vss=new String[12];
// for(int i=0;i<12;i++){
// vss[i]=String.valueOf(r.nextInt(30000));
// }
// FusionChartUtil.setDatasetElement(root, datasetAttributeMap, vss);
//
// datasetAttributeMap.put("seriesName", "2007");
// datasetAttributeMap.put("color", "Fad35e");
// for(int i=0;i<12;i++){
// vss[i]=String.valueOf(r.nextInt(30000));
// }
// FusionChartUtil.setDatasetElement(root, datasetAttributeMap, vss);
//
// System.out.println(FusionChartUtil.toStringByRoot(root));
//------------------組合圖-------------------
// Map rootAttributeMap=new HashMap();
// rootAttributeMap.put("caption", "每月銷售額柱形圖");//主標題
// rootAttributeMap.put("subcaption", "2006-2007");//符標題
// rootAttributeMap.put("xAxisName", "月份");//x軸名稱
// //rootAttributeMap.put("yAxisName", "units");//Y軸名稱 免費版不支持中文顯示
// rootAttributeMap.put("PYAxisName", "數量av");
// rootAttributeMap.put("SYAxisName", "uv");
// rootAttributeMap.put("showvalues", "0");//是否顯示數字,0爲不顯示,1爲顯示
//
//
//
//
// Element root=FusionChartUtil.getRootElement(rootAttributeMap);
//
// Map categoryAttributeMap=new HashMap();
// categoryAttributeMap.put("font", "Arial");
// categoryAttributeMap.put("fontSize", "13");
// categoryAttributeMap.put("fontColor", "000000");
// String[] values={"1月","","3月","","5月","","7月","","9月","","11月","12月"};
//
// FusionChartUtil.setCategoryElement(root,categoryAttributeMap,values);
//
//
// Map datasetAttributeMap=new HashMap();
// datasetAttributeMap.put("seriesName", "2006");
// datasetAttributeMap.put("color", "c4e3f7");
// datasetAttributeMap.put("parentYAxis", "P");//P表示是主軸
//
//
// Random r=new Random();
// String[] vss=new String[12];
// for(int i=0;i<12;i++){
// vss[i]=String.valueOf(r.nextInt(30000));
// }
// FusionChartUtil.setDatasetElement(root, datasetAttributeMap, vss);
//
// datasetAttributeMap.put("seriesName", "2007");
// datasetAttributeMap.put("color", "Fad35e");
// for(int i=0;i<12;i++){
// vss[i]=String.valueOf(r.nextInt(30000));
// }
// FusionChartUtil.setDatasetElement(root, datasetAttributeMap, vss);
// //次軸
// datasetAttributeMap.put("seriesName", "用戶UV");
// datasetAttributeMap.put("color", "FF11BB");
// datasetAttributeMap.put("parentYAxis", "S");//s表示是次軸
// for(int i=0;i<12;i++){
// vss[i]=String.valueOf(r.nextInt(300));
// }
// FusionChartUtil.setDatasetElement(root, datasetAttributeMap, vss);
//
// System.out.println(FusionChartUtil.toStringByRoot(root));
}
}
演示demo :
CSDN下載:http://download.csdn.net/detail/nizhengjia888/5731059
51CTO下載:http://down.51cto.com/data/867128
另附一個flash餅圖demo
CSDN下載:http://download.csdn.net/detail/nizhengjia888/5731129
51CTO下載:http://down.51cto.com/data/867129