【发布时间】:2020-06-05 14:13:57
【问题描述】:
我编写了以下代码来使用 html2pdf.js 创建几个 pdf 文件。稍后我想将它们保存到存档并下载所述存档。我正在使用 jsZip 创建和填充存档并使用 fileSaver 来保存它:
window.zip = new JSZip();
let masterDiv = document.createElement('div');
masterDiv.id = 'masterDiv';
document.body.appendChild(masterDiv);
// Stundenplan für jeden Kandidaten erstellen
for (let i = 0; i < window.allCandidates.length; i++) {
let candidate = window.allCandidates[i].split(',');
window.lastName = candidate[0];
window.firstName = candidate[1];
window.filter = 'candidate';
setScheduleView('masterDiv');
let worker = html2pdf();
let opt = {
margin: 1,
image: {
type: 'jpeg',
quality: 1
},
html2canvas: {
scale: 2
},
jsPDF: {
unit: 'mm',
format: 'A3',
orientation: 'portrait'
}
};
// PDF erstellen
worker.set(opt).from(masterDiv).outputPdf().then((pdf) => {
window.zip.file(window.lastName + '.' + window.firstName + '.pdf', pdf, {
binary: true
});
});
setTimeout(() => {
clearDiv(masterDiv);
worker = null;
}, 50);
}
setTimeout(() => {
window.zip.generateAsync({
type: "blob"
}).then(function(content) {
saveAs(content, "allPDFs.zip");
});
}, 2000);
我现在的问题是:不是每个循环一个 pdf,而是一个包含完整内容的 pdf。为了让 html2pdf.js 明白它应该为每个循环创建一个新的 pdf 文件,我需要进行哪些更改?
【问题讨论】:
-
我对库不熟悉,但我想你应该在循环中运行
window.zip.generateAsync。您是否还在使用计时器等待异步调用?如果是这样,那么您也应该更改它,因为您永远不知道生成 pdf 需要多长时间。
标签: javascript html2pdf