1.highchart生成的图片是svg格式的,获取之后转换成输入输出流,转换成base64,将base64替换freemark中需要生成图片的位置,一般是一堆二维码,导出就可以了
2.多个图片的例子: var svg1= chartLogin.getSVG(); var svg2 = chartSelfUser.getSVG();在from中定义一个隐藏域 Id=”svg” name = “svg”
通过$(“#svg”).val(svgLogin+’_’+svgSelfUser);的方式为隐藏域赋值,通过from提交到后台,
3。后台获取数据后,
public void createAndDownload(HttpServletRequest request, HttpServletResponse response,
String cycleStartExport, String svgCode) throws Exception{
try {
WordDocumentUtils handler = new WordDocumentUtils();
//文档设置值
Map<String,Object> mapData = new HashMap<String,Object>();
ByteArrayOutputStream array = new ByteArrayOutputStream();
String svg[] = svgCode.split("_");
for (int i = 0; i < svg.length; i++) {
byte[] bytes = HtmlUtils.htmlUnescape(svg[i]).getBytes("UTF-8");
PNGTranscoder t = new PNGTranscoder();
TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes));
TranscoderOutput output = new TranscoderOutput(array);
t.transcode(input, output);
byte[] data = array.toByteArray();
BASE64Encoder encoder = new BASE64Encoder();
String img = null;
if(data!=null && data.length>0){
img = encoder.encode(data);
}
mapData.put("imgStr"+i, img);
}
handler.setDataByMap(mapData);
//Configuration cfg = new Configuration();
//cfg.setClassicCompatible(true);
//文档生成名设置
handler.createDoc(reportTemplate, reportFileName);
//导出文档
//handler.download(reportFileName,response);
download(GlobalConfigure.getWordOutDir(),reportFileName,response,request);
} catch (Exception e) {
e.printStackTrace();
}
}
4.freemark中处理${imgStr0!}
需要注意的地方是前台传到后台的< > ” “会自动转换成网页的形式,所以要使用HtmlUtils.htmlUnescape进行转换
项目中需要引入的jar包为xml-apis-ext-1.3.04.jar batik-all-1.7.jar