将DOM结构转换成图片保存至本地或保存至剪切板

news2024/11/22 15:17:12

在新业务需求中,碰到这样一个场景,需要将后端返回的表格数据,保存至本地或者保存至剪切板,直接发送给用户使用。

1. 将内容转换成图片并保存至本地

1.1 交互效果

在这里插入图片描述
如图所示,想要点击复制按钮后,将下面这个图标转换成图片的形式,并保存至本地

1.2 实现代码

  • 下载插件库: yarn add html2canvas file-saver

html 页面设置

<el-button type="success" size="mini" @click="copyCharts">复制下面列表内容</el-button>

<el-table
	id="savethepage"
	...
>
...
</table>

js 实现逻辑

import html2canvas from 'html2canvas'
import { saveAs } from 'file-saver'

async copyCharts() {
    const element: any = document.querySelector('#savethepage')
    try {
      const canvas = await html2canvas(element)
      const imgUrl = canvas.toDataURL('image/png')
      const blob = await fetch(imgUrl).then(res => res.blob())
      saveAs(blob, 'screenshot.png')
    } catch (error) {
      console.error('Error:', error)
    }

	// 为确保操作,也可以使用让用户点击一下图表在进行保存,相当于一次内部才知道的确认操作
    // element.addEventListener('click', async () => {
    //   try {
    //     const canvas = await html2canvas(element);
    //     const imgUrl = canvas.toDataURL('image/png');
    //     const blob = await fetch(imgUrl).then(res => res.blob());
    //     saveAs(blob, 'screenshot.png');
    //   } catch (error) {
    //     console.error('Error:', error);
    //   }
    // });
  }

2. 将页面内容转换成图片并复制到剪切板

2.1 交互效果

在这里插入图片描述
如图所示,想要点击复制按钮后,将下面这个图标转换成图片的形式,并复制到剪切板,当使用粘贴功能时,可以通过Command + V的形式直接粘贴出该图片

2.2 实现代码

html 页面设置

<el-button type="success" size="mini" @click="copyCharts">复制下面列表内容</el-button>

<el-table
	id="savethepage"
	...
>
...
</table>

js 逻辑

import html2canvas from 'html2canvas'

async copyCharts() {
    const element: any = document.querySelector('#savethepage')
    try {
      const canvas = await html2canvas(element)
      console.log(canvas, '生成canvas对象')
      const imgUrl = canvas.toDataURL('image/png')
      const blob = await fetch(imgUrl).then(res => res.blob())
      await navigator.clipboard.write([
        new ClipboardItem({
          ['image/png']: blob
        })
      ])
    } catch (error) {
      console.error('Error:', error)
    }
  }

3. 实现逻辑及API使用

上述实现方式

  • 我们先是通过 html2canvas 将DOM元素转换成canvas画布
  • 之后使用canvas.toDataURL将canvas转换成base64图片地址
  • 再生成图片的blob信息
  • 通过blob信息进行图片保存至本地saveAs或剪切板navigator.clipboard.write

3.1 html2canvas

  • html2canvas是一款开源的JavaScript库,用于将HTML页面渲染成一个Canvas元素,可以将整个页面或者特定的DOM元素转换为图片。可以使用它生成图片,用于分享等功能。
  • 这种图片是根据DOM来的,我们可以将特定的DOM元素获取到,之后通过该API的处理,变成一张canvas画布

3.2 canvas.toDataURL

canvas.toDataURL(type, encoderOptions);

  • type:生成图片类型,默认是PNG格式,图片分辨率为96dpi
  • encoderOptions:范围 0~1,用来选定图片的质量,默认0.92,超出范围会自动被设置成默认值
  • 返回值是一个数据url,是base64组成的图片的源数据、可以直接赋值给图片的src属性。

3.3 Navigator.clipboard

剪贴板 Clipboard API 为 Navigator 接口添加了只读属性 clipboard,该属性返回一个可以读写剪切板内容的 Clipboard 对象。在 Web 应用中,剪切板 API 可用于实现剪切、复制、粘贴的功能。

如果有用,点个赞呗~

总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~

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

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

相关文章

simulink代码生成(六)——中断向量模块的配置

假如系统中存在多个中断&#xff0c;需要合理的配置中断的优先级与中断向量表&#xff1b;在代码生成中&#xff0c;要与中断向量表对应&#xff1b;中断相关的知识参照博客&#xff1a; DSP28335学习——中断向量表的初始化_中断向量表什么时候初始化-CSDN博客 F28335中断系…

x-cmd pkg | thefuck - 终端命令纠错工具

目录 简介首次用户功能特点规则和即时模式竞品和相关作品进一步阅读 简介 thefuck 是一个终端命令纠错工具&#xff0c;可以帮助您更正先前键入的错误命令。它能纠正绝大部分常见的命令错误&#xff0c;如命令拼写不对、输错命令等。 基本原理&#xff1a;获取您最近执行的一…

机器学习(三) -- 特征工程(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 未完待续…… 目录 系列文章目录 前言 三、特征…

基于PCA-WA(Principal Component Analysis-weight average)的图像融合方法 Matlab代码及示例

摘要&#xff1a; 高效地将多通道的图像数据压缩&#xff08;如高光谱、多光谱成像数据&#xff09;至较低的通道数&#xff0c;对提高深度学习&#xff08;DL&#xff09;模型的训练速度和预测至关重要。本文主要展示利用PCA降维结合weight-average的图像融合方法。文章主要参…

Vagrant安装虚拟机

Vagrant安装虚拟机 优点&#xff1a;操作简单方便 vagrant仓库提供已配置完成镜像系统&#xff0c;只需简单命令可迅速初始化运行虚拟机 一、安装virtualBox 官方网站&#xff1a;Oracle VM VirtualBox 如果虚拟机安装失败&#xff0c;可能计算机未开启CPU虚拟化 二、安装V…

md文件图片上传方案:Github+PicGo 搭建图床

文章目录 1. PicGo 下载2. 配置Github3. 配置PicGo4. PicGo集成Typora4.1 picGo监听端口设置 5. 测试 1. PicGo 下载 下载地址&#xff1a;https://molunerfinn.com/PicGo/ 尽量下载稳定版本 2. 配置Github 1. 创建一个新仓库&#xff0c;用于存放图片 2. 生成一个token&a…

不要告诉别人的passwd

文章目录 不要告诉别人的passwd修改或更新密码删除用户密码查看密码的状态更多信息 不要告诉别人的passwd passwd用于创建或者更新用户密码&#xff0c;是管理员必备的命令之一。 这个命令最终的实现是通过调用Linux-PAM 和Libuser API来实现的。 官方的定义为&#xff1a; …

简单工厂模式、工厂方法、抽象工厂模式

下面例子中鼠标&#xff0c;键盘&#xff0c;耳麦为产品&#xff0c;惠普&#xff0c;戴尔为工厂。 简单工厂模式 简单工厂模式不是 23 种里的一种&#xff0c;简而言之&#xff0c;就是有一个专门生产某个产品的类。 比如下图中的鼠标工厂&#xff0c;专业生产鼠标&#xf…

基于象群算法优化的Elman神经网络数据预测 - 附代码

基于象群算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于象群算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于象群优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

矩阵的乘法

首先矩阵的乘法定义如下&#xff1a; #include <stdio.h> int main() { int i 0; int j 0; int arr[20][20] { 0 }; int str[20][20] { 0 }; int s[20][20] { 0 }; int n1 0; int n2 0; int m2 0; int z 0; int m1 0;…

Oracle database 12cRAC异地恢复至单机

环境 rac 环境 byoradbrac Oracle12.1.0.2 系统版本&#xff1a;Red Hat Enterprise Linux Server release 6.5 软件版本&#xff1a;Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit byoradb1&#xff1a;172.17.38.44 byoradb2&#xff1a;172.17.38.4…

2023中国PostgreSQL数据库生态大会-核心PPT资料下载

一、峰会简介 大会以“极速进化融合新生”为主题&#xff0c;探讨了PostgreSQL数据库生态的发展趋势和未来方向。 在大会主论坛上&#xff0c;专家们就PostgreSQL数据库的技术创新、应用实践和生态发展进行了深入交流。同时&#xff0c;大会还设置了技术创新&云原生论坛、…

docker部署kibana

1&#xff0c;简介 官网 kibana 2&#xff0c;安装docker 参考 linux安装docker 3&#xff0c;准备 Kibana 配置文件 # 进入主节点配置文件目录 cd /export/server/docker/kibana/config # 编辑单机版配置文件 vi kibana.ymlkibana.yml内容 # 主机地址&#xff0c;可以是…

2024/1/7周报

文章目录 摘要Abstract文献阅读题目引言贡献相关工作Temporal RecommendationSequential Recommendation 方法Problem FormulationInput EmbeddingSelf-Attention StructureModel Training 实验数据集实验过程实验结果 深度学习Self-attention多头机制堆叠多层 总结 摘要 本周…

从0开始python学习-42.requsts统一请求封装

统一请求封装的目的&#xff1a; 1.去除重复的冗余的代码 2. 跨py文件实现通过一个sess来自动关联有cookie关联的接口。 3. 设置统一的公共参数&#xff0c;统一的文件处理&#xff0c;统一的异常处理&#xff0c;统一的日志监控&#xff0c;统一的用例校验等 封装前原本代…

案例093:基于微信小程序的南宁周边乡村游设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Redis——centos7环境安装Redis6.2.14版本,make命令编译时报错:jemalloc/jemalloc.h:没有那个文件或目录

一、报错原因 在redis-6.2.14文件夹下有一个README.md文件&#xff0c;有如下一段话&#xff1a; 在构建 Redis 时&#xff0c;通过设置 MALLOC 环境变量来选择非默认的内存分配器。Redis 默认编译并链接到 libc malloc&#xff0c;但在 Linux 系统上&#xff0c;jemalloc 是…

如何实现安卓端与苹果端互通的多种方案

随着移动设备用户的爆炸性增长&#xff0c;跨平台应用开发变得尤为重要。在Android与iOS之间实现互通对于推广应用、增加用户覆盖面和提升用户体验有至关重要的作用。以下是实现Android与iOS互通的多种方案&#xff0c;以及每种方案的实现方法、细节注意点、适合团队的规模和建…

AWS EKS1.26+kubesphere3.4.1

1、前提准备 1台EC2服务器Amazon Linux2&#xff0c;设置admin的角色 安装 aws cli V2 ​ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/installexport PATH/usr/local/bin:$PATHsou…

OpenHarmony鸿蒙源码下载编译和开发环境搭建

目录 一、开发环境搭建和源码下载二、编译三、总结 一、开发环境搭建 最好是在如Ubuntu18.04以上的系统中搭建&#xff0c;不然有些软件依赖需要解决&#xff0c;加大搭建时间 如gitee中开源OpenHarmony中的文档所示&#xff0c;搭建开发环境&#xff0c;搭建文档网站如下&a…