任意flex控件导出图片

flex导出图片功能通常是:

思路1:客户端将UIComponent转化为BitmapData,再转为ByteArray,将ByteArray上传到服务端,服务端发送文件到客户端。

然而,flex本来就是客户端的东西,为什么还要绕道服务端去呢,这不是化简单为复杂嘛,

思路2:客户端将UIComponent转化为BitmapData,再转为ByteArray,使用FileReference.save()直接在client端保存图片

(当然前提要求是:在flash player 10.0中)

具体代码如下:

.as 的类文件

package widgets_dr.TJT

{

import flash.display.BitmapData;

import flash.display.DisplayObject;

import flash.display.DisplayObjectContainer;

import flash.geom.Matrix;

import flash.geom.Point;

import flash.net.FileReference;

import flash.utils.ByteArray;



import mx.controls.Alert;

import mx.graphics.codec.PNGEncoder;  



 public class ChartExport

 {

  static public var Instance:ChartExport=new ChartExport();

  

  public function ChartExport()

  {

  }

  public function exportChart(d:DisplayObject):void{  

   

   var dt:DisplayObject = d;  

   var bmpData:BitmapData = new BitmapData(d.width,d.height,true,0x00ffffff);    

   bmpData.draw(d);

   

   var fr:Object = new FileReference();  

   if(fr.hasOwnProperty("save"))

   {  

    var encoder:PNGEncoder = new PNGEncoder();  

    var data:ByteArray = encoder.encode(bmpData);  

    fr.save(data,'chart.png');  

   }

   else

   {  

    Alert.show("当前flash player版本不支持此功能,请安装10.0.0以上版本!","提示");  

    

   }  

   

  }

 }

}



然后在felx的mxml代码中创建这个类的对象,用这个类的对象去引用方法执行即可

例如:

var d:DisplayObject=DisplayObject(tabb);
    ChartExport.Instance.exportChart(d);

顺便讲一下,Datagrid导出excel的方法:

导入 import com.esri.viewer.utils.ExcelUtil;

然后 click="ExcelUtil.exportGrid(querydg,'矿权综合查询')"

你可能感兴趣的:(Flex)