`
kidiaoer
  • 浏览: 822543 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

使用Fusion Chart制作报表

阅读更多
使用Fusion Chart制作报表(dom4j生成XML)

    首次看到Fusion Chart是在Bug Free上,有个统计功能,看到了这个数据报表,也是Flash实现的,和Open Flash Chart类似,但是数据格式完全不同。OFC使用JSON数据,而Fusion Chart使用XML数据,OFC是单文件的,而FC是多文件(不同的Flash显示不同类型的报表)。Fusion Chart的官方网站是http://www.fusioncharts.com/free ,可以下载开发包和查看示例。下载Fusion Charts Free后的开发包内有swf文件,示例代码和支持的JS文件。我们只要swf和js即可,开发环境自行搭建,非常简单,注意这里我们使用免费的Fusion Charts Free。 
    因为Fusion Chart的数据源是XML格式,那么就要准备生成XML的API,这有很多选择,如JDOM,DOM4J都不错。因为Hibernate默认只用了Dom4J来解析XML,那么为了避免过多引入JAR依赖,就使用Dom4j来生成XML文本。下面先对Dom4j做个初步的封装,使得使用起来方便一些。 
package org.xxx.core.util;

import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
 * 使用dom4j生成XML工具类
 * 
 * @author Sarin
 * 
 */
public class XMLUtil {
	private Document document = null;

	public Document getDocument() {
		return document;
	}
	/**
	 * 构造方法,初始化Document
	 */
	public XMLUtil() {
		document = DocumentHelper.createDocument();
	}
	/**
	 * 生成根节点
	 * 
	 * @param rootName
	 * @return
	 */
	public Element addRoot(String rootName) {
		Element root = document.addElement(rootName);
		return root;
	}
	/**
	 * 生成节点
	 * 
	 * @param parentElement
	 * @param elementName
	 * @return
	 */
	public Element addNode(Element parentElement, String elementName) {
		Element node = parentElement.addElement(elementName);
		return node;
	}
	/**
	 * 为节点增加一个属性
	 * 
	 * @param thisElement
	 * @param attributeName
	 * @param attributeValue
	 */
	public void addAttribute(Element thisElement, String attributeName,
			String attributeValue) {
		thisElement.addAttribute(attributeName, attributeValue);
	}
	/**
	 * 为节点增加多个属性
	 * 
	 * @param thisElement
	 * @param attributeNames
	 * @param attributeValues
	 */
	public void addAttributes(Element thisElement, String[] attributeNames, String[] attributeValues) {
		for (int i = 0; i < attributeNames.length; i++) {
			thisElement.addAttribute(attributeNames[i], attributeValues[i]);
		}
	}
	/**
	 * 增加节点的值
	 * 
	 * @param thisElement
	 * @param text
	 */
	public void addText(Element thisElement, String text) {
		thisElement.addText(text);
	}
	/**
	 * 获取最终的XML
	 * 
	 * @return
	 * @throws IOException
	 */
	public String getXML() {
		return document.asXML().substring(39);
	}
}

    获取的XML因为包含声明,而Fusion Chart中不需要,所以这里就从根标记处开始截取。下面来看看Fusion Chart解析XML的格式。取自官方网站的一个示例: 
<graph  yAxisName='Sales Figure'  caption='Top 5 Sales Person'  numberPrefix='$' decimalPrecision='1'  divlinedecimalPrecision='0' limitsdecimalPrecision='0'>
        <set name='Alex' value='25000' color='AFD8F8'/> 
<set name='Mark' value='35000' color='F6BD0F'/>
<set name='David' value='42300' color='8BBA00'/>
<set name='Graham' value='35300' color='FF8E46'/>
<set name='John' value='31300' color='008E8E'/>
</graph>

    根标记是graph,其中有可配置的属性,可以参考官方文档,这里不详细列出了。单分类报表中使用set子标记作为数据,下面来看一个具体的数据源生成方法,使用了Struts2作为Web框架来处理请求。 
package org.xxx.app.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Element;
import org.xxx.core.util.XMLUtil;

public class ChartAction extends BaseAction {
	private String xmlStr;

	public String getXmlStr() {
		return xmlStr;
	}
	public String chart() throws Exception {
		XMLUtil xml = new XMLUtil();
		Element graph = xml.addRoot("graph");
		xml.addAttribute(graph, "caption", "访问统计");
		xml.addAttribute(graph, "subCaption", "浏览器类型统计");
		xml.addAttribute(graph, "basefontsize", "12");
		xml.addAttribute(graph, "xAxisName", "浏览器类型");
		xml.addAttribute(graph, "decimalPrecision", "0");// 小数精确度,0为精确到个位
		xml.addAttribute(graph, "showValues", "0");// 在报表上不显示数值
		List browserList = getServMgr().getChartService().getStatsByType("browser");
		for (int i = 0; i < browserList.size(); i++) {
			Map item = (HashMap) browserList.get(i);
			Element set = xml.addNode(graph, "set");
			set.addAttribute("name", (String) item.get("statVar"));
			set.addAttribute("value", item.get("statCount").toString());
			set.addAttribute("color", Integer.toHexString(
					(int) (Math.random() * 255 * 255 * 255)).toUpperCase());
		}
		xmlStr = xml.getXML();
		return "chart";
	}
}

    数据的获取使用了Spring的JdbcTemplate来进行,方法如下: 
	private static final String SQL_GET_STATS = "select statVar,statCount from stats where statType=?";
	public List getStatsByType(String type) {
		return jt.queryForList(SQL_GET_STATS, new Object[] { type });
}

    数据表的结构可以参考 http://sarin.iteye.com/admin/blogs/685354这篇,因为相同的演示,就用了同一个表结构。获取到数据遍历之后,就要在页面进行输出显示了,也很简单,页面如下: 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fusion Chart Test</title>
<script type="text/javascript" src="${base}/js/FusionCharts.js"></script>
</head>
<body>
<div id="chartDiv"></div>
<script type="text/javascript">
	var chart = new FusionCharts("${base}/charts/FCF_Column3D.swf", "0", "800", "600");
	chart.setDataXML('${xmlStr}');
	chart.render('chartDiv');
	</script>	

</body>
</html>

    使用setDataXML()方法获取传递过来的xmlStr,就是我们需要的XML数据。简单的报表这样就可以了。如果是多类别报表,只是在XML格式上有所不同,参考官方示例,重新编写XML即可。下面来看看生成的报表,非常的不错。 

分享到:
评论

相关推荐

    使用Fusion Charts制作报表(dom4j生成XML)

    这篇博客"使用Fusion Charts制作报表(dom4j生成XML)"主要介绍了如何利用Fusion Charts结合DOM4J库来生成XML数据,从而创建动态报表。 首先,我们需要理解Fusion Charts的核心概念。Fusion Charts提供了一系列预定...

    Mind fusion chart 最新破解代码

    Mind fusion chart最新破解代码 拿走不谢,自带工程,可以编译成功!

    Fusion chart Fex javascript web chart

    标题中的"Fusion chart Fex"指的是FusionCharts的特定版本或扩展,可能包含了增强的功能或者优化。"javascript web chart"明确了它是针对Web应用的JavaScript解决方案,用于绘制图表。 描述中提到的“包含开发包和...

    fusion chart 多曲线图

    在“Fusion Chart 多曲线图”这个主题中,我们主要讨论如何利用FusionCharts来绘制并管理多条曲线的图表,特别关注其内置的SWF文件支持。SWF文件是Adobe Flash的文件格式,以前常用于在网络浏览器中展示动态内容,...

    fusion chart中的雷达图

    fusion chart中的雷达图.可以显示多个曲线,并且控制其是否显示

    Fusion Chart及部分制作说明文档资料

    在3D报表制作中,FusionCharts可以提供极具吸引力的视觉体验,帮助用户更好地理解和分析数据。 FusionCharts支持多种图表类型,包括柱状图、线图、饼图、甘特图、地图等,覆盖了数据分析的各个方面。其3D效果使得...

    Fusion Chart v.3.0 Flash图表工具 Source

    图表显示是很多开发工作所必不可少的一项功能,今天我介绍一个前段时间发现的免费的Flash图表开发工具,可以通过Adobe Flash...这个免费工具在各类业务系统的报表项目中都具有使用的前景,起到增强各类报表的显示效果。

    fusion chart 手册

    - **图表右边距(Chart Right Margin)**:同理,设置图表右侧的空闲空间,使用`chartRightMargin`属性,例如`&lt;chart chartRightMargin="15"&gt;`。 - **图表顶边距(Chart Top Margin)**:控制图表顶部的空白,使用...

    Fusion App 制作自己的安卓APP软件

    Fusion App 制作自己的安卓APP软件 这个工具挺好的 可以把自己收藏的网站都集成到这个软件里 生成自己的APP安装包 完全是按照自己的意愿创作 相当不错的工具软件

    Fusion_Chart使用说明文档

    免费3D图形输出,可应用于多种开发语言,JAVA/PHP/ASP等

    SSH+jquery+springScurity权限管理+fusion+jasperreport报表+webService调用天气预报+完整分页 整合小型OA

    这个里面加了fusion报表代码 SSH+jquery+springScurity权限管理+jasperreport报表+webService调用天气预报+完整分页 整合小型OA项目源码下载 里面还有需要完善的地方,有些是需要重复做的代码,最近时间比较紧,...

    image-registration-and-fusion-flowchart.rar_Image-registration_R

    image registration and fusion flowchart

    华为云计算FusionCompute8 8.0.1 8.0.1.SPH2 FusionSphere8 全套资源

    FusionCompute8.0.0目录 FusionCompute_Installer-8.0.0.zip ---------- Windows安装工具 FusionCompute_CNA-8.0.0-X86_64.iso ------------ CNA计算节点安装镜像(操作系统) FusionCompute_CNA-8.0.0-ARM_64.iso -...

    KinectFusion 和 ElasticFusion 三维重建方法

    KinectFusion的核心在于使用了体素哈希(Voxel Hashing)技术和直接法ICP(Iterative Closest Point)算法来对每一帧的深度图像进行处理,并实时地将处理结果融合到一个全局的三维模型中。该方法主要适用于小到中等...

    Fusionstorage与FuisionSphere联合部署并接入FusionCompute环境实验指导

    ### Fusionstorage与FusionSphere联合部署并接入FusionCompute环境实验指导 #### 一、概述 FusionStorage是华为提供的一款分布式存储解决方案,它能够为用户提供高性能、高可靠性和易于扩展的数据存储服务。Fusion...

    VirtualLab Fusion 2020 下载链接及使用说明

    ### VirtualLab Fusion 2020 知识点解析 #### 一、软件介绍与应用场景 **VirtualLab Fusion**是一款由Lumerical Solutions开发的专业光学仿真软件,它结合了多种光线追踪技术和波动光学方法,为用户提供了一个强大...

    fusionChart使用json数据实现报表

    3. **初始化FusionCharts实例**:使用`FusionCharts`构造函数创建图表实例,传入ID(用于在页面中定位图表的div元素)和配置对象(包括图表类型和JSON数据)。 ```javascript var chartObj = new FusionCharts({ ...

Global site tag (gtag.js) - Google Analytics