最近要做一个在线制作word文档的功能,要求word中引入前端hightchart画的表格图片。
比较头疼的是怎么把hightchart的图保存到服务端,搜索了一上午都没找到好的方法,现在把刚才写好的方法分享一下
原理很简单 就是前端js获得hightchart的SVG编码,通过参数传递到后台,后台再去把svg转换成png图片保存
需要注意如果hightchart中引入了图片 需要对图片的宽度和高度进行定义 否则svg转png时会报错
jsp代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
js代码
$(function () {
var mychart= {
chart: {
type: 'spline'
},
title: {
text: '两地月平均温度'
},
exporting: {
buttons: {
contextButton: {
menuItems: [{
text: '导出PNG',
onclick: function () {
expLoacChartPNG(this,250);
},
}],
}
},
fallbackToExportServer:false,
},
subtitle: {
text: '数据来源: WorldClimate.com'
},
xAxis: {
categories: ['一月', '二月', '三月', '四月', '五月', '六月',
'七月', '八月', '九月', '十月', '十一月', '十二月']
},
yAxis: {
title: {
text: '温度'
},
labels: {
formatter: function () {
return this.value + '°';
}
}
},
tooltip: {
crosshairs: true,
shared: true
},
plotOptions: {
spline: {
marker: {
radius: 4,
lineColor: '#666666',
lineWidth: 1
}
}
},
series: [{
name: '东京',
marker: {
symbol: 'square'
},
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, {
y: 26.5,
}, 23.3, 18.3, 13.9, 9.6]
}, {
name: '伦敦',
marker: {
symbol: 'diamond'
},
data: [{
y: 3.9,
}, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}]
};
var chart=Highcharts.chart("chart",mychart);
var chartSVG = chart.getSVG();
var param = {};
param.svgCode = chartSVG;
param.fileName = 'test.png';
WhenRequest("./topng", param, "post").then(thenFun);//when.js封装方法 可用ajax直接替换
function thenFun(path){
//返回为图片地址
}
});
服务层代码
@RequestMapping(value = "/topng", produces = "application/json; charset=utf-8")
@ResponseBody
public String exportWord(String svgCode, String fileName) {
String downloadFilePath = null;
try {
downloadFilePath = "C:\\springUpload\\" + fileName;
SvgPngConverter.convertToPng(svgCode, downloadFilePath);//svg转png
} catch (IOException e) {
e.printStackTrace();
} catch (TranscoderException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return JSONUtils.toJSONString(downloadFilePath);
}
这个是svg转png的类 点击打开链接(svg转png的方法可以百度到,我就是想赚点积分)