【问题标题】:Not able to send PDF from express to browser or postman无法将 PDF 从快递发送到浏览器或邮递员
【发布时间】:2021-12-06 13:46:09
【问题描述】:
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 时,我得到了这个。

但是,当我删除 doc.pipe 代码时,它工作正常。它正在发送 PDF。

你可以评论试试

    // doc.pipe(
    //   fs.createWriteStream("/home/rahul/Desktop/projects/test/test/doc.pdf")
    // );

【问题讨论】:

    标签: node.js pdfkit


    【解决方案1】:

    调用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.");
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 2022-01-25
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多