Сгенерируйте pdf файл с помощью pdfkit и отправьте его в браузер в 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');
2 ответа
doc.write
это линия, вызывающая проблему, которая также является устаревшим методом, поэтому не используйте ее. Вместо этого используйте pipe, чтобы сообщить своему документу, куда следует передавать информацию, и не забудьте закрыть ее, используя 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) )