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

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

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

1.1 交互效果

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

1.2 实现代码

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

html 页面设置

<el-button type="success" size="mini" @click="copyCharts">复制下面列表内容</el-button><el-tableid="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-tableid="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.mzph.cn/news/595265.shtml

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

相关文章

office学习记录

目录 Excelwordvisioonedriveproject学习资料git仓库百度云分享 视频教程官网资料 Excel word visio onedrive project 学习资料 git仓库 office学习笔记: https://gitee.com/fedorayang/office.git 百度云分享 安装程序: office2019 project2019 visio2019 书籍: Ac…

Talk | 香港科技大学博士生陈竞晔:TextDiffuser系列让扩散模型渲染文本不再是难题

本期为TechBeat人工智能社区第560期线上Talk。 北京时间1月3日(周三)20:00&#xff0c;香港科技大学在读博士生—陈竞晔的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “TextDiffuser系列让扩散模型渲染文本不再是难题”&#xff0c;介绍了他的团…

2020年认证杯SPSSPRO杯数学建模D题(第一阶段)让电脑桌面飞起来全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现&#xff1a; 对于一些必须每天使用电脑工作的白领来说&#xff0c;电脑桌面有着非常特殊的意义&#xff0c;通常一些频繁使用或者比较重要的图标会一直保留在桌面上&#xff0c;但是随着时间的推移&#xff0c;…

java的BitSet位集

2024.1.3 java的BitSet位集 目的: 计算2-2000000之间的素数 import java.util.BitSet;/**1. author HK*/ public class Sieve {public static void main(String[] args) {int n 2000000;long start System.currentTimeMillis();BitSet bitSet new BitSet(n 1);int count …

如何无需公网IP实现远程访问Windows本地WebDAV服务中存储文件

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 自己用Windows Server搭建了家用NAS主机&…

Vue+ElementUI笔记(1)

一、表格 1.上移、下移和移除功能 需求&#xff1a;有时我们会面对类似这样的表格 图中的上移&#xff0c;下移功能需求明显要求我们改变两行数据的顺序。在实际开发中这种功能一般由后台来做&#xff0c;因为列表数据一般从后台获取刷新。即是我们点击”上移“&#xff0c;向…

mac环境下安装部署mysql5.7

下载安装包 进入官网下载MySQL5.7的安装包 https://www.mysql.com/downloads/ 安装包下载完成后双击pkg文件进行安装&#xff0c;无脑点下一步即可&#xff0c;注意安装完成后记得保存最后弹出框的密码 进入系统偏好设置&#xff0c;找到mysql&#xff0c;开启mysql服务…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 编译构建及此过程中的踩坑填坑(2)

接前一篇文章&#xff1a;玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 编译构建及此过程中的踩坑填坑&#xff08;1&#xff09; 上一篇讲到在执行以下命令时再次出现了错误&#xff1a; $ sudo ./build.sh --product-name dayu210 --ccache错误如下&#xff1a; …… [OHOS…

maven:在maven中使用tomcat7插件

1、在pom.xml中添加tomcat7插件 <build><!-- Embedded Apache Tomcat required for testing war --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</ver…

springboot漫画网站源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

面试官:如何实现两栏布局,右侧自适应?三栏布局中间自适应呢?

面试官&#xff1a;如何实现两栏布局&#xff0c;右侧自适应&#xff1f;三栏布局中间自适应呢&#xff1f; 一、背景 在日常布局中&#xff0c;无论是两栏布局还是三栏布局&#xff0c;使用的频率都非常高 两栏布局 两栏布局实现效果就是将页面分割成左右宽度不等的两列&am…

ROS学习记录:在ROS中用C++实现激光雷达避障

前言 本文建立在成功获取激光雷达数据的基础上&#xff0c;详细参考 在ROS中用C实现获取激光雷达的数据 一、实现思路 二、在VScode中打开之前编写好的lidar_node.cpp 三、在lidar_node.cpp中写入如下代码 #include <ros/ros.h> #include <std_msgs/String.h> …

微信小程序:selectComponent返回null的问题

当小程序自带的组件无法满足所有需求的时候&#xff0c;我们可以参考很多自定义组件。我们这次排查问题就拿比较常用的vant-weapp作为示例&#xff1a;使用selectComponent获取自定义组件对象时&#xff0c;返回null的问题 1、json引入组件 "usingComponents": {&q…

LeetCode第98题 - 有效的括号

题目 解答 方案一 class Solution {public boolean isValidBST(TreeNode root) {if (root null) {return true;}if (root.left null && root.right null) {return true;}if (root.left ! null && root.left.val > root.val) {return false;}if (root.…

Mysql的四大引擎,账号管理,数据库的建立

数据库存储引擎查看 Support字段说明 default的为默认引擎 YES表示可以使用 NO表示不能使用 命令 SHOW ENGINES 四大引擎 MEMORY 使用场景&#xff1a;由于易失性&#xff0c;可以用于存储在分析中产生的中间表 特点 所有的数据都保存在内存中&#xff0c;一旦服务器重启&…

“List of Devices Attached“:Android设备连接问题解析

“List of Devices Attached”&#xff1a;Android设备连接问题解析 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将聚焦于一个在Android开发…

[每周一更]-(第55期):Go的interface

参考地址 https://juejin.cn/post/6978322067775029261https://gobyexample.com/interfaceshttps://go.dev/tour/methods/9 介绍下Go的interface 在Go语言中&#xff0c;interface是一种特殊的数据类型&#xff0c;用于定义一组方法的规范。它描述了一个对象可以具备的行为&…

ElasticSearch自定义算分排序(Function Score Query)

使用 function score query&#xff0c;可以修改文档的相关性算分 (query score)&#xff0c;根据新得到的算分排序。 目录 Function Score Query 案例 Function Score Query 几种默认的计算分值的函数&#xff1a; Weight:为每一个文档设置一个简单而不被规范化的权重Fie…

Centos8破解Root密码

注&#xff1a;Centos7同理。 1.重启Centos8系统后&#xff0c;在启动页面中选中第一行&#xff0c;按【e】键进入界面。 2.找到linux开头所在行的找到“ro”改为上“rw init/sysroot/bin/bash”&#xff0c;同时按下【Ctrl】【X】跳转到紧急模式。 3.在紧急模式下&#xff0c…

UniversalTransformer with Adaptive Computation Time(ACT)

原论文链接&#xff1a;https://arxiv.org/abs/1807.03819 Main code import torch import numpy as npclass PositionTimestepEmbedding(torch.nn.Module):def forward(self, x, t):device x.devicesequence_length x.size(1)d_model x.size(2)position_embedding np.arr…