React(2): 使用 html2canvas 生成图片
使用 html2canvas 生成图片
需求
- 将所需的内容生成图片
div中包括svg等
前置准备
"react": "^18.2.0","react-dom": "^18.2.0","html2canvas": "^1.4.1",
实现
<div ref={payRef}></div>
const payRef = useRef<HTMLDivElement>(null);function generateImg() {if (orderRef.current) {html2canvas(orderRef.current, {useCORS: true,allowTaint: true, //开启跨域}).then((canvas) => {Toast.show('生成图片成功');const link = document.createElement('a');link.href = canvas.toDataURL();link.setAttribute('download', '订单详情.png');link.style.display = 'none';document.body.appendChild(link);link.click();document.body.removeChild(link);});}
}
生成的图片

出现的问题
svg 导不出来
百度了下发现都是用 canvg,但是发现不生效,查看了下 结构, 发现我用的是 vite-plugin-svg-icons 这个 vite 插件,你会发现 svg 里面的东西引用都在外面…
结构是这样的


不在同个 div 下面根本拿不到,然后我脑里突然想: 那我把它怼进去不就行了
更改
这里用 any 纯属无奈 ╮(╯▽╰)╭,因为 USEElement 和 SymbolElement 定义就报错…,有大佬可以给我支下招
export function changeToCanvas(element: HTMLDivElement) {const svgElems = element.querySelectorAll('svg');let elems: SVGElement[] = [...svgElems];elems.forEach((node: SVGElement) => {// 拿到 symbol 的 use 属性const childNodes: any = node.childNodes[0];// 除去 # 这个属性 拿到对应值const id = childNodes.href.baseVal.slice(1);// 拿到 Symbol 标签let symbol: any = document.getElementById(id)?.cloneNode(true);// 获取填充颜色let fill = window.getComputedStyle(node)['fill'];// 填充颜色symbol.style.fill = fill;// 直接把他塞到 use 中childNodes.appendChild(symbol);});
}
使用
<div ref={payRef}></div>
const payRef = useRef<HTMLDivElement>(null);function generateImg() {if (orderRef.current) {changeToCanvas(orderRef.current);html2canvas(orderRef.current, {useCORS: true,allowTaint: true, //开启跨域}).then((canvas) => {Toast.show('生成图片成功');const link = document.createElement('a');link.href = canvas.toDataURL();link.setAttribute('download', '订单详情.png');link.style.display = 'none';document.body.appendChild(link);link.click();document.body.removeChild(link);});}}
然后点击生成,打开控制台发现 use 中的内容给我硬塞进去了

然后生成的图片也没有问题

最后
如果大佬们有更好的建议可以私信我一下 (▽)
更新
暂无
相关文章:
React(2): 使用 html2canvas 生成图片
使用 html2canvas 生成图片 需求 将所需的内容生成图片div 中包括 svg 等 前置准备 "react": "^18.2.0","react-dom": "^18.2.0","html2canvas": "^1.4.1",实现 <div ref{payRef}></div>const pa…...
CAN物理层协议介绍
目录 编辑 1. CAN协议简介 2. CAN物理层 3. 通讯节点 4. 差分信号 5. CAN协议中的差分信号 1. CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519) ࿰…...
华为OD机试真题-计算面积-2023年OD统一考试(C卷)
题目描述: 绘图机器的绘图笔初始位置在原点(0, 0),机器启动后其绘图笔按下面规则绘制直线: 1)尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E。 2)期间可通过指令在纵坐标轴方向进行偏移,并同时绘制直线,偏移后按规则1 绘制直线;指令的格式为X offsetY,表示在横…...
设计模式之策略模式【行为型模式】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…...
git使用(完整流程)
1. 新建仓库 1.右击 git bash 后 输入 git init (仓库为:当前目录) git init name (仓库为:name文件夹) git clone https://github.com/Winnie996/calculate.git //https2.工作区域 工作目录 3. 添加 提交 git add . //工作区添加至暂存区 git commit -m "注释内容&q…...
九、HTML头部<head>
一、HTML头部<head> 1、<title>- 定义了HTML文档的标题 使用 <title> 标签定义HTML文档的标题 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>我的 HTML 的第一页</title> </head><b…...
机器学习期末复习
机器学习 选择题名词解释:简答题计算题一、线性回归二、决策树三、贝叶斯 选择题 机器学习利用经验 ,须对以下()进行分析 A 天气 B 数据 C 生活 D 语言 归纳偏好值指机器学习算法在学习的过程中,对以下(&a…...
python-日志模块以及实际使用设计
python-日志模块以及实际使用设计 1. 基本组成 日志模块四个组成部分: 日志对象:产生日志信息日志处理器:将日志信息输出到指定地方,例如终端、文件。格式器:在日志处理器输出之前,对信息进行各方面的美化…...
googlecode.log4jdbc慢sql日志,格式化sql
前言 无论使用原生JDBC、mybatis还是hibernate,使用log4j等日志框架可以看到生成的SQL,但是占位符和参数总是分开打印的,不便于分析,显示如下的效果: googlecode Log4jdbc 是一个开源 SQL 日志组件,它使用代理模式实…...
Linux程序、进程和计划任务
目录 一.程序和进程 1.程序的概念 2.进程的概念 3.线程的概念 4.单线程与多线程 5.进程的状态 二.查看进程信息相关命令: 1.ps:查看静态进程信息状态 2.top:查看动态进程排名信息 3.pgrep:查看指定进程 4.pstree&#…...
【MySQL】索引基础
文章目录 1. 索引介绍2. 创建索引 create index…on…2.1 explain2.2 创建索引create index … on…2.3 删除索引 drop index … on 表名 3. 查看索引 show indexes in …4. 前缀索引4.1 确定最佳前缀长度:索引的选择性 5. 全文索引5.1 创建全文索引 create fulltex…...
精确管理Python项目依赖:自动生成requirements.txt的智能方法
在Python中,可以使用几种方法来自动生成requirements.txt文件。这个文件通常用于列出项目所需的所有依赖包及其版本,使其他人或系统可以轻松地重现相同的环境。下面是几种常见的方法: 使用pip freeze: 这是最常见的方法。pip free…...
JavaWeb基础(1)- Html与JavaScript(JavaScript基础语法、变量、数据类型、运算符、函数、对象、事件监听、正则表达式)
JavaWeb基础(1)- Html与JavaScript(JavaScript基础语法、变量、数据类型、运算符、函数、对象、事件监听、正则表达式) 文章目录 JavaWeb基础(1)- Html与JavaScript(JavaScript基础语法、变量、数据类型、运算符、函数、对象、事件…...
java SSM体育器材租借管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
一、源码特点 java SSM体育器材租借管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要…...
西电期末1030.函数的最大值
一.题目 二.分析与思路 函数打擂台,注意数据类型和保留精度 三.代码实现 #include<bits/stdc.h>//万能头 double f(double x,double a){return a*x*x-x*x*x; }//f(x) int main() {double a;scanf("%lf",&a);double max-1000001;//打擂台for(…...
在Docker中安装Tomact
目录 前言: 一.安装Tomact 查找指定的tomact版本 下载tomact9.0 查看该镜像是否安装成功 安装成功之后就开始运行镜像了 ps(用于列出正在运行的Docker容器) 编辑 测试(虚拟机ip:8080) 编辑 解决措施 编辑 完成以上步骤&…...
【书生大模型00--开源体系介绍】
书生大模型开源体系介绍 0 通用人工智能1 InternLM性能及模型2 从模型到应用 大模型成为目前很热的关键词,最热门的研究方向,热门的应用;ChatGPT的横空出世所引爆,快速被人们上手应用到各领域; 0 通用人工智能 相信使…...
基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理
文章目录 一、内容简介二、前言2.1 Transformer 模型标志着AI 新时代的开始2.2 Transformer 架构具有革命性和颠覆性2.3 Google BERT 和OpenAI GPT-3 等Transformer 模型将AI 提升到另一个层次2.4 本书将带给你的“芝士”2.5 本书面向的读者 三、本书内容简介3.1 第一章3.2 第二…...
一款开源的MES系统
随着工业4.0的快速发展,制造执行系统(MES)成为了智能制造的核心。今天,将为大家推荐一款开源的MES系统——iMES工厂管家。 什么是iMES工厂管家 iMES工厂管家是一款专为中小型制造企业打造的开源MES系统。它具备高度的可定制性和灵…...
https配置证书
HTTPS 基本原理 https 介绍 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷是为了保证数据安全。 国内外的大型互联网…...
从测试驱动到需求驱动:芯片验证范式的深度迁移与实践
1. 从“测试驱动”到“需求驱动”:一次验证范式的深度迁移干了十几年芯片验证,从早期的定向测试到后来的约束随机验证,再到覆盖率驱动验证,我亲眼看着这个领域的复杂度像坐火箭一样往上窜。现在一个SoC项目,动辄几亿门…...
Carla 启动卡在75%并报“Fatal error”:从崩溃日志到资源缺失的排查实录
1. 当Carla卡在75%:从崩溃现象到问题定位 那天我正在Windows环境下调试Carla仿真平台,编译过程一切顺利,但执行make launch命令后,进度条就像被施了定身咒——永远停在了75%的位置。紧接着弹出的"Fatal error"对话框让我…...
1k Star的p-retry,让异步操作失败自动重试
文章目录1k Star的p-retry,让异步操作失败自动重试核心功能适用场景注意事项1k Star的p-retry,让异步操作失败自动重试 sindresorhus开源的p-retry项目,目前在GitHub上获得1009个Star。这个库的核心功能是为异步操作添加重试机制,…...
nn.Flatten():从参数解析到多维张量展平实战
1. 理解nn.Flatten()的核心作用 当你第一次接触深度学习框架中的nn.Flatten()时,可能会觉得这个函数简单到不需要解释——不就是把多维数据压平吗?但真正用起来就会发现,里面的门道比想象中多得多。我在实际项目中就遇到过因为错误理解展平维…...
魔兽争霸3终极优化:WarcraftHelper让你的经典游戏在现代电脑上焕然新生
魔兽争霸3终极优化:WarcraftHelper让你的经典游戏在现代电脑上焕然新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3…...
DownKyi终极指南:简单快速获取B站8K超高清视频的完整解决方案
DownKyi终极指南:简单快速获取B站8K超高清视频的完整解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等…...
长期使用Token Plan套餐,我的大模型调用成本降低了多少
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Token Plan套餐,我的大模型调用成本降低了多少 1. 从按量付费到套餐订阅的转变 在深度使用大模型API进行项目…...
从泡泡实验室到阿木社区:PX4开发者如何在国内技术圈子里快速成长?
从泡泡实验室到阿木社区:PX4开发者如何在国内技术圈子里快速成长? 在无人机开源飞控领域,PX4和Pixhawk已经成为开发者绕不开的技术栈。但相比国外活跃的开发者社区,国内的技术生态往往让新手感到无从下手——百度贴吧的讨论碎片化…...
如何通过HWInfo插件实现精准硬件监控与风扇控制:完整配置指南
如何通过HWInfo插件实现精准硬件监控与风扇控制:完整配置指南 【免费下载链接】FanControl.HWInfo FanControl plugin to import HWInfo sensors. 项目地址: https://gitcode.com/gh_mirrors/fa/FanControl.HWInfo 想要让电脑散热系统更智能、更安静吗&#…...
3种高效方案:让Windows直接运行Android应用的全新体验手册
3种高效方案:让Windows直接运行Android应用的全新体验手册 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想象一下这样的场景:您需要在电脑上快…...
