【问题标题】:Save return response from api call to a PDF in Javascript将来自 api 调用的返回响应保存到 Javascript 中的 PDF
【发布时间】:2021-05-21 08:19:28
【问题描述】:

我正在通过 RingCentral Api 进行制作,并且通过节点请求得到以下响应。我试图弄清楚如何保存响应(应该是 PDF 源),以便我可以打开它。

这是响应。

Response {
  size: 0,
  timeout: 0,
  [Symbol(Body internals)]: {
    body: PassThrough {
      _readableState: [ReadableState],
      readable: true,
      _events: [Object: null prototype],
      _eventsCount: 5,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: true,
      allowHalfOpen: true,
      _transformState: [Object],
      [Symbol(kCapture)]: false
    },
    disturbed: false,
    error: null
  },
  [Symbol(Response internals)]: {
    url: 'https://platform.ringcentral.com/restapi/v1.0/account/~/extension/1234/message-store/1234/content/1234?contentDisposition=Inline',
    status: 200,
    statusText: 'OK',
    headers: Headers { [Symbol(map)]: [Object: null prototype] },
    counter: 0
  }
}

这是代码:

    let getMessageContent = await platform.get('/restapi/v1.0/account/~/extension/'+accountId+'/message-store/'+attachId+'/content/'+attachId, {
        contentDisposition: ['Inline']
    })
    let jsonMessageContent = await getMessageContent.headers
        console.log(jsonMessageContent)

如果我在 post man 中运行 URL,我可以看到以这种方式显示的 PDF。

在 Postman 中(这只是一个例子)

%PDF-1.3
%����
1 0 obj 
<<
/Pages 2 0 R
/Type /Catalog
>>
endobj 
2 0 obj 
<<
/Kids [3 0 R]
/Count 1
/Type /Pages
>>
endobj 
3 0 obj 
<<
/CropBox [0 0 609.882 818.449]
/Parent 2 0 R
/Thumb 4 0 R
/MediaBox [0 0 609.882 818.449]
/Resources 
<<
/XObject 

有什么想法吗?

【问题讨论】:

    标签: javascript node.js api pdf


    【解决方案1】:

    过去,当我需要创建一个端点来获取某些信息(其中一些来自同一个请求),生成一个 PDF 文件并将其作为其响应时,我发现 PDFkit 是强大的盟友。其主要原因很简单:它的文档足以完成工作。唯一的问题是,让同样的工作看起来稍微不错是相当乏味的。 要生成您的 PDF,我建议使用类似于以下内容的 pdfCreatorMethod()

    const PDFDocument = require("pdfkit");
    const fs = require("fs");
    
    const doc = new PDFDocument({ autoFirstPage: false });
    
    doc.pipe(fs.createWriteStream('PATH/TO/YOUR/PDF'));
    
    doc.registerFont("Helvetica", "client/assets/fonts/Helvetica-01.ttf");
    doc.registerFont(
    "HelveticaBold",
    "client/assets/fonts/Helvetica-Bold-02.ttf"
    );
    
    doc.font("Helvetica").fontSize(10).fillColor("#80B3BD").text("", 70, 80, {
    width: 100,
    align: "left",
    lineBreak: true,
    });
    
    /**
     * ADD WHATEVER YOU WANT TO YOUR FILE
     */
    
    doc.end();
    

    允许您在文档中包含所需的任何信息。在此之后,您将只需要您的路线来提供您创建的文件的路径:

    router.put("/mypdf", async (req, res) => {
        try {
          pdfCreatorMethod(req);
          res.set("Content-Type", "application/pdf");
          return res.status(201).sendFile('PATH/TO/YOUR/PDF');
        } catch (e) {
          console.error(e);
          return res.status(500).send({ error: e.message });
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多