【freemaker實現導出word③】詳解將echarts的圖片到出到word

前面介紹了導出到word的代碼實現,詳見這裏,裏面有一部分涉及導出圖片到word,在這裏我再另外作一個詳細的介紹。
是這樣的,我項目有個功能,裏面就涉及到要將echarts造成的柱狀圖或者地圖之類的圖表導出到word,在網上找了好久,都是說將圖片轉成base64編碼後傳給後臺解碼,但沒有一篇有詳細具體的介紹,通過不斷的摸索,終於實現了,在這裏給你們作個分享。javascript

處理步驟:
(1)圖片咱們能夠在前臺將要的圖片轉成base64編碼,而後提交給後臺接收
(2)後臺接收base64編碼後使用工具類將base64解碼成圖片而後保存到本地中
(3)在要導出word的時候讀取下本地存儲圖片的路徑而後把圖片導出來就好了。java

一、在前臺用js將echarts生成的圖片轉成base64編碼,提交給後臺。json

<script type="text/javascript">
    //定義柱狀圖圖片base64編碼的全局變量
    var barBase64Info;
    
    function echar(){//柱狀圖
        var myChart = echarts.init(document.getElementById('histogram'));
        
        $.post('...',{},function (data) { 
            //...
            var option = {    
                    //...
                };
            myChart.setOption(option);
            //用getDataURL()將柱狀圖轉義成base64編碼賦給全局變量
            barBase64Info = myChart.getDataURL();
        }, 'json');
    }
    //下面根據大家本身的代碼,點擊按鈕的時候將barBase64Info同時提交給後臺接收就好了
</script>

二、下面就是使用工具類在後臺對圖片進行處理,工具類以下:segmentfault

package com.*.util;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import javax.imageio.ImageIO;
import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;


/**
 * 類名稱:ImageUtil
 * 類描述:圖片處理工具類
 */
public class ImageUtil {
    
     /**
      * 從path這個地址獲取一張圖片而後轉爲base64碼
      * @param imgName  圖片的名字 如:123.png(是帶後綴的)
      * @param path     123.png圖片存放的路徑
      * @return
      * @throws Exception
      */
     public static String getImageFromServer(String imgName,String path)throws Exception{
      BASE64Encoder encoder = new BASE64Encoder();
      File f = new File(path+imgName);
            if(!f.exists()){
        f.createNewFile();
            }
            BufferedImage bi = ImageIO.read(f);    
            ByteArrayOutputStream baos = new ByteArrayOutputStream();    
            ImageIO.write(bi, "png", baos);    
            byte[] bytes = baos.toByteArray();    
            return encoder.encodeBuffer(bytes).trim();      
     }
     
     /**
      * 將一個base64轉換成圖片保存在  path文件夾下  ,命名隨機
      * @param base64String
      * @param path  是一個文件夾路徑
      * @param imgName 圖片名字(沒有後綴)
      * @throws Exception
      */
     public static String savePictoServer(String base64String,String path)throws Exception{
        
         BASE64Decoder decoder = new BASE64Decoder();
         //要把+在上傳時變成的空格再改成+
         base64String = base64String.replaceAll(" ", "+");
         //去掉「data:image/png;base64,」後面纔是base64編碼,去掉以後才能解析
         base64String = base64String.replace("data:image/png;base64,","");
         //在本地指定位置創建文件夾,path由控制檯那邊進行定義
         String realPath = path+"/"+"echarts";
         File dir=new File(realPath);
         if(!dir.exists()){
          dir.mkdirs();
         }
         String fileName=path+"\\"+"echarts"+"\\"+UUID.randomUUID().toString()+".png";
         try {  
             byte[] buffer = decoder.decodeBuffer(base64String);  
             OutputStream os = new FileOutputStream(fileName);
             for(int i =0;i<buffer.length;++i){
                 if(buffer[i]<0){//調整異常數據
                     buffer[i]+=256;
                 }
             }
             os.write(buffer);  
             os.close();  
         } catch (IOException e) {  
             throw new RuntimeException();  
         }  
        
        return fileName;
     }
     /**
      * 讀取圖片在本地存儲的位置
      * @param imgFile
      * @throws Exception
      */
     public String getImageStr(String imgFile) {  
            InputStream in = null;  
            byte[] data = null;  
            try {  
                in = new FileInputStream(imgFile);  
                data = new byte[in.available()];  
                in.read(data);  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            BASE64Encoder encoder = new BASE64Encoder();  
            return encoder.encode(data);  
        } 
}

三、最後一步就是控制檯方法如何處理圖片導出到word了,參照上一篇文章的第三步echarts

到這裏個人freemaker導出word系列就分享完畢咯。dom

感謝各位看官的閱讀,本仙女是帥帥的玉米,有什麼問題請留言哦,以爲有用的請賞賜個贊!!工具

相關文章
相關標籤/搜索