700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java后台生成echarts图表并保存图片

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

时间:2020-10-30 07:39:53

相关推荐

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); // \r\n即为换行out.flush(); // 把缓存区内容压入文件out.close(); // 最后记得关闭文件} catch (IOException e) {e.printStackTrace();}return dataPath;}}

第三部分echarts-convert.js

PhantomJS工具

链接:/s/1NX9pf77SlEtU_QdKMn3_Ow

提取码:wli7

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。