【问题标题】:How to write images from URL to PDFkit?如何将图像从 URL 写入 PDFkit?
【发布时间】:2018-02-23 15:48:42
【问题描述】:

我正在使用 node.js 请求从 URL 获取 JPEG。 然后我将图像转换为 base64 缓冲区并将其写入 pdf 文档:

request({ url: url, encoding: null }, function (error, response, body) {
                        if (!error && response.statusCode == 200) {
                            var img = new Buffer(body, 'base64');
                            pdf.image(img, 0, 0);
                            callback(error, body);
                        }
                    });

我收到以下错误消息:

events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: stream.push() after EOF
    at readableAddChunk (_stream_readable.js:156:17)
    at PDFDocument.Readable.push (_stream_readable.js:134:10)
    at PDFDocument._write (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/document.js:156:12)
    at PDFReference.finalize (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/reference.js:81:21)
    at PDFReference.finalize (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/reference.js:10:59)
    at PDFReference.end (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/reference.js:74:21)
    at JPEG.embed (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/image/jpeg.js:68:16)
    at PDFDocument.image (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/mixins/images.js:34:15)
    at addImage (/Users/assafshamia/Freebird/node/utils/report_generator/dist/all.js:19:6)

【问题讨论】:

  • 会不会是 pdf.end() 被提前调用了?

标签: javascript node.js pdfkit node-pdfkit


【解决方案1】:

您的代码对我来说看起来不错。
然而,这里是 100% 工作的 sn-p:

request({ url, encoding: null }, (error, response, body) => {

    if (!error && response.statusCode === 200) {
        pdf.pipe(fs.createWriteStream('out.pdf'));

        var img = new Buffer(body, 'base64');
        pdf.image(img, 0, 0);

        pdf.end();
    }
});

【讨论】:

    【解决方案2】:

    JS 和Axios 示例:

    async function fetchImage(src) {
        const image = await axios
            .get(src, {
                responseType: 'arraybuffer'
            })
        return image.data;
    }
    
    const logo = await fetchImage("https://i.imgur.com/2ff9bM7.png");
    doc.image(logo, 0, 200);

    【讨论】:

      【解决方案3】:

      TypeScriptnode-fetch 示例:

      const fetchImage = async (src: string) => {
        const response = await fetch(src);
        const image = await response.buffer();
      
        return image;
      };
          
      const logo = await fetchImage("https://i.imgur.com/2ff9bM7.png");
      doc.image(logo, 0, 200);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 2022-08-16
        • 2015-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多