Flex导出组件、图片或amchart统计图为图片

团队在做一个Flex的框架,其中做了统计柱状图、饼图、表格,表格利用第三方包已完成导出,今天重点解决导出饼图、柱状图。

首先在网上搜索导出amchart的资料,amchart 的flex组件没有内置的导出功能,需要自己去写,最先找到的解决方法,也就是网上比较的多就是,利用servlet的方式完成导出,

代码如下:

前台代码:

private function selectSave(event:Event):void{
var bitmapData:BitmapData = new BitmapData(amChart.width,amChart.height,false,getStyle('backgroundColor'));
bitmapData.draw(amChart);
var jpg:JPEGEncoder = new JPEGEncoder();
var jpgByteArray:ByteArray = jpg.encode(bitmapData);
//var jpgByteArray:ByteArray = jpg.encode(ImageSnapshot.captureBitmapData(amChart));

var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var request:URLRequest = new URLRequest("http://localhost:8080/ytgis/upload/servlet");  //自己的servlet代替
request.requestHeaders.push(header);
request.contentType = 'applicatoin/octet-stream'; 
request.data = jpgByteArray;  
request.method = URLRequestMethod.POST;  
navigateToURL(request);  
}

后台servlet代码:

    public class exportAmchart extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
saveImage(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
saveImage(req, resp);
}
@SuppressWarnings("unused")
private void saveImage(HttpServletRequest request,HttpServletResponse response ) throws IOException{

 String fileName = "D://" + System.currentTimeMillis() + ".jpg";  
        BufferedImage bufferedImage = ImageIO.read(request.getInputStream());  
        if (bufferedImage != null) {  
            ImageIO.write(bufferedImage, "jpeg", new File(fileName));  
        }  
}
}

这种利用servlet导出的方式,不灵活,而且用户体验性也很差!后又看了下Flex自己提供了导出组件为图片的功能,利用这种方式还是比较好的,代码如下:

private function selectSave(event:Event):void{
var bitmapData:BitmapData = new BitmapData(amChart.width,amChart.height,false,getStyle('backgroundColor'));
bitmapData.draw(amChart);
var jpg:JPEGEncoder = new JPEGEncoder();
var jpgByteArray:ByteArray = jpg.encode(bitmapData);
//var jpgByteArray:ByteArray = jpg.encode(ImageSnapshot.captureBitmapData(amChart));//这句话可替代上面这些代码

                               var fileSave:FileReference = new FileReference();

                                 fileSave.save(jpgByteArray,"统计.jpg");

                    }

就这些代码就搞定了,是不是很强大,Flex自有强大处啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值