发现每天访问这篇文章的还真不少,有必要改成技术论坛了,呵呵;如果有问题,可以在下面跟帖,我会尽量帮着解决;最近做项目,需要做一个根据模板自动生成各种报表的功能(word格式),模板上待替换的标签包括日期、各类数字、表格、统计图等;
因为项目中的柱状图、折线图什么的都是用FusionCharts做的,为了保持统一,这里也需要用FusionCharts生成图片,然后插入到word中;
做之前在网上搜索了一下,网上有提到FusionCharts生成图片或pdf的方法,但都是通过flash的右键来触发的,不符合自动化的需求;
于是,我自己研究了,现总结如下:
FusionCharts在v3.0.7支持了导出jpeg和png,在v3.1支持了导出pdf,下面是右键菜单的图片


而导出的方式也支持多种(老外写的东西就是好),支持服务器端导出(存到服务器硬盘或输出文件流)、客户端导出、批量导出;
我这里用到的是服务器导出的硬盘的方法,要想使用该方法,需要把xm的chartl修改如下:
- exportEnabled='1' exportHandler='test.aspx' exportAtClient='0' exportAction='save'
复制代码其中exportHandler是指用何种方式处理导出结果,我这里指定的是一个.net的url路径,官方有对应类的下载,包括php,jsp,.net的
这样设置后,就可以点击右键导出了,如下图:


其中进度条的提示效果,都可以自己修改或隐藏;
接下来我要用js来触发右键导出的事件,由于FusionCharts是在swf加载完毕才能导出的,否则导出的图片就不完整了,因此这里要加一个判断,具体代码如下:
在导出完图片后,我们还需要得到图片的路径,好把它插入到word中;FusionCharts也同样提供了该回调方法exportCallback,再次调整xml,最终代码如下:
- <chart caption='Monthly Unit Sales' xAxisName='Month' yAxisName='Units' showValues='0' decimals='0' formatNumberScale='0' exportEnabled='1' exportShowMenuItem='1' exportAtClient='0' exportHandler='test.aspx' exportAction='save' exportCallback='FC_Exported'>
复制代码然后再定义回调方法就ok了,
这样基本的功能就实现了,为了实现自动,需要再在页面加一个定时器调用ExportMyChart();
后记:由于word中图片的自动插入过程是不需要给用户看FusionCharts生成的swf的,所以需要把它放一个用户看不到的div里,但是div不能用display:none;因为不可见的元素,是无法调用对应方法的