任意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,'矿权综合查询')"