分三步:
1.獲取echart圖的Base64碼
<input type="hidden" name="img" id="img" />
$('#img').val(myChart.getDataURL("png"));
2.解碼並生成圖片
public void createImg(HttpServletRequest request){
String uplodapath = "D:/temp/upload";
//生成圖片begin
String data = request.getParameter("img");
String imgname = "test.png";
String filedir = "D:/temp";
File file = new File(filedir);
if(!file.exists()){
file.mkdirs();
}
String[] url = data.split(",");
String u = url[1];
BASE64Decoder decoder = new BASE64Decoder();
// 生成圖片
try {
// Base64解碼
byte[] b = decoder.decodeBuffer(u);
OutputStream out = new FileOutputStream(new File(filedir+"\\" + imgname));
out.write(b);
out.flush();
out.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//圖片end
}
3.讀取圖片到excel
try {
XSSFWorkbook wb = new XSSFWorkbook();
//下載圖片到excel
//begin
BufferedImage bufferImg = null;
try {
//創建作圖sheet
XSSFSheet sheet1 = null;
if(wb.getSheet("echarts")==null){
sheet1 = wb.createSheet("echarts");
}else{
sheet1 = wb.getSheet("echarts");
}
//循環讀取圖片插入到excel
String filedir = "D:/temp";
File file = new File(filedir);
if(file.isDirectory()){
String[] files = file.list();
//畫圖的頂級管理器,一個sheet只能獲取一個(一定要注意這點)
XSSFDrawing patriarch = sheet1.createDrawingPatriarch();
int i = 0;
int rowbegin = 1;
int rowend = 8;
for(String _file : files){
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
bufferImg = ImageIO.read(new File(filedir + "\\" + _file));
ImageIO.write(bufferImg, "png", byteArrayOut);
//anchor主要用於設置圖片的屬性
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 255, 255,(short) 1, rowbegin, (short) 5, rowend);
//插入圖片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_PNG));
i++;
rowbegin = i*8+1;
rowend = rowbegin + 8;
}
}
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("test.xls", "GBK"));
OutputStream out = response.getOutputStream();
// 寫入excel文件
wb.write(out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//end
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
參考來源:https://www.cnblogs.com/sun-space/p/5672373.html
http://blog.csdn.net/qq_33212500/article/details/73274799