SptingBoot基于Echarts生成折线图,柱状图。看完必会,超详细~~

news/2024/5/3 10:38:20/文章来源:https://blog.csdn.net/qq1328585964/article/details/127124004

SptingBoot基于Echarts生成折线图,柱状图

    • 前言
    • 用到的技术与开源代码
    • 1.PhantomJS
    • 2.Echartsconvert 开源项目
    • 2.SpringBoot实现统计图生成
        • 1.pom.xml重要依赖
        • 2.图片数据模板
        • 3.JAVA代码
    • 结尾

前言

近期产品团伙给了一个生成PDF数据报的需求,PDF中需要生成折线图,梯状折现图,柱状图等需求以及一些表格信息的东西,我这边就去找到前端开发工程师,但是前端工程师并没有好的方案给出,于是乎就由后台开发来生成图片,并写入PDF中。

下面我把我生成统计图的方法(大部分参考+整合)写成文章,需要的兄弟姐妹们可以参考和纠正我

用到的技术与开源代码

  • Echarts(官方示例地址)
  • Echartsconvert (Gitee)
  • PhantomJS(官方下载)

1.PhantomJS

PhantomJS是一个不需要浏览器的富客户端。

官方介绍:PhantomJS是一个基于 WebKit 的服务器端JavaScript API。它全面支持web而不需浏览器支持,支持各种Web标准:DOM处理,CSS选择器, JSON,Canvas,和SVG。
PhantomJS常用于页面自动化,网络监测,网页截屏,以及无界面测试等。

我们可以这么理解:PhantomJS是一个无界面、可运行脚本的谷歌浏览器

下面我们来进行下载与操作:

  1. PhantomJS(官方下载),我们进入官网下载对应的最新版本,后解压就可以使用了
  2. 解压后我们需要配置环境变量
    在这里插入图片描述
    右键我的电脑->属性->高级系统设置->高级系统设置->环境变量->Path内新增C:\Users\litianqi\Desktop\phantomjs-2.1.1-windows\bin(这是我的安装解压文件bin地址
    下面我们就可以进行测试使用执行DOME
  3. 执行DOME JS

Hello, world

1.进入安装路径下examples文件夹
2.打开CMD黑窗口
3.输入 phantomjs hello.js
4.控制台输出Hello, world!

JS截屏
我自己这么叫他,下面看dome

1.创建pageload.js文件
2.写入内容:
"use strict";
var page = require('webpage').create();
page.open('https://www.baidu.com/', function () {page.render('baidu.png');phantom.exit();
});
3.打开CMD黑窗口,输入 <phantomjs phantomjs pageload.js> 运行文件
4.即可在同级目录下得到一张baidu.png的图片

这样就相当于,你拿谷歌浏览器打开了百度这个页面,然后截了一张图,并保存到你想保存的位置了~

大概的使用流程就是如此,这里简述案列,就不多赘述(文档里都有)~

2.Echartsconvert 开源项目

上面讲述了PhantomJS如何使用,下面我们就从Echarts官网使用JS截图的方式来获取我们想要的图片

  • Echartsconvert (Gitee)copy下来代码
    注意:因为该源码长期没有更新,script目率下echarts.min.js太过于老旧,无法支持目前Echarts的图形,请大家copy下代码后,更新替换其文件 。最新echarts.min.js下载传送门
    在这里插入图片描述
    其中echarts-convert.js就是我们要使用到的主C,这个Js就相当于帮我们去Echarts官方运行Dome->生成折线图/柱状图->保存到指定文件夹下
执行
生成
运行 echarts-convert.js
Echarts数据模板
图片

在这里插入图片描述
在这里插入图片描述
看看这些代码 有没有觉得很眼熟的感觉??

下面我们来使用PhantomJS运行这个echarts-convert.js

1.copy的项目下打开cmd黑窗口
2.执行 <phantomjs echarts-convert.js -s -p 6666>
3.黑窗口打印【echarts-convert server start success. [pid]=10364】表明启动成功

-s或–server:开启服务监听,如果开启服务端,则-o不生效,这也就意味不能使用脚本命令生成图片;
-p或–port:端口号,只有-s启用时生效,改变监听端口号;

2.SpringBoot实现统计图生成

1.pom.xml重要依赖

		<!--①--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.7</version></dependency>

【依赖①】freemarker是什么?FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。其原理如下图所示:
在这里插入图片描述
FreeMarker详细手册传送门

2.图片数据模板

在这里,我就用生成单折线图来做示例。
模板格式均可在 Echarts(官方示例地址)搜索。

{animation:false ,xAxis: {type: 'category',data: ${x}},yAxis: {type: 'value'},series: [{data: ${y0},type: 'line',color:'blue',},{data: ${y1},type: 'line',color:'green',}]
}

在这里插入图片描述
将模板放入项目资源目录中比较舒服~~

3.JAVA代码

DTO

@Data
public class ImageDataDto {/***标题**/private String title;/***X轴**/private List<String> x;/***y轴(多)**/private List<List<Double>> y = new ArrayList();
}

逻辑代码

public String linecreateImage(ImageDataDto dto) throws IOException, TemplateException {//新建Map装载数据HashMap<String, Object> data = new HashMap<>();data.put("x", JSON.toJSONString(dto.getX()));data.put("y0", JSON.toJSONString(dto.getY().get(0)));data.put("y1", JSON.toJSONString(ddto.getY().get(1)));//模板引擎String options = FreemarkerUtil.generateString("optionline.ftl", "/teplate", data);//文件夹路径String filePath = "";String name = filePath + UUID.randomUUID().toString() + ".png";// 文件输出到指定路径方法generateImage(EchartsUtil.generateEchartsBase64(options), name);return name;}private static void generateImage(String base64, String s) {//文件BASE64Decoder decoder = new BASE64Decoder();try (OutputStream out = new FileOutputStream(s)) {// 解密byte[] b = decoder.decodeBuffer(base64);for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {b[i] += 256;}}out.write(b);out.flush();} catch (IOException e) {e.printStackTrace();}}

FreemarkerUtil工具类

public class FreemarkerUtil {private static final String path = FreemarkerUtil.class.getClassLoader().getResource("").getPath();public static String generateString(String templateFileName, String templateDirectory, Map<String, Object> datas)throws IOException, TemplateException {Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);// 设置默认编码configuration.setDefaultEncoding("UTF-8");// 设置模板所在文件夹configuration.setDirectoryForTemplateLoading(new File(path + templateDirectory));// 生成模板对象Template template = configuration.getTemplate(templateFileName);// 将datas写入模板并返回try (StringWriter stringWriter = new StringWriter()) {template.process(datas, stringWriter);stringWriter.flush();return stringWriter.getBuffer().toString();}}
}

是的~到这里就已经完事了,不出意外你指定的文件夹下已经有生成的图片。
在这里插入图片描述

结尾

图片生成到文件夹中,就可以为我所用,比如我需要写入pdf中生成报告。。。。这里的demo只是简单的折线图,不过就可以满足很多人的需求,如果需要更复杂的去Echarts官网查找。
其实java后台生成这种统计图的需求是很少的~~
本人曾使用过jfreechart等其他统计图生成方案均不本文所介绍的理想,如果大家有什么更好用的,欢迎分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_23692.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL死锁排查步骤

系列文章目录 第一章&#xff1a;sql_mode模式 第二章&#xff1a;optimize table、analyze table、alter table、gh-ost 第三章&#xff1a;InnoDB MVCC原理 第四章&#xff1a;sql语句执行过程 第五章&#xff1a;Percona Toolkit工具简介 第六章&#xff1a;MySQL索引 第七…

TRC丨艾美捷TRC 波普瑞韦代谢物 M4说明书

艾美捷TRC 波普瑞韦代谢物 M4—丙型肝炎病毒 NS3 丝氨酸蛋白酶抑制剂 Boceprevir (B675500) 的代谢物。 艾美捷TRC 波普瑞韦代谢物 M4化学性质&#xff1a; 目录号B674520 化学名称波普瑞韦代谢物 M4 同义词(1R,2S,5S)-3-[(2S)-2-[[[[1,1-二甲基乙基]氨基]羰基]氨基]-3,3-二…

【C++笔试强训】第四天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…

【Day28】力扣算法(超详细思路+注释) [1790. 仅执行一次字符串交换能否使两个字符串相等 ] [328. 奇偶链表 ][148. 排序链表]

刷题打卡&#xff0c;第 二十八 天题目一、1790. 仅执行一次字符串交换能否使两个字符串相等题目二、328. 奇偶链表题目三、148. 排序链表题目一、1790. 仅执行一次字符串交换能否使两个字符串相等 原题链接&#xff1a;1790. 仅执行一次字符串交换能否使两个字符串相等 题目…

消息队列的一些思考

前言 像我们Feign进行服务远程调用就会出现上述情况&#xff0c;服务调用是同步的&#xff0c;需要保证整个链路成功执行完才能成功下单&#xff0c;需要考虑网络抖动等影响&#xff0c;还有雪崩的现象——>同步通信会产生不稳定的影响导致用户体验较差 (41条消息) Dubbo_…

【前端笔试之输入输出问题汇总】系列1

1、题目1&#xff1a;涉及到new Array()以及map方面的一些特性 const array new Array(5).map((item) > {return item {name: 1} }) console.log(array)//[empty*5]一般我们认为会输出[name,name,name,name,name]。但是输出的却是empty。 因为new Array(5)生成的数组在每…

CAD导入Revit缺少东西原因-Revit中如何批量导出CAD图纸

一、CAD导入Revit缺少东西原因汇总 在Revit中导入CAD进行模型搭建是建模过程中常用的方法&#xff0c;但是有时会遇到导入的CAD缺少东西的情况&#xff0c;下面介绍几种导致这种问题的原因 1.CAD导入的时候&#xff0c;不是设置为全部可见。 CAD导入Revit中时&#xff0c;“图层…

护眼灯色温多少对眼睛好?推荐色温4000K暖白光的护眼灯

色温就是指温度的颜色&#xff0c;通常人眼所见的光线&#xff0c;由7中色光的光谱所组成&#xff0c;而护眼灯的光源越接近自然光就越好&#xff0c;一般要求色温在4000K左右比较合适&#xff0c;灯光为暖黄光&#xff0c;既温馨有符合相应的亮度&#xff0c;可以起到很好保护…

ROS2在ROS1 的基础的改进点

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、为什么要推出ROS2【重构ROS1】二、ROS1存在的问题三、ROS1与ROS2架构对比四、ROS2新概念例举五、ROS安装版本&#xff08;…

【SpringCloud学习笔记】Feign

Feign 的使用 什么是Feign Feign是声明性的web服务客户端。它使编写web服务客户端更加容易&#xff0c;它封装类Ribbon和RestTemplate Feign vs OpenFeign 1、Feign是Netflix公司写的&#xff0c;是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端&#xff0c;是Spring…

C/C++里危险的宏(Macro)

#define SQUARE(x) x*x 上述宏定义SQUARE(x)用于求“参数”x的平方&#xff0c;这个宏很容易被使用者误认为是函数。宏是由预处理器处理的&#xff0c;它有着函数的形式却没有函数调用的代价。我们不建议初学者使用宏&#xff0c;因为使用宏的收益远不足以抵消其带给初学者的风…

基于本地存储LVM新建虚机方案

文章目录基于本地存储LVM新建虚机方案date: 2021/12/22auth: mmwei3一、环境信息如下&#xff1a;二、需求方案&#xff1a;1、虚机(卷启动)系统盘数据盘 三者在同一计算节点。2、虚机可以挂本计算节点的数据盘也可以挂载其他计算节点的数据盘。3、虚机可以使用本节点上的HDD做…

大数据必学Java基础(七十六):创建线程的三种方式

文章目录 创建线程的三种方式 一、继承Thread类 二、实现Runnable接口 三、实现Callable接口 创建线程的三种方式 一、继承Thread类 在学习多线程之前&#xff0c;以前的代码是单线程的吗&#xff1f; 不是&#xff0c;以前也是有三个线程同时执行的。 现在我想自己制造…

《单元测试》Junit5入门教程——非常详细,入门即精通

本文为在霍格沃兹测试开发学社中学习到的一些技术&#xff0c;写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ 单元测试-Junit5入门教程一、添加Junit5依赖二、Junit5 常用注解2.1、Test2.2、BeforeAll2.3、AfterAll2.4、BeforeEac…

JavaWeb学习5:Maven

Maven的学习为什么要学习这个技术?在javaweb开发中,需要使用大量的jar包,这种jar包需要手动的导入 如何让一个东西自动导入和配置jar包 所以Maven诞生了maven就是一个架构管理工具 1、Maven项目架构管理工具 Maven的核心思想:约定大于配置,有约束,不要去违反。 Maven会规…

做过的题

菜就多练 主要记录的是 dp 题(因为大部分都不会),还有一些思维题,还有一些 tricks,还有一些模板类的题。 CF533B Work Group 简要题意: 给定一棵树,要求选定一些点加入点集,使得这些点的权值和最大,且对于点集中的任意一个点,其子树中恰有奇数个点(可能包括它本身)…

(附源码)计算机毕业设计SSM基于java的云顶博客系统

&#xff08;附源码&#xff09;计算机毕业设计SSM基于java的云顶博客系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

easyrecovery数据恢复软件15版本功能介绍

easyrecovery恢复文件介绍 easyrecovery是一款功能非常强大的数据恢复软件&#xff0c;不仅能够恢复手机等终端被删除的文件&#xff0c;还可以恢复从硬盘上删除的文件&#xff0c;而且操作非常简单&#xff0c;下面就跟着小编一起来看一下吧。 easyrecovery可以恢复任何被从…

为了不手动命名驼峰变量名,我开发了一套油猴脚本...

前言 你知道程序员最经常做的事是什么吗&#xff1f;是取变量名&#xff01; 我们常规取变量名的方式是这样的&#xff0c;打开谷歌搜索或者有道搜索&#xff0c;输入变量的中文名&#xff0c;然后复制翻译结果&#xff0c;转到编译器改为驼峰命名&#xff0c;大致流程如下&a…

(外观检测图像增强)阿丘科技AQCV1.0 计算视觉库

阿丘科技计算视觉库 AQCV 专为开发人员的工业机器视觉应用而设计&#xff0c;有较强的灵活性。AQCV 允许开发 人员能够高效开发项目需要的程序&#xff0c;可以配合AIDI&#xff0c;为实际检测应用赋能。 基础图像处理:滤波、几何变换、极坐标展开 特征分析:Blob分析、轮廓分析…