DHTMLX Gantt 甘特图导出全数据图-----自实现方式过程记录
针对上一篇DHTMLX Gantt甘特图导出全数据图,使用官方提供的方法虽然很方便,也免费,但每次生成图片的时候需要访问下:export.dhtmlx.com的相关授权接口,这对我们的项目如果是在内网(不能联网访问外网的情况)非常不友好,也就无法使用官方的方式了。
那么如果尽量能实现同等的效果,并且不依赖于任何外部网络资源的情况,可以实现吗?可以,就是过程有些多,有些CSS效果需要不断调试。
主要过程如下:
html部分修订:
在原文件button区域追加一个导出按钮,用于触发测试图片导出:
1 <input value="导出-新测试" type="button" class="layui-btn layui-btn-green" style="margin-left: 5px;width: 4%;"
2 onclick='newExport()' />
css部分修订:
将甘特图所在的父级div以及甘特图本身的div css关于width和height修订:----【核心】
1 .con-3 {
2 min-width: 1500px;
3 min-height: 75vh;
4 background-color: white;
5 border-radius: 4px;
6 height:auto;
7 }
8
9 #gantt_here{
10 min-width: 99vw;
11 min-height: 66vh;
12 height:auto;
13 width: auto;
14 }
javascript部分修订:
让进度条上文本显示为空格,避免会自动显示【工作描述】内容:
1 gantt.templates.task_text = function (start, end, task) {
2 return " ";
3 };
修订左侧列宽配置,尽量保证左侧列信息全显示:
1 gantt.config.columns = [
2 {
3 name: "text", label: "工作描述", tree: true, width:"*", resize: true,
4 },
5
6 {
7 name: "progress", label: "进度", align: "center",width: 50, resize: true,
8 template: obj => (Math.round(obj.progress * 100)).toString() + '%'
9 },
10
11 { name: "start_date", label: "开始日期", align: "center",width: 75,resize: true },
12 {
13 name: "end_date", label: "结束日期", align: "center",width: 75,resize: true,
14
15 //20250211 针对进度条图形追加+1天显示后,任务结束日期列的值也被加1天显示的问题(应该显示数据库给的原始结束日期文本)优化修复
16 template: function (task) {
17 // 返回任务的原始结束日期
18 return task.original_end_date ? gantt.date.date_to_str("%Y-%m-%d")(task.original_end_date) : "";
19 }
20 },
21 {
22 name: "duration", label: "工期(天)", align: "center",width: 55,resize: true,
23 template: function (task) {
24 // 如果duration是null或undefined,返回0
25 return (task.duration || 0) + 1; // 在当前duration的基础上加1
26 }
27 },
28 {
29 name: "username", label: "责任人", align: "center",width: 55, resize: true
30 },
31 ];
修订layout布局配置(必须给一个固定写死的width,没办法,它无法根据内容多少自定义变宽。
即时你设置width,gantt自身会设定一个较大的宽度值):
gantt.config.layout = {
css: "gantt_container",
cols: [
{
width:800,
rows: [
{ view: "grid", scrollX: "gridScroll", scrollable: true, scrollY: "scrollVer" },
{ view: "scrollbar", id: "gridScroll", group: "horizontal" }
]
},
{ resizer: true, width: 1 },
{
rows: [
{ view: "timeline", scrollX: "scrollHor", scrollY: "scrollVer"},
{ view: "scrollbar", id: "scrollHor", group: "horizontal" }
]
},
{ view: "scrollbar", id: "scrollVer" }
]
};
设置右侧时间列的最小宽度(保证时间列的列标题能完整显示,
结合实际列标题数据不断CSS调试得出宽度值)
gantt.config.min_column_width = 65;
修改初始右侧时间列区域显示的数据层级为week(为的初始效果好看些,周数据多一些能充满区域,
要是年或月的化有可能充不满右侧区域,只是为了用户体验做了调整)
gantt.ext.zoom.setLevel("week");
取消甘特图的xy轴的滚动条----【核心】
gantt.config.autosize = "xy";
编写自定义的导出甘特图图片方法----【核心】 (导出全部数据图片,需要CSS设置甘特图显示区域取消滚动条,
宽高auto(上面已写),并且还需要上一步的“取消甘特图的xy轴的滚动条配置”(上面已写))
1 function newExport() {
2 // 前提还需要设置取消滚动条的显示
3 const originalDiv = document.getElementById('gantt_here');
4 // 创建克隆元素
5 const clone = originalDiv.cloneNode(true);
6
7 // 将克隆元素的样式设置为适合导出
8 clone.style.width = "auto"; // 设置为自动宽度以显示完整内容
9 clone.style.height = "auto"; // 设置为自动高度以显示完整内容
10 clone.style.overflow = "visible"; // 确保内容不会被截断
11 clone.style.position = "absolute"; // 将元素从文档流中移除
12
13 // 把克隆元素添加到文档中以供导出
14 document.body.appendChild(clone);
15
16 // 使用 HTML2Canvas 导出克隆元素
17 html2canvas(clone).then((canvas) => {
18 const link = document.createElement('a');
19 link.href = canvas.toDataURL('image/png');
20 link.download = 'gantt_here.png'; // 图片名称
21 link.click();
22
23 // 导出后移除克隆元素
24 document.body.removeChild(clone);
25 });
26 }
完成以上过程即可导出完整甘特图图片。
结果图>>
导出图片前部分网页浏览效果:


后续根据需要,也可以研究导出excel和导出pdf的功能。
DHTMLX Gantt 甘特图导出全数据图-----自实现方式过程记录的更多相关文章
- 甘特图dhtmlx Gantt入门
(以下截图来自别人的博客,来源地址已经忘记了,若后期找到会补充上来!) API地址:https://docs.dhtmlx.com/gantt/desktop__guides.html,这是英文的网页 ...
- C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图
C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图 +BIT祝威+悄悄在此留下版了个权的信息说: 最近需要用OpenGL绘制文字,这是个很费时费力的事.一般的思路就是 ...
- mysql快速导出数据库ER图和数据字典(附navicat11安装教程及资源)
♣ mysql使用navicat11快速导出数据库ER图 ♣ mysql使用navicat11快速导出数据库数据字典 ♣ navicat11 for mysql (这里是mysql5.7.12)专业版 ...
- Matlab从一系列图片导出AVI视频,导出GIF动图
平台:Win7,Matlab 2014a 从一系列图片导出AVI视频的M代码如下: clear all; % 清除变量 % 官方示例,命令窗口输入“doc VideoWriter” writerObj ...
- highCharts的多图导出
已实现HighChart的多图导出,不能上传文件,所以需要call我735734485.
- 可以把思维导图导出为word文档方便其他人查看吗?
MindManager除了强大的大纲视图编辑功能外,还拥有多种导出格式,方便大家迅速导出文件,在团队中分享自己的观点,提高团队的工作效率,本次小编使用的思维导图软件版本是MindManager 202 ...
- Tableau绘制漏斗图、甘特图、瀑布图、镶边面积图、阴影坡度图
Tableau绘制漏斗图.甘特图.瀑布图.镶边面积图.阴影坡度图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. 漏斗图 数据源 1.1 分色直条漏斗图 (1) ...
- 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...
- (转)Unity3D 游戏贴图(法线贴图,漫反射贴图,高光贴图)
原帖网址http://www.u3dpro.com/read.php?tid=207 感谢jdk900网友的辛苦编写 我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图 ...
- UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...
随机推荐
- 洛谷 P6625 [省选联考 2020 B 卷] 卡牌游戏
洛谷 P6625 [省选联考 2020 B 卷] 卡牌游戏 题目传送门 Solution 每次操作的得分都是一个前缀和,即每次的得分为\(p=\sum_\limits{i=1}^ka_i(2\le k ...
- veRL代码阅读-1.论文原理
总览 主要以PPO为基础来学习VeRL的整体训练流程. 在PPO里主要有4个模型: Actor Model: 要训练的目标模型. Critic Model: 用于在RL训练中评估总收益, 在训练过程中 ...
- el-popover无法弹出的问题解决
1.不能再el-popover上⾯使⽤v-if进⾏显⽰隐藏,应该⽤v-show2.在每⼀个el-popover上都增加⼀个ref确定每个el-popover都是唯⼀的,:ref="`node ...
- 适用于编程小白的Python学习01:Pandas初探
什么是Python虚拟环境? Python虚拟环境是一个独立的.隔离的Python运行环境,它允许你为每个项目安装独立的库和依赖项,而不会与系统中其他Python项目或全局Python环境发生冲突,从 ...
- vscode GDB远程调试安卓
如果是比较新的android ndk的版本,建议使用lldb进行调试,参考:vscode lldb远程调试 - OpenFDE - OpenFDE Docs,将lldbserver push到移动端, ...
- nginx代理https、wss配置、wss流式配置
使用nginx代理实现 https.wss的代理,对于nginx版本自行寻找对应的版本,有x86和arm的版本,但是配置文件是通用的,config目录下的nginx.conf 下面是简单对此conf文 ...
- SQL server 获取各种 约束信息
https://bbs.csdn.net/topics/380103485 --获取约束信息 select * from information_schema.constraint_column_ ...
- java基础--List
List基本属性和方法移步官方文档: List (Java Platform SE 8 ) 1.处理最简单的List<String>: (1)并集.交集.差集 并集: 如果只用List.a ...
- 使用 cursor 来 review 代码
使用 cursor 来 review 代码 前言 code review review 单个文件 针对提交进行 code review 总结 使用 cursor 来 review 代码 前言 curs ...
- vue的keep-alive,后台播放音乐?
vue的keep-alive,是否能做到后台播放音视乐? 答案当然是不能. 因为处于失活状态的组件,其真实dom已经从页面移除了,只将其存放到了内存中. dom都不存在了,还播放啥. 能做什么? 顶多 ...