Generate pdf file using pdfkit and send it to browser in nodejs-expressjs

半城伤御伤魂 提交于 2019-12-04 16:01:30

问题


I am using pdfkit to generate pdf file and i want to send this pdf file to browser.

But i am getting message "TypeError: listener must be a function", Also, file is getting generate in my parent directory which i don't want.

Can anyone explain me how to generate pdf file and send it to browser without storing it at parent directory?
I am using expressjs here.

My code

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

回答1:


doc.write is the line causing the trouble, which is also a deprecated method so don't use it. Instead, use pipe to tell your doc where to stream the information, and remember to close it using doc.end(), i.e., like so:

doc = new PDFDocument();
doc.pipe( fs.createWriteStream('out.pdf') );

// rest of the code goes here...

doc.end();

Note that it's not important that doc.pipe() be at the top, it just makes sense to me (you can put it before or after doc.end(). It doesn't matter, it'll work just fine). Finally, note that you can use pipe to stream directly to a response, there's no need to create the file first and then download it, i.e.:

doc.pipe( fs.createWriteStream(res) )



回答2:


So Instead try Using

doc.pipe(res);



来源:https://stackoverflow.com/questions/23624005/generate-pdf-file-using-pdfkit-and-send-it-to-browser-in-nodejs-expressjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!