我有一个 应用程序,左侧有 (3) 个项目的列表以及它们各自的预览
有一个
Generate PDF
按钮,单击该按钮即可下载包含所有 (3) 个预览的 PDF。
我尝试遍历所有预览,当预览列表项时,我将 DOM 收集到
array (service property)
中。当所有项目的遍历完成后,我循环遍历集合 array (service property)
并尝试生成 PDF。
我希望生成一个 PDF,并捕获所有列出的项目预览。 但问题是 生成的 PDF 只有一个空白页,这不是预期的。
我尝试使用 2 种不同的方法来捕获 HTML,但没有成功。
document.getElementById()
@ViewChild()
(stackblitz 示例现在包含此实现)要完成此要求,这里缺少什么?
有几个问题:
html2canvas
修复方法如下:
html2canvas
,而不是字符串:this.addSnapToPdf(preview);
this._pdf.addPage()
isLast
标志:const isLast = idx + 1 == this._appService.allPreviews.length;
this.addSnapToPdf(preview, isLast);
试试这个:带有代码和注释说明的固定方法:
generatePdf() {
this._appService.allPreviews.forEach((preview, idx) => {
// send the flag indicating to save pdf
const isLast = idx + 1 == this._appService.allPreviews.length;
console.log('preview', idx + 1, preview);
// send html element and last flag
this.addSnapToPdf(preview, isLast);
});
}
addSnapToPdf(page: HTMLElement, isLast: boolean) {
html2canvas(page, { scale: 2 }).then((canvas: any) => {
this._pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, 0, 211, 298);
// if it's last, save, else add new page
if (isLast) this._pdf.save('AllPreviews.pdf');
else this._pdf.addPage();
});
}