Quiero crear archivos PDF con pdfmake, usar jszip para agregarlos en 1 carpeta y luego descargar esta carpeta como zip, pero cuando quiero descargar el zip, está vacío. ¿Qué me estoy perdiendo?
Mi código a continuación:
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"); });El zip descargado no tiene los pdf, solo los txts.
no ha proporcionado un ejemplo completo de su código, por lo que no puedo ejecutarlo, pero parece:
Creó una carpeta de examples , colocó un archivo en ella y luego tomó un objeto zip puro y lo guardó como example.zip ;
PD: preste atención, está llamando a zip.generateAsync examples.file forma asíncrona, lo que puede causar otros problemas. Le recomendaría que coloque su zip.generateAsync dentro de la devolución de llamada ddPdf.getBlob .
Podría ser algo como:
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"); }); }); }Me encontré con un problema similar en mi aplicación:
let ddPdf = pdfMake.createPdf(docDefinition); ddPdf.getBlob(blob => { console.log('Flag') })La función de devolución de llamada nunca se activaría. Lo mismo para los métodos base64 y de búfer. No estoy seguro de por qué.
Lo arreglé como:
//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`); });