前端将DOM元素导出为图片

前端工作中经常会用到把一些元素导出,比如表格,正好项目有遇到导出为excel和导出为图片,就都封装实现了一下,以供其他需求的开发者使用:在这里插入图片描述

1.导出为文档

这个说白了就是下载的功能,传过去检索参数,按照结果下载下来,没啥说的,先上伪代码

  ....then(blob => {// 创建一个临时的URL,用于下载文件console.log("blob", blob)const url = window.URL.createObjectURL(new Blob([blob]));const link = document.createElement('a');link.href = url;link.setAttribute('download', `${xxx}.xls`);  //设置文件名字document.body.appendChild(link);link.click();document.body.removeChild(link);success()   //callbackdialog.close()  //close modal}).catch((err) => {})

记得请求添加 responseType: ‘blob’,或者headers设置Accept:‘application/vnd.ms-excel’

2.导出为图片

先说一下最终的方案,最后使用了html2canvas的方案,后面我会说一下我的实现思路

  // let element = 'ant-table'const table = document.querySelector('.xxx-table'); console.log("table :", table )html2canvas(table , { scale: 1 }).then(canvas => {  //scale是图片大小const dataUrl = canvas.toDataURL('image/png');const link = document.createElement('a');link.href = dataUrl;link.download = 'table.png';link.click();});

如果一个页面导出多个相同的元素,比如一个页面有2个table,将上方传入html2canvas的参数的table换成secondTable即可,如下

var tables = document.getElementsByClassName('ant-table');
var secondTable = tables[1]

多个元素是不能使用querySelector了, 因为querySelector只能选择单个元素,这里需要用其他的元素选择器,最好是class或者tagname等.

再先说一下我一开始实现的思路

  1. 一开始我用的是原生的canvas,创建canvas画布,设置大小等,
  2. 选择目标元素并cloneNode(true)深度拷贝目标节点下的全部后代元素
  3. 渲染元素到画布: 使用drawImage方法将克隆元素渲染到画布上。
  4. 元素被渲染到画布上后就可以使用toDataURL方法将画布内容导出为图片。
const imageUrl = canvas.toDataURL('image/png');

最后创建链接节点,自动点击,移除节点:

const downloadLink = document.createElement('a');
downloadLink.href = imageUrl;
downloadLink.download = 'element-image.png';
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);

这种方案肯定是正常的一个思路,但是一直报cloneNode()函数有问题,undefined还是找不到,不记得了,我以为不支持这个es比较新的函数,其实想解决还是可以,用原生非方法递归子节点和节点元数据。 另外还报canvas的问题。
项目太赶了,我直接pass了,使用了html2canvas的方案,有兴趣的可以去试试。

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

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

相关文章

超分辨重建——SRGAN网络训练自己数据集与推理测试(详细图文教程)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…

计算机视觉与模式识别实验2-1 角点检测算法(Harris,SUSAN,Moravec)

文章目录 🧡🧡实验流程🧡🧡Harris算法SUSAN算法Moravec算法 🧡🧡全部代码🧡🧡 🧡🧡实验流程🧡🧡 Harris算法 Harris算法实现步骤&…

如何快速定位到影响mysql cpu飙升的原因——筑梦之路

通常我们只需要执行show processlist 进行查看,一般执行时间最长的SQL八九不离十就是罪魁祸首,但当show processlist的输出有近千条,那么很难第一眼就发现有问题的SQL,那么如何快速找到呢?其实也非常简单。我们知道mys…

JS面试题:什么是原型和原型链

一、原型 函数都有prototype属性,称之为原型,也称为原型对象原型 1.可以放一些属性和方法,共享给实例对象使用 2.原型可以做继承 二、原型链: 对象都有proto 属性,这个属性指向它的原型对象,原型对象也是对也有 proto 属性,指向原型对象的原型对象,这样一…

论文摘要一般要写些什么内容?

论文摘要通常需要包含以下几个关键内容: 研究背景与目的:简要介绍研究的背景信息,包括研究领域的重要性、当前的研究现状以及存在的问题。然后,清晰地阐述研究的目的、研究问题或研究假设,让读者明白研究的出发点和意图…

推荐一个图片识别的llama3微调版本 清华面壁项目

水一篇: MiniCPM-V是面向图文理解的端侧多模态大模型系列。该系列模型接受图像和文本输入,并提供高质量的文本输出。自2024年2月以来,我们共发布了4个版本模型,旨在实现领先的性能和高效的部署,目前该系列最值得关注的…

工业4.0利器:MES系统

工业4.0利器:MES系统 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,…

Java如何实现pdf转base64以及怎么反转?

问题需求 今天在做发送邮件功能的时候,发现邮件的附件部分,比如pdf文档,要求先把pdf转为base64,邮件才会发送。那接下来就先看看Java 如何把 pdf文档转为base64。 两种方式,一种是通过插件 jar 包的方式引入&#xf…

英语学习笔记31——Where‘s Sally?

Where’s Sally? Sally在哪? 词汇 Vocabulary garden /ˈɡɑːrdn/ n. 花园,院子(属于私人) 区别:park n. 公园(公共的) 例句:我的花园非常大。    My garden is very big. 搭…

【linux-imx6ull-设备树点灯】

目录 1. 设备树简介1.1 编译-引用1.2 设备树文件结构1.3 设备树节点介绍1.3.1 特殊节点chosen 1.4 节点内容追加 2. 设备树常用OF操作函数2.1 节点寻找类2.2 属性提取类2.3 其它常用类 4. 设备树下LED实验4.1 实验简介4.2 添加LED设备节点4.3 获取设备节点并提取属性4.3.1 获取…

深度学习-05-反向传播理论知识

深度学习-05-反向传播理论知识 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

java面试题及答案2024,java2024最新面试题及答案(之一)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Ja…

03_03_初识SpringAOP和应用

一、SpringAOP的初识与原理 1、概述 AOP:面向切面编程OOP:面向对象编程面相切面编程:是基于OOP基础之上的新编程思想,OOP面向的主要是对象是类,而AOP面向的主要对象是切面,它在处理日志、安全管理、事务管…

结账和反结账

结账与反结账功能在财务软件和会计系统中扮演着重要的角色,以下是关于这两个功能的详细解释: 一、结账功能 结账功能是计算和结转各个会计科目本期发生额和期末余额的过程,同时标志着一定时期内财务活动的结束和财务数据的固化。结账功能的…

C语言 链表经典OJ题

链表经典OJ题 移除链表元素链表的中间节点反转链表合并两个有序链表分割链表 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head […

python小练习03

1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…

lua vm 二: 查看字节码、看懂字节码

本文讲一讲如何查看 lua 的字节码&#xff08;bytecode&#xff09;&#xff0c;以及如何看懂字节码。 以下分析基于 lua-5.4.6&#xff0c;下载地址&#xff1a;https://lua.org/ftp/ 。 1. 查看字节码 1.1 方法一&#xff1a;使用 luac luac 是 lua 自带的编译程序&#x…

MySQL(三) - 基础操作

一、索引 由于我们在使用数据库的时候&#xff0c;大部分操作的都是查询操作&#xff0c;但是我们每一次进行查询都需要遍历一遍表中所有数据&#xff0c;这会花费O(n)的时间&#xff0c;因此数据引入了“索引” 也就是在底层使用了数据结构来进行优化查询的操作&#xff0c;但…

【TB作品】MSP430F149单片机,广告牌,滚动显示

LCD1602滚动显示切换播放暂停字符串 显示Public Places 显示No Smoking 播放 暂停 部分代码 char zifu1[] "Public Places "; char zifu2[] "Class Now "; char zifu3[] "No admittance "; char *zifu[] { zifu1, zifu2, zifu3 }…

优思学院|客户质量工程师CQE岗位的未来发展,你怎么看?

在现代工业的发展背景下&#xff0c;客户质量工程师&#xff08;CQE&#xff09;正逐渐成为企业质量管理体系中的关键角色。随着全球化和数字化的不断推进&#xff0c;CQE的职责不仅限于传统的质量控制&#xff0c;更包括了质量管理体系的设计和优化、客户关系的管理、以及在整…