const PDF = require("pdfkit");
const fs = require("fs");
const express = require("express");
const app = express();
app.get("/", (req, res) => {
try {
const doc = new PDF({ size: "A4" });
doc.image("/home/rahul/Desktop/projects/test/test/vlogo.png", 10, 0, {
width: 100,
height: 100,
align: "left",
});
doc.pipe(
fs.createWriteStream("/home/rahul/Desktop/projects/test/test/doc.pdf")
);
doc.end();
res.sendFile("/home/rahul/Desktop/projects/test/test/doc.pdf");
} catch (error) {
console.log(error);
res.status(500).sendFile("Rahul");
}
});上述代码没有向浏览器发送任何响应。
当我在浏览器中加载API时,我就得到了这个API。

但是,当我删除doc.pipe代码时,它就正常工作了。它在发送PDF。
你可以试着评论
// doc.pipe(
// fs.createWriteStream("/home/rahul/Desktop/projects/test/test/doc.pdf")
// );发布于 2021-12-06 14:20:07
当调用doc.end()时,pdf将需要一段时间才能写入磁盘上。因此,您基本上是发送一个“半书面”pdf文件,结果是一个无效的文件。所以,等待创建的WriteStream先完成:
const PDF = require("pdfkit");
const fs = require("fs");
const express = require("express");
const app = express();
app.get("/", (req, res) => {
try {
const doc = new PDF({ size: "A4" });
doc.image("/home/rahul/Desktop/projects/test/test/vlogo.png", 10, 0, {
width: 100,
height: 100,
align: "left",
});
const stream = fs.createWriteStream("/home/rahul/Desktop/projects/test/test/doc.pdf")
stream.on('finish', () => {
// now, the file is fully written to disk. Let's send it back!.
res.sendFile("/home/rahul/Desktop/projects/test/test/doc.pdf");
})
stream.on('error', err => {
console.error(err)
res.status(500).send("Failed to send pdf.")
})
doc.pipe(stream);
// start writing to file!.
doc.end();
} catch (error) {
console.log(error);
res.status(500).send("Server error occured.");
}
});https://stackoverflow.com/questions/70246488
复制相似问题