highchar交互图表导出excel
1.页面获取svg
Highcharts.SVGElement.prototype.fillSetter = Highcharts.SVGElement.prototype.strokeSetter = function (value, key, element) {
var colorObject;
if (typeof value === 'string') {
if (value.indexOf('rgba') === 0) {
// Split it up
colorObject = Highcharts.Color(value);
element.setAttribute(key + '-opacity', colorObject.get('a'));
element.setAttribute(key, colorObject.get('rgb'));
} else {
element.removeAttribute(key + '-opacity');
element.setAttribute(key, value);
}
} else {
this.colorGradient(value, key, element);
}
};
var chars = (‘#container’).highcharts();
var svg = chars.getSVG();(‘#svgVal’).val(svg);
2.后台转换为jpg,生成临时文件
public void svgToJpg(HttpServletRequest request, HttpServletResponse response, String name) throws Exception{
String svgCode = request.getParameter(“svg”);//highcharts图表svgCode
String picName = name+”.png”;
/*response.addHeader(“Content-Disposition”, “attachment; filename=”+ picName);
response.addHeader(“Content-Type”, “image/png”);*/
File tempPath = new File(request.getSession().getServletContext().getRealPath("/") + "temp/");
if(!tempPath.exists() || !tempPath.isDirectory())
{
tempPath.mkdir();
}
FileOutputStream fos = new FileOutputStream(tempPath.getAbsoluteFile()+ File.separator + picName);
Transcoder t = new PNGTranscoder();
TranscoderInput input = new TranscoderInput(new StringReader(svgCode));
TranscoderOutput output = new TranscoderOutput(fos);
try {
t.transcode(input, output);
} catch (TranscoderException e) {
System.out.print("Problem transcoding stream. See the web logs for more details.");
e.printStackTrace();
} finally {
if (fos != null){
fos.close();
}
}
ajaxReturn(response, "1");
}
3.读写临时文件写入excel
// 定义输出类型
response.setContentType(“application/msexcel”);
String picName = ticketMoneyAnalysisVO.getYear() + “-” + ticketMoneyAnalysisVO.getMonth()+”.png”;
FileOutputStream fileOut = null;
BufferedImage bufferImg = null;
Result result = null;
//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
File f = new File(request.getSession().getServletContext().getRealPath("/") + "temp/" + picName);
try {
bufferImg = ImageIO.read(f);
ImageIO.write(bufferImg, "png", byteArrayOut);
result = ticketMoneyAnalysisService.getExel(ticketMoneyAnalysisVO, out, byteArrayOut);
if (f.isFile() && f.exists()) {
f.delete();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(fileOut != null){
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(titleBuff.toString());
sheet.autoSizeColumn(1);
//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
//anchor主要用于设置图片的属性
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023,100,(short) 1, 15, (short)26, 46);
anchor.setAnchorType(3);
//插入图片
patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));