java后台生成echarts图表并保存图片 - Go语言中文社区

java后台生成echarts图表并保存图片


需求:每天,每个月1号定时给用户发送邮件,邮件的内容是echarts的图片,这些全部都是定时器触发的,在后台生成echarts图片并保存到服务器,然后在发送邮件

  网上其实已经有很多很多案例和方案解释,但有些是错误,或者不能满足我的需求.

   1,支持echart4.0最新版本.

   2,  支持上万条数据.网上只能查询几百条 然后拼接在cmd 命令中 而我采用java生成的optons  json数据写成文件.把文件地址拼装在cmd中

js去读文件.

 

 3.下面会给出完整源码

 

4.效果图

 

 

第一步:java后台拼接option

 

 第二步:使用Java传cmd命令调用 PhantomJS生成echarts图片  (测试方法中option 是写死.)

贴出部分源码:


public class EchartGenerate {

    private static final String JSpath = "C:\echarts-convert\echarts-convert1.js";
    private static final Logger logger = Logger.getLogger(ReportUtils.class);


    public static void main(String[] args) {
        String imgName = "E:/temp/Echart/tes" + UUID.randomUUID().toString().substring(0, 4) + ".png ";
        String optiona = "{"title":{"text":"电流图","subtext":"电流图","x":"left"},"toolbox":{"feature":{"saveAsImage":{"show":true,"title":"保存为图片","type":"png","lang":["点击保存"]}},"show":true},"tooltip":{"trigger":"axis"},"legend":{"data":["邮件营销","联盟广告","视频广告"]},"xAxis":[{"type":"category","boundaryGap":false,"data":["周一","周二","周三","周四","周五","周六","周日"]}],"yAxis":[{"type":"value"}],"series":[{"name":"邮件营销","type":"line","stack":"总量","data":[120,132,101,134,90,230,210]},{"name":"联盟广告","type":"line","stack":"总量","data":[220,182,191,234,290,330,310]},{"name":"视频广告","type":"line","stack":"总量","data":[150,232,201,154,190,330,410]}]}";
        //String options = "test";
        Map<String,Object> resultMap=new HashMap<>();

        generateEChart(optiona, resultMap);

    }


    public static String generateEChart(String options, Map<String,Object> resultMap) {
        String dataPath = writeFile(options);
        String fileName= "test-"+UUID.randomUUID().toString().substring(0, 8) + ".png";
        String path = "D:/temp/Echart/" +fileName;
        try {
            File file = new File(path);     //文件路径(路径+文件名)
            if (!file.exists()) {   //文件不存在则创建文件,先创建目录
                File dir = new File(file.getParent());
                dir.mkdirs();
                file.createNewFile();
            }
            String cmd = "phantomjs " + JSpath + " -infile " + dataPath + " -outfile " + path;
            Process process = Runtime.getRuntime().exec(cmd);
            BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = "";
            while ((line = input.readLine()) != null) {
                logger.info(line);
            }
            input.close();

        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            return path;
        }
    }

    public static String writeFile(String options) {
        String dataPath="D:\chartData\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); // rn即为换行
            out.flush(); // 把缓存区内容压入文件
            out.close(); // 最后记得关闭文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        return dataPath;
    }
}

第三部分 echarts-convert.js

PhantomJS工具

 

 链接:https://pan.baidu.com/s/1NX9pf77SlEtU_QdKMn3_Ow 
提取码:wli7 
 

如有疑问,可以加群快速交流.929090540

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zengyif_szu/article/details/81942799
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 18:21:59
  • 阅读 ( 1183 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢