Estoy tratando de fusionar una cantidad múltiple e infinita de búferes de pdf del titiritero en un solo archivo. Sospecho que tiene algo que ver con el búfer, pero todavía tengo que encontrar una solución que parezca funcionar. Esto me acercó más, ¿Cómo enviar un búfer de PDF al navegador usando NodeJS? , pero el resultado sigue diciendo que no se puede cargar. Adobe, Chrome y Fox-IT dicen que está corrupto o decodificado incorrectamente.
Código titiritero:
async function generateBulkPDFFromUrl(urlString) { // launch a new chrome instance const browser = await puppeteer.launch({ headless: true, args: ['--font-render-hinting=none'] }); // create a new page const page = await browser.newPage(); await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'); // set your html as the pages content const url = new URL(`${urlString}`); await page.goto(url, { waitUntil: 'domcontentloaded' }); // create a pdf buffer const pdfBuffer = await page.pdf({ format: 'A4' }); // close the browser await browser.close(); return pdfBuffer; }Buffer de Puppetteer por si quieres verlo:
<Buffer 25 50 44 46 2d 31 2e 34 0a 25 d3 eb e9 e1 0a 31 20 30 20 6f 62 6a 0a 3c 3c 2f 43 72 65 61 74 6f 72 20 28 43 68 72 6f 6d 69 75 6d 29 0a 2f 50 72 6f 64 ... 52960 more bytes>Matriz de búferes enviados al código de combinación:
[ <Buffer 25 50 44 46 2d 31 2e 34 0a 25 d3 eb e9 e1 0a 31 20 30 20 6f 62 6a 0a 3c 3c 2f 43 72 65 61 74 6f 72 20 28 43 68 72 6f 6d 69 75 6d 29 0a 2f 50 72 6f 64 ... 52960 more bytes>, <Buffer 25 50 44 46 2d 31 2e 34 0a 25 d3 eb e9 e1 0a 31 20 30 20 6f 62 6a 0a 3c 3c 2f 43 72 65 61 74 6f 72 20 28 43 68 72 6f 6d 69 75 6d 29 0a 2f 50 72 6f 64 ... 93378 more bytes> ]Combinar código (PDF-LIB):
async function mergePdfs(pdfsToMerges) { const mergedPdf = await PDFDocument.create(); const actions = pdfsToMerges.map(async pdfBuffer => { const pdf = await PDFDocument.load(pdfBuffer); const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices()); copiedPages.forEach((page) => { mergedPdf.addPage(page); }); }); await Promise.all(actions); return await mergedPdf.save(); }Puedo obtener un solo pdf para descargar bien, es la combinación la que parece ser el problema. Cualquier idea sería útil. Gracias.
Así que tenía razón al decir que era un problema de búfer. No estoy seguro de que PDF-LIB pueda manejar los búferes de titiritero correctamente... si alguien tiene alguna otra solución, soy todo oídos... er dedos, bueno ojos...
Esto es lo que tengo que trabajar, que se encuentra aquí https://npm.io/package/merge-pdf-buffers
Parece un poco simplista, y no estoy seguro de que esta persona todavía lo apoye... así que puedo bajarlo y ver qué está haciendo. Tal vez lo apoye. jajaja
Sin embargo, en este momento esta solución está funcionando.