天天看点

java highcharts_java后台生成HighCharts图片

[b]在前端通过HighCharts获取svgCode,再根据svgCode生成图片。生成的图片在插入到word文档中 freemarker, BASE64Encoder[/b]

[url]http://www.muxuanli.com:8888/lmx/blog/10[/url]

[b]1. 获取svgCode[/b]

var chart = $("#container").highcharts();

var svgCode = chart.getSVG();

[b]2. 根据svgCode生成图片[/b]

String svgImgPath = uploadFilePathService.getUploadFilePath()+"svg/"+salivaBox.getBarCode()+"_"+m+".png";

String svgCode = svgCodeList.get(m).replace("Highcharts.com.cn","");

SvgPngConverter.convertToPng(svgCode, svgImgPath);

params.put("image"+(m+1), SvgPngConverter.getImageBASE64Encoder(svgImgPath));

[b]3. SvgPngConverter[/b]

import java.io.*;

import org.apache.batik.transcoder.TranscoderException;

import org.apache.batik.transcoder.TranscoderInput;

import org.apache.batik.transcoder.TranscoderOutput;

import org.apache.batik.transcoder.image.PNGTranscoder;

import sun.misc.BASE64Encoder;

public class SvgPngConverter {

public static void convertToPng(String svgCode,String pngFilePath) throws IOException,TranscoderException{

File file = new File (pngFilePath);

FileOutputStream outputStream = null;

try {

file.createNewFile ();

outputStream = new FileOutputStream (file);

convertToPng (svgCode, outputStream);

} finally {

if (outputStream != null) {

try {

outputStream.close ();

} catch (IOException e) {

e.printStackTrace ();

}

}

}

}

public static void convertToPng(String svgCode,OutputStream outputStream) throws TranscoderException,IOException{

try {

byte[] bytes = svgCode.getBytes ("UTF-8");

PNGTranscoder t = new PNGTranscoder ();

TranscoderInput input = new TranscoderInput (new ByteArrayInputStream (bytes));

TranscoderOutput output = new TranscoderOutput (outputStream);

t.transcode (input, output);

outputStream.flush ();

} finally {

if (outputStream != null) {

try {

outputStream.close ();

} catch (IOException e) {

e.printStackTrace ();

}

}

}

}

public static String getImageBASE64Encoder(String imagePath) {

InputStream in = null;

byte[] data = null;

try {

in = new FileInputStream(imagePath);

data = new byte[in.available()];

in.read(data);

in.close();

} catch (IOException e) {

e.printStackTrace();

}

BASE64Encoder encoder = new BASE64Encoder();

return encoder.encode(data);

}

}