html2canvas+jspdf实现前端导出pdf时,4k屏浏览器卡死

问题概述:在4k屏上进行前端导出pdf,谷歌浏览器卡死,在笔记本电脑上能正常导出

问题分析:由于canvas画布在主流浏览器中的尺寸限制

在IOS10下,自带浏览器和微信下,超过40964096像素则显示不了红色方块;
HUAWEI NXT-TL00手机自带浏览器和UC浏览器下,不能超过81928192像素;
在PC,CHROME浏览器,360浏览器,不能超过1638416384像素;
搜狗浏览器,要比1638416384稍微小一些;
firefox,最大数在11164*11164左右;
IE11、EDGE浏览器,没找到极限,只不过越大电脑越慢内存消耗严重;

解决方案:像素比调小,降低清晰度window.devicePixelRatio * 1,默认window.devicePixelRatio * 1

/**
   * 将元素转化为canvas元素
   * @param {HTMLElement} element - 当前要转换的元素
   * @param {width} width - 内容宽度
   * @returns
   */
  async toCanvas(element, width) {
    // canvas元素
    let canvas = await html2canvas(element, {
      allowTaint: true, // 允许渲染跨域图片
      scale: this.scale || window.devicePixelRatio * 1, // 增加清晰度
      useCORS: true, // 允许跨域
    });
    // 获取canvas转化后的宽度
    const canvasWidth = canvas.width;
    // 获取canvas转化后的高度
    const canvasHeight = canvas.height;
    // 高度转化为PDF的高度
    const height = (width / canvasWidth) * canvasHeight;
    // 转化成图片Data
    const canvasData = canvas.toDataURL("image/jpeg", 1.0);
    // 释放canvas
    canvas = null;
    //console.log(canvasData)
    return { width, height, data: canvasData };
  }

这种也是没有办法的办法,一般情况下最好前后端使用文件流的方式导出最合适!!!

相关推荐

  1. html2canvas+jspdf实现前端导出pdf4k浏览器

    2024-04-08 00:00:07       37 阅读
  2. html2canvas+jsPDF实现前端导出pdf

    2024-04-08 00:00:07       44 阅读
  3. html2canvas+jsPDF导出超长网页的PDF

    2024-04-08 00:00:07       57 阅读
  4. 前端导出pdf

    2024-04-08 00:00:07       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 00:00:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 00:00:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 00:00:07       82 阅读
  4. Python语言-面向对象

    2024-04-08 00:00:07       91 阅读

热门阅读

  1. 如何启动odoo中logging 日志配置

    2024-04-08 00:00:07       38 阅读
  2. Acwing2024蓝桥杯区间合并

    2024-04-08 00:00:07       35 阅读
  3. python - Django创建项目

    2024-04-08 00:00:07       37 阅读
  4. 【云开发笔记NO.23】初步了解CODING-TSF-TKE

    2024-04-08 00:00:07       37 阅读
  5. git提交代码github

    2024-04-08 00:00:07       39 阅读
  6. [RK3566-Android11] 关于2K (2560x1440)分辨率支持问题

    2024-04-08 00:00:07       35 阅读
  7. PHP获取亚马逊商品详情api接口

    2024-04-08 00:00:07       40 阅读
  8. 一名顶尖的黑客高手要学些什么?

    2024-04-08 00:00:07       36 阅读
  9. OMP实现压缩感知的实现(MATLAB)

    2024-04-08 00:00:07       41 阅读