Создайте 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');
Ответы
Ответ 1
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) )
Ответ 2
Итак, попробуйте использовать
doc.pipe(RES);