[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);
}
}