如何使用 jszip 和 pdfmake 在其中保存带有 pdf 的 zip?
How to save zip with pdf in it using jszip and pdfmake?
我想用 pdfmake 创建 pdf,用 jszip 将它们添加到 1 个文件夹,然后将此文件夹下载为 zip,但是当我要下载 zip 时,它是空的。我错过了什么?
我的代码如下:
for (let i = 0; i < 3; i++) {
const dd = {
content: [
"First paragraph",
"Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines"
]
};
const ddPdf = this.$pdfmake.createPdf(dd);
const examples = zip.folder("examples");
examples.file(`Hello${i}.txt`, "Hello World\n");
ddPdf.getBlob(blob => {
examples.file(
`example${i}.pdf`,
blob,
{ binary: true }
);
});
}
zip.generateAsync({ type: "blob" }).then(function(content) {
FileSaver.saveAs(content, "example.zip");
});
下载的 zip 没有 pdf,只有 txts。
您没有提供完整的代码示例,所以我无法 运行,但它看起来像:
您已创建文件夹 examples
,将文件放入其中,然后获取纯 zip 对象,并将其另存为 example.zip
;
PS:请注意,您正在异步调用 examples.file
和 zip.generateAsync
,这可能会导致其他问题。我建议您将 zip.generateAsync
放在 ddPdf.getBlob
回调中。
可能是这样的:
const ddPdf = this.$pdfmake.createPdf(dd);
const examples = zip.folder("examples");
ddPdf.getBlob(blob => {
examples.file(
"example.pdf",
blob,
{ binary: true }
);
examples.generateAsync({ type: "blob" }).then(function(content) {
FileSaver.saveAs(content, "example.zip");
});
});
}
我 运行 在我的应用程序中遇到了类似的问题:
let ddPdf = pdfMake.createPdf(docDefinition);
ddPdf.getBlob(blob => {
console.log('Flag')
})
回调函数永远不会触发。 base64 和缓冲区方法相同。不知道为什么。
我将其修复为:
//Inside PDF generator loop
let ddPdf = pdfMake.createPdf(docDefinition);
let ddPdfBlob = await ddPdf.getBlob(); //ddPdfBlob now holds the Blob
examples.file(`example${i}.pdf`, ddPdfBlob, {binary: true})
//after all loops
examples.generateAsync({type:"blob"})
.then(function(content) {
saveAs(content, `examples.zip`);
});
我想用 pdfmake 创建 pdf,用 jszip 将它们添加到 1 个文件夹,然后将此文件夹下载为 zip,但是当我要下载 zip 时,它是空的。我错过了什么?
我的代码如下:
for (let i = 0; i < 3; i++) {
const dd = {
content: [
"First paragraph",
"Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines"
]
};
const ddPdf = this.$pdfmake.createPdf(dd);
const examples = zip.folder("examples");
examples.file(`Hello${i}.txt`, "Hello World\n");
ddPdf.getBlob(blob => {
examples.file(
`example${i}.pdf`,
blob,
{ binary: true }
);
});
}
zip.generateAsync({ type: "blob" }).then(function(content) {
FileSaver.saveAs(content, "example.zip");
});
下载的 zip 没有 pdf,只有 txts。
您没有提供完整的代码示例,所以我无法 运行,但它看起来像:
您已创建文件夹 examples
,将文件放入其中,然后获取纯 zip 对象,并将其另存为 example.zip
;
PS:请注意,您正在异步调用 examples.file
和 zip.generateAsync
,这可能会导致其他问题。我建议您将 zip.generateAsync
放在 ddPdf.getBlob
回调中。
可能是这样的:
const ddPdf = this.$pdfmake.createPdf(dd);
const examples = zip.folder("examples");
ddPdf.getBlob(blob => {
examples.file(
"example.pdf",
blob,
{ binary: true }
);
examples.generateAsync({ type: "blob" }).then(function(content) {
FileSaver.saveAs(content, "example.zip");
});
});
}
我 运行 在我的应用程序中遇到了类似的问题:
let ddPdf = pdfMake.createPdf(docDefinition);
ddPdf.getBlob(blob => {
console.log('Flag')
})
回调函数永远不会触发。 base64 和缓冲区方法相同。不知道为什么。
我将其修复为:
//Inside PDF generator loop
let ddPdf = pdfMake.createPdf(docDefinition);
let ddPdfBlob = await ddPdf.getBlob(); //ddPdfBlob now holds the Blob
examples.file(`example${i}.pdf`, ddPdfBlob, {binary: true})
//after all loops
examples.generateAsync({type:"blob"})
.then(function(content) {
saveAs(content, `examples.zip`);
});