1 回答

TA贡献1828条经验 获得超6个赞
你可以这样做:
遍历所有图像
随时制作每个画布的PNG
随时将其中每个添加到 PDF 中
检查阵列长度是否有更多图像。㞖
addPage()
添加一种方法以确保它仅在完成所有操作后保存PDF。此外,在此方法中,请检查循环索引的位置,以便仅在添加最后一个图像后保存 PDF。
then()
then()
在我的例子中,这两个小的蓝色块将是添加到PDF的图像。现在,由于沙盒限制,此示例不会在堆栈溢出上运行,但您可以在此处看到工作正常的 JSFiddle。
const imgs = [...document.querySelectorAll('.img')]
const btn = document.querySelector('a')
btn.addEventListener('click', () => {
const doc = new jsPDF()
imgs.forEach((a, i) => {
html2canvas(a)
.then(canvas => {
const img = canvas.toDataURL('image/png')
doc.addImage(img,'PNG', 45, 45, 100, 100);
if (imgs.length > (i+1)) {
doc.addPage()
}
})
.then(() => {
if ((i+1) === imgs.length) {
doc.save('MyPdf.pdf')
}
})
})
})
span {width: 20px; height: 20px; background-color: blue; display: inline-block}
a {display: block}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js" integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/" crossorigin="anonymous"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js" crossorigin="anonymous"></script>
<span class="img"></span>
<span class="img"></span>
<a href="#">Download PDF</a>
更新
下面介绍如何对标记执行相同的操作,而不是使用 Html2canvas 来创建图像。在这个例子中,你根本不需要 Html2 堪萨斯。我已经更新了上面的JSFiddle链接来显示此示例。<img>
const imgs = [...document.querySelectorAll('.img')]
const btn = document.querySelector('a')
btn.addEventListener('click', () => {
const doc = new jsPDF()
let dataUrl
async function makeImg(img) {
let blob = await fetch(img.src).then(res => res.blob());
dataUrl = await new Promise(resolve => {
let reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.readAsDataURL(blob);
})
}
imgs.forEach((a, i) => {
makeImg(a)
.then(res => {
doc.addImage(dataUrl, 'PNG', 45, 45, a.style.width, a.style.height)
if (imgs.length > (i+1)) {
doc.addPage()
}
})
.then(() => {
if ((i+1) === imgs.length) {
doc.save('MyPdf.pdf')
}
})
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js" integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/" crossorigin="anonymous"></script>
<img class="img" src="https://i.postimg.cc/NfMXcB4c/Screenshot-2020-06-09-at-18-35-56.png">
<img class="img" src="https://i.postimg.cc/NfMXcB4c/Screenshot-2020-06-09-at-18-35-56.png">
<a href="#" style="display: block">Download PDF</a>
添加回答
举报