问题概述:在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 };
}
这种也是没有办法的办法,一般情况下最好前后端使用文件流的方式导出最合适!!!