web-dev-qa-db-ja.com

pdfkitを使用してpdfファイルを生成し、nodejs-expressjsでブラウザーに送信します

私は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');
18
user sks

_doc.write_は問題の原因となっている行です。これは 非推奨のメソッド でもあるため、使用しないでください。代わりに、パイプを使用してドキュメントのどこに情報をストリーミングするかを伝え、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) )
_
22
yuvi

代わりに使用してみてください

doc.pipe(res);

3
Rahil Lakhani