在前端通过HighCharts获取svgCode,再根据svgCode生成图片。生成的图片在插入到word文档中 freemarker, BASE64Encoder
http://www.muxuanli.com:8888/lmx/blog/10
1. 获取svgCode
var chart = $("#container").highcharts();
var svgCode = chart.getSVG();
2. 根据svgCode生成图片
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));
3. SvgPngConverter
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;
/**
* Created by lijie on 17/6/5.
*/
public class SvgPngConverter {
/**
*@Description: 将svg字符串转换为png
*@Author:
*@param svgCode svg代码
*@param pngFilePath 保存的路径
*@throws IOException io异常
*@throws TranscoderException svg代码异常
*/
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 ();
}
}
}
}
/**
*@Description: 将svgCode转换成png文件,直接输出到流中
*@param svgCode svg代码
*@param outputStream 输出流
*@throws TranscoderException 异常
*@throws IOException io异常
*/
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);
}
}
分享到:
相关推荐
Highcharts的java后台生成各种图片,经过测试生成图片时间比较长,大概的3-7秒。直接运行demo,SimpleExport测试类,直接测试
Highcharts在Java后台导出图片到PDF和EXCEL文件中示例代码,程序放到MyEclipse8.6中编译后可直接放到Tomcat6及以上版本运行,程序中含有jar包,下载后不用操心到处找jar包,在MyEclipse8.6里建立普通的Web工程就可以...
1,将java后台获取的数据写入word文档并导出 2,将图片导入word文档并导出(注意:导出图片在word模板上需要先随便找张图片先放入指定位置,另存为xml之后打开,将先前放入的图片xml删掉,做个标识符(例如:${abc}))
基于springboot的bookstore电商书城系统 - 后台主要是springboot+mybatis+shiro+jsp,前端界面主要使用bootstrap框架搭建,并使用了ueditor富文本编辑器、highcharts图表库 一、系统介绍 后台管理员登录包含以下...
JAVA代码有很多重复机械代码, 生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑, 从而实现代码生成+手工merge的半智 能开发! JEECG敏捷框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计...
JAVA编程有很多重复机械代码, 生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑, 从而实现代码生成+手工merge的半智能开发!JEECG敏捷框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路...
JAVA编程有很多重复机械代码, 生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑, 从而实现代码生成+手工merge的半智能开发!JEECG智能框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路...
后台主要是为商家服务,实现了权限,店铺,商品和订单等的管理,以及生成一些简单的报表信息。访 问 /admin 进入后台 运行环境: jdk1.8,maven,mysql 项目技术: 后台主要是springboot+mybatis+shiro+jsp,前端...
后台主要是springboot+mybatis+shiro+jsp(jsp已过时)...,前端界面主要使用bootstrap框架搭建,并使用了ueditor富文本编辑器、highcharts图表库 系统划分与功能 该系统分为前台展示和后台管理两大模块。 前台主要是...
天梯是一个用 Java 相关技术搭建的后台 CMS 解决方案,用户可以结合自身业务进行相应扩展,同时提供了针对 dao、service 等的代码生成工具。技术选型:Spring Data JPA、Hibernate、Shiro、 Spring MVC、Layer、...
2. Java SDK:后台服务日志生成与发送工具,特点是代码简单,可以打成jar包或者直接拷贝类到具体的项目中。 3. Nginx:web服务器软件,特点是小巧而高效,基于事件的,内存使用很低,系统资源消耗小。 4. Shell脚本...