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) )