FusionCharts的导出图片功能

之前公司用了一个图标控件FusionCharts来制作各类报表图片。它的确很炫并且有3D效果,比Echar等等好看多了。但是由于是买的第三方控件,所以还是有不足的地方。用过的人都知道FusionCharts生成的图片非常漂亮,那么怎么导出来呢?

大家肯定第一反应是想到了一个属性:exportaction。不过,这个属性提供了服务器端下载以及客户端下载,但是经过我多次试验后发现一个BUG:exportaction,/如果是SAVE则没反应 图片也没有下载到服务器上,但是能回调函数;download可以下载图片 但是没有回调函数。

那么怎么解决这个BUG呢?我改动了它生成图片的方法,具体代码到:http://download.csdn.net/detail/lijingrong_ljr/9302899 (点击打开链接 )处下载。

然后更改引用的fusioncharts.js:

页面头增加3个公共属性

/* ljr 2015-11-26
 参数说明:
    BaseExportLocation  端口号地址【本机调适可以用localhost,但是部署到服务器上,必须使用服务器地址如:http://127.0.0.1】
    SYSDExportLocation  在服务器端生成图片的请求页
    SYSDExportCheckLocation 下载图片的时候,验证图片是否已经生成的请求页
*/
var BaseExportLocation = "http://localhost:8022";
var SYSDExportLocation = BaseExportLocation + "/FCExporterServerDown.aspx";
var SYSDExportCheckLocation = BaseExportLocation + "/CheckImgFinished.ashx";

然后在此页面请求服务器生成图片的方法里替换掉之前的页面,如下图:


这里原来是根据exportaction属性来判断是服务器下载还是客户端,因为它有BUG所以我直接不看它的逻辑,全部改成服务端下载。它在服务器生成了图片之后,我在获取然后在下载到我的EXCEL等其他文件中。

至于需要传一些什么参数给它呢?如下所示:

 var fileName=newGuid();//图片的名称,因为下面我们下载的时候还会用到,所以就告诉服务器生成图片就是这个名称。

designChart=chartObj[i]; //FusionCharts生成的chartObj对象,里面已经包含了数据等一些基础属性。
designChart.setChartAttribute("exportEnabled","1"); //是否导出图片 加上可以导出图片
designChart.setChartAttribute("exportFormats","JPG");//生成图片的类型,我发现这个好像也没太大作用,它都是生成的fusioncharts.js里面默认的那个类型,默认好像PNG,我也把它改成JPG。
designChart.setChartAttribute("exportShowMenuItem","0");//是否显示可下载那个图标
designChart.setChartAttribute("exportTargetWindow","_self");//下载方式,这个随意,因为反正是服务器端了
designChart.setChartAttribute("exportFileName",fileName);//图片名称
designChart.setChartAttribute("exportaction","download");
designChart.exportChart();   //这个就是告诉服务器我们要下载图片的方法了        
setTimeout("checkExportImgFinished('"+fileName+"','"+title+"')",2000);//判断图片是否已经生成成功


大家看到了,因为fusioncharts没有图片生成的回调函数,所以我们加了一个setTimeout方法,隔一段时间去请求看看图片是否已经生成成功。如下是考虑的多图片的时候,所以图片名称等需要累加。但是上面的方法需要一个一个的执行。

//ljr 判断是否已经生成图片
    var NowCheckCount=0,AllCheckCount=0,fileNameAll="",imgTitleAll="";
    function checkExportImgFinished(fname,title){ 
        $.ajax({
            type: 'Get',           
            async: false,
            url: SYSDExportCheckLocation+"?fileName="+fname,//这里就是我们之前fusioncharts.js里增加那3个公共属性
            success: function(data) {
                if(data=="true")
                {
                    checkCheckFinished(fname,title);//有图片则把路径累加
                }
                else noImg(fname,title);
            },
            error:function(a,b,c){
                noImg(fname,title);//无图片继续执行检测图片
            }
        });
    }
    //检查图片如果存在 则执行导出操作 2015-8-13
    function checkCheckFinished(fname,title){
        NowCheckCount++;
        if(fname!=null)
            fileNameAll+=BaseExportLocation+"/Exported_Images/"+fname+".JPG,";
        if(title!=null)
            imgTitleAll+=title+",";
        if(NowCheckCount>=AllCheckCount)//入托检测次数大于等于图片的个数 则不需要检测 直接执行下载方法
        {
            fileNameAll=fileNameAll.substr(0,fileNameAll.length-1);imgTitleAll=imgTitleAll.substr(0,imgTitleAll.length-1);
            chartCallBack(gpl1, reportName1, abandonColName1,useRender1,fileNameAll,imgTitleAll);
        }
    }
    //ljr 检测图片不存在的时候 在去进行检查 2015-8-12
    function noImg(fName,title){
         NowCheckCount++;
        if(NowCheckCount>10){  
            checkCheckFinished(null,null);
        }else{
            setTimeout("checkExportImgFinished('"+fName+"','"+title+"')",1500);    
        }
    }
    //ljr 2015-8-10 图片下载成功后的回调函数
    function chartCallBack(gpl, reportName, abandonColName,useRender,fileName,titleAll)
    {
        Ext.net.Mask.hide();
        这里就执行你自己的操作了,比如下载到EXCEL或者下载到WORD等等。
    }

基本就OK了,大家可以试试。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值