使用 PDFKIT 和 Strapi (Koa) 将 pdf 传输到 http 响应

问题描述

我只想返回 pdf 以响应我的 Strapi 端点上的 GET 请求。 Strapi 使用 Koa,Strapi 控制器 atm 如下所示:

UPDATE Account Ex
Set[1f9ae786-9aae-4478-8254-3b683804ccfa] = 'New'
WHERE [1f9ae786-9aae-4478-8254-3b683804ccfa] COLLATE sql_latin1_General_CP1_CS_AS = 'NEW' AND 'new'

我认为问题在于 doc.end() 在构建文档之前关闭了流。

解决方法

我能够使用 pdfmake 和缓冲区使其工作。应该与 pdfkit 类似。

const PDFDocument = require('pdfmake');
module.exports = {
  async printOne(ctx) {
    const printer = new PDFDocument()

    const docDefinition = {
      content: [
        'First paragraph','Another paragraph,this time a little bit longer.'
      ]
    };

    const pdfDoc = printer.createPdfKitDocument(docDefinition);

    let buffers = [];
    pdfDoc.on('data',buffers.push.bind(buffers));
    pdfDoc.on('end',() => {
      let pdfData = Buffer.concat(buffers);
      ctx.set('Content-Type','application/pdf')
      ctx.set('Content-disposition',`attachment;filename=docname.pdf`)
      ctx.body = pdfData
    });

    pdfDoc.end();
  }
};