加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:27:06 所属栏目:百科 来源:网络整理
导读:团队在做一个Flex的框架,其中做了统计柱状图、饼图、表格,表格利用第三方包已完成导出,今天重点解决导出饼图、柱状图。 首先在网上搜索导出amchart的资料,amchart 的flex组件没有内置的导出功能,需要自己去写,最先找到的解决方法,也就是网上比较的多

团队在做一个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,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,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自有强大处啊!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读