【发布时间】:2021-07-01 22:23:12
【问题描述】:
我在 Angular 11 项目中使用 jspdf 和 html2canvas。我有一个“仪表板”页面,它需要一个“打印到 pdf”功能。这将拍摄当前仪表板的快照并导出为 pdf 文件。
我遇到的问题是:当窗口在 1920 像素 x 1280 像素的显示器上全屏显示时,它会按预期打印全尺寸的 pdf。但是,如果我将窗口大小调整为更小,则导出的 pdf 在输出页面上显示的图像要小得多。如果窗口被放大,图像也会超出页面范围,也会发生同样的情况。它似乎忽略了我的宽度/高度/windowWidth/windowHeight 选项。
我的印象是我编写的代码应该创建一个具有我设置的尺寸的新画布,然后导出为 pdf。所以窗口大小根本不应该影响它。
我可能做错了什么 - 或需要更改 - 使其始终将 1920x1280 图像导出到 A4 页面,而不管浏览器窗口的大小如何?
captureScreen() {
var data = document.getElementById('panel');
var canvas = document.createElement('canvas');
canvas.width = 1920;
canvas.height = 1280;
var options = {
canvas: canvas,
scale: 1,
width: 1920,
height: 1280,
windowHeight: 1280,
windowWidth: 1920,
};
html2canvas(data, options).then((canvas) => {
const contentDataURL = canvas.toDataURL('image/png');
var pdf = new jspdf('l', 'mm', 'a4');
var width = pdf.internal.pageSize.getWidth();
var height = pdf.internal.pageSize.getHeight();
pdf.addImage(contentDataURL, 'PNG', 1, 1, width, height);
pdf.save(this.jobName + ' - Dashboard');
});
}
}
注意“面板”是源画布,“画布”是我要生成的伪画布
【问题讨论】:
-
您是否尝试过不将图像/屏幕尺寸设置为静态,而是通过例如 documentElement.clientWidth 来获取?
标签: angular jspdf html2canvas