node movedown library htmlpdf generate example end javascript node.js express node-pdfkit

javascript - movedown - Genere un archivo pdf utilizando pdfkit y envíelo al navegador en nodejs-expressjs



pdfkit table (2)

Estoy utilizando pdfkit para generar un archivo pdf y quiero enviar este archivo pdf al navegador.

Pero recibo el mensaje "TypeError: listener must be a function", además, el archivo se está generando en mi directorio principal que no quiero.

¿Alguien me puede explicar cómo generar un archivo pdf y enviarlo al navegador sin almacenarlo en el directorio principal?
Estoy usando Expressjs aquí.

Mi código

var PDFDocument = require(''pdfkit''); var fs=require(''fs''); doc = new PDFDocument(); doc.moveTo(300, 75) .lineTo(373, 301) .lineTo(181, 161) .lineTo(419, 161) .lineTo(227, 301) .fill(''red'', ''even-odd''); var loremIpsum = ''Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam in...''; doc.y = 320; doc.fillColor(''black'') doc.text(loremIpsum, { paragraphGap: 10, indent: 20, align: ''justify'', columns: 2 }); doc.write(''out.pdf''); res.download(''out.pdf'');


Así que en lugar de intentar usar

doc.pipe (res);


doc.write es la línea que causa el problema, que también es un método obsoleto, así que no lo use. En su lugar, use pipe para decirle a su documento dónde transmitir la información, y recuerde cerrarla utilizando doc.end() , es decir, así:

doc = new PDFDocument(); doc.pipe( fs.createWriteStream(''out.pdf'') ); // rest of the code goes here... doc.end();

Tenga en cuenta que no es importante que doc.pipe() esté en la parte superior, solo tiene sentido para mí (puede ponerlo antes o después de doc.end() . No importa, funcionará bien). Finalmente, tenga en cuenta que puede usar la pipe para transmitir directamente a una respuesta, no es necesario crear el archivo primero y luego descargarlo, es decir:

doc.pipe( fs.createWriteStream(res) )