Te damos el hallazgo a este dilema, o por lo menos eso pensamos. Si sigues con alguna interrogante coméntalo y sin dudarlo te ayudaremos
Solución:
Una respuesta actualizada para 2020. No es necesario introducir un nuevo flujo de memoria porque “instancias de PDFDocument son flujos de nodos legibles“.
Puedes usar el get-stream
paquete para facilitar la espera a que finalice el documento antes de devolver el resultado a la persona que llama. https://www.npmjs.com/package/get-stream
const PDFDocument = require('pdfkit')
const getStream = require('get-stream')
const pdf = () =>
const doc = new PDFDocument()
doc.text('Hello, World!')
doc.end()
return await getStream.buffer(doc)
// Caller could do this:
const pdfBuffer = await pdf()
const pdfBase64string = pdfBuffer.toString('base64')
No tiene que devolver un búfer si sus necesidades son diferentes. El archivo Léame de get-stream ofrece otros ejemplos.
No hay necesidad de usar un flujo de memoria intermedio1 – simplemente canalice el flujo de salida de pdfkit directamente a un flujo de carga HTTP.
En mi experiencia, el SDK de AWS es una basura cuando se trata de trabajar con transmisiones, por lo que generalmente uso request.
var upload = request(
method: 'PUT',
url: 'https://bucket.s3.amazonaws.com/doc.pdf',
aws: bucket: 'bucket', key: ..., secret: ...
);
doc.pipe(upload);
1: de hecho, generalmente no es deseable usar un flujo de memoria porque eso significa almacenar en búfer todo en la RAM, ¡que es exactamente lo que se supone que deben evitar los flujos!
Si eres capaz, puedes dejar un artículo acerca de qué le añadirías a este escrito.