Как читать и генерировать PDF в Express.js? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть фрагмент кода в Express.js, который выглядит следующим образом:

var pdf = printer.createPdfKitDocument(docDefinition);
pdf.pipe(fs.createWriteStream(filePath));
pdf.end();

// Send the pdf to the client.
var file = fs.createReadStream(filePath);
var stat = fs.statSync(filePath);
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=' + fileName);
file.pipe(res);

И я вижу, что файл фактически создается на сервере, но когда я готов его с помощью createReadStream,Я получаю, что его размер равен 0. Так что что-то повреждено.Есть идеи, что это за проблема и как ее решить?

1 Ответ

0 голосов
/ 10 июня 2018

Файл не поврежден, вы рассматриваете код как синхронный, но все же асинхронный.

Вам нужно подождать, пока файл не будет полностью записан, затем вы можете прочитать его.В любом случае вам не нужно записывать его в файл для отправки контента, если вам не нужен файл для сохранения на диске, вы можете просто перенаправить его на res.

res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=' + fileName);

const pdf = printer.createPdfKitDocument(docDefinition);
pdf.pipe(res);

ЕслиВы хотите сохранить его в файл, а затем прочитать его, вы можете сделать следующее:

const write = fs.createWriteStream('./basics.pdf');
pdfDoc.pipe(write);

write.on('finish', () => {
   fs.createReadStream('./basics.pdf')
      .pipe(res); // 
});

pdfDoc.end();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...