【技术支持】canvas转换为图片或PDF保存电脑

注意:有些网站可能由于canvas跨域污染问题,无法使用toBlob,所以无法转换

|---|
| |

开发者工具中,选中需要转换的canvas元素(使其可以使用$0语法)

控制台输入如下代码

javascript 复制代码
 $0.toBlob(function (blob) {
    var link = document.createElement("a");
    link.href = URL.createObjectURL(blob);
    link.download = "image.png";
    link.click();
  }, "image/png");

优化,转换为pdf

javascript 复制代码
fetch("https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js")
    .then((response) => response.text())
    .then((scriptText) => {
      eval(scriptText);//执行脚本
      // 现在可以使用 jsPDF 了
      const pageList = document.querySelectorAll("canvas");

      const { jsPDF } = window.jspdf;

      async function convertCanvasToPDF(pageList, pdfFileName) {
        const pdf = new jsPDF();

        for (let i = 0; i < pageList.length; i++) {
          const canvas = pageList[i];
          if (canvas) {
            const imgData = canvas.toDataURL("image/png");
            if (i > 0) {
              pdf.addPage(); // 在不是第一页的情况下添加新页面
            }
            pdf.addImage(imgData, "PNG", 0, 0, 210, 290);
          }
        }
        pdf.save(pdfFileName);
      }
      // 使用示例
      convertCanvasToPDF(pageList, "output.pdf");
    });
相关推荐
lichenyang453几秒前
JSBridge 分发升级:为什么要从 if-else 变成 Registry > 这是「ASCF 架构升级」系列的第 3 篇
前端
小月土星1 分钟前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
码上天下3 分钟前
流式响应断了,前端怎么自动重连续传
前端
anyup4 分钟前
来简单聊聊鸿蒙开发,万元奖金的事~
前端·华为·harmonyos
北凉温华14 分钟前
Univer 在线表格模块使用说明
前端
lichenyang45324 分钟前
WebRuntimePage 拆分:从大页面到运行时控制器
前端
竹林81835 分钟前
从报错到跑通:我用 @solana/web3.js 开发 Solana 钱包连接踩过的三个坑
前端
MariaH36 分钟前
Node中操作MySQL
前端
还有多久拿退休金37 分钟前
一个 var 让整个团队加班到凌晨——JS 闭包的那些暗坑
前端·javascript
weedsfly37 分钟前
用了 React/Vue 之后,这些 DOM 操作的坑你踩过几个?
前端·javascript