報表之fusionchart

轉自: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

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章