node.js - 如何在 Express.js 中读取和生成 pdf?
问题描述
我在 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。所以有些东西被破坏了。知道问题可能是什么以及如何解决吗?
解决方案
该文件没有损坏,您将代码视为同步的,但是是异步的。
您必须等到文件完全写入,然后才能读取它。无论如何,您无需将其写入文件即可发送内容,如果您不需要将文件保存在磁盘上,则可以将其通过管道传输到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();
推荐阅读
- string - 在火花数据框中如何使用scala将字符串类型的日期列转换为日期类型的日期列
- python - 编写“python manage.py makemigrations”时出现一条很长的错误消息,说明语法无效
- sql-server - 导入到文本文件 sql 时,选择的列显示 2 行
- python - 在 python 中检查列表项是否为 mo/dd/yy 格式?
- python - 硒的自定义命令循环?
- c++ - OpenMP 编译错误:“reduction”对“#pragma omp taskloop”无效
- dart - 在飞镖中克隆一个新地图
- intellij-idea - 在 intellij 中固定时缩小标签大小
- sql - 调整存储过程
- python - Pandas:将数据框旋转到每个用户(组)一行