使用pdfkit生成pdf文件并将其发送到nodejs-expressjs中的浏览器

时间:2014-05-13 06:17:34

标签: javascript node.js express node-pdfkit

我正在使用pdfkit生成pdf文件,我想将此pdf文件发送到浏览器。

但我收到消息"TypeError: listener must be a function", 此外,文件正在我的父目录中生成,我不想要。

任何人都可以解释我如何生成pdf文件并将其发送到浏览器而不将其存储在父目录中吗?
我在这里使用expressjs。

我的代码

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

2 个答案:

答案 0 :(得分:18)

doc.write是导致问题的行,也是deprecated method所以不要使用它。相反,使用管道告诉您的文档在哪里传输信息,并记住使用doc.end()关闭它,即如下:

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

// rest of the code goes here...

doc.end();

请注意doc.pipe()位于顶部并不重要,这对我来说是有意义的(你可以在doc.end()之前或之后放置它。它没关系,它只会起作用精细)。最后,请注意您可以使用pipe直接流式传输到响应,不需要先创建文件然后下载它,即:

doc.pipe( fs.createWriteStream(res) )

答案 1 :(得分:1)

所以请尝试使用

doc.pipe(RES);