歡迎您光臨本站 註冊首頁

Java後臺批量生產echarts圖表並保存圖片

←手機掃碼閱讀     kyec555 @ 2020-06-08 , reply:0

一個圍繞統計分析功能的系統,在最後製作統計分析時需要一個批量點擊的功能,用以批量製作echarts圖形後生成圖片並保存圖形和圖片。方便後續導出。

  public class EchartsUtils {    private static final String JSpath = "C:echarts-convertecharts-convert1.js";          public static void main(String[] args) {      String imgName = "D:/平臺/tes" + UUID.randomUUID().toString().substring(0, 4) + ".png ";      String option = "{xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [820, 932, 901, 934, 1290, 1330, 1320],type: 'line'}]}";      //String options = "test";      String base64Img = generateEChart(option,1600,900);      System.out.println(base64Img);    }          public static String generateEChart(String options,int width,int height) {         String fileName= "test-"+UUID.randomUUID().toString().substring(0, 8) + ".png";      String imgPath = "D:/平臺/img/" +fileName;         String dataPath = writeFile(options);//數據json      try {        File file = new File(imgPath);   //文件路徑(路徑+文件名)        if (!file.exists()) {  //文件不存在則創建文件,先創建目錄          File dir = new File(file.getParent());          dir.mkdirs();          file.createNewFile();        }        String cmd = "phantomjs " + JSpath + " -infile " + dataPath + " -outfile " + imgPath + " -width " + width + " -height " + height;        System.out.println(cmd);        Process process = Runtime.getRuntime().exec(cmd);        BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));        String line = "";        while ((line = input.readLine()) != null) {          //System.out.println(line);        }        input.close();      } catch (IOException e) {        e.printStackTrace();      }finally{        String base64Img = ImageToBase64(imgPath);           //deleteFile(imgPath);        //deleteFile(dataPath);        return base64Img.replaceAll("s*", "");      }    }       public static String writeFile(String options) {      String dataPath="D:/平臺/data/data"+ UUID.randomUUID().toString().substring(0, 8) +".json";      try {        /* 寫入Txt文件 */        File writename = new File(dataPath); // 相對路徑,如果沒有則要建立一個新的output.txt文件        if (!writename.exists()) {  //文件不存在則創建文件,先創建目錄          File dir = new File(writename.getParent());          dir.mkdirs();          writename.createNewFile(); // 創建新文件        }        BufferedWriter out = new BufferedWriter(new FileWriter(writename));        out.write(options); //   即為換行        out.flush(); // 把緩存區內容壓入文件        out.close(); // 最後記得關閉文件      } catch (IOException e) {        e.printStackTrace();      }      return dataPath;    }       /**     * 圖片文件轉為base64     * @param imgPath     */    private static String ImageToBase64(String imgPath) {      byte[] data = null;      // 讀取圖片字節數組      try {        InputStream in = new FileInputStream(imgPath);        data = new byte[in.available()];        in.read(data);        in.close();      } catch (IOException e) {        e.printStackTrace();      }      // 對字節數組Base64編碼      BASE64Encoder encoder = new BASE64Encoder();      // 返回Base64編碼過的字節數組字符串      return encoder.encode(Objects.requireNonNull(data));    }       /**     * 刪除文件     *     * @param pathname     * @return     * @throws IOException     */    public static boolean deleteFile(String pathname){      boolean result = false;      File file = new File(pathname);      if (file.exists()) {        file.delete();        result = true;        System.out.println("文件已經被成功刪除");      }      return result;    }  }

 

  因為是需要保存base64圖片。所以在生成並讀取完畢後將圖片刪除。

  附上圖片轉base64方法:

  /**   * 圖片文件轉為base64   * @param imgPath   */  private static String ImageToBase64(String imgPath) {    byte[] data = null;    // 讀取圖片字節數組    try {      InputStream in = new FileInputStream(imgPath);      data = new byte[in.available()];      in.read(data);      in.close();    } catch (IOException e) {      e.printStackTrace();    }    // 對字節數組Base64編碼    BASE64Encoder encoder = new BASE64Encoder();    // 返回Base64編碼過的字節數組字符串    return encoder.encode(Objects.requireNonNull(data));  }

 

轉換後的編碼沒有頭,需要在保存時手動添加“data:image/png;base64,”

                                                       

   


[kyec555 ] Java後臺批量生產echarts圖表並保存圖片已經有269次圍觀

http://coctec.com/docs/java/show-post-237492.html