1 回答
TA贡献1878条经验 获得超4个赞
var allPromises = [];
for (const element of htmlData) {
var input = document.getElementById(element);
if (input.toLowerCase().startsWith('<img')) {
allPromises.push(html2canvas(input));
} else {
allPromises.push(Promise.resolve(input));
}
}
Promise.all(allPromises).then(response => {
response.forEach(input => {
if (input instanceof String) {
doc.setFont(fontName, 'bold');
var isH3 = input.toLowerCase().startsWith('<h3>');
writeText(input, isH3 ? h3_fontSize : h5_fontSize, isH3 ? 5 : 3);
} else {
imgData = input.toDataURL('image/jpeg', 1.0);
doc.addImage(imgData, 'PNG', left_edge_distance, position_mm, 100, 100);
}
});
doc.save('download.pdf');
});
我会将第一块代码修改为上面的代码,其余部分保持原样。我将在这里解释它的作用:
维持一系列的承诺。
循环并检查输入是否为图像标签,并将返回的 Promise 存储到 html2Canvas() 的数组中
否则,只需存储已解决的承诺,将输入返回到数组以维持顺序。
运行 Promise.all() 并迭代 Promise 数组中的每个响应。
如果是字符串,则写入文本,否则添加图像。
最后,保存它。
添加回答
举报