Saltar al contenido

Nodo js, ​​canalización de pdfkit a un flujo de memoria

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *