1

当用户单击前端的按钮时,我在 node.js 项目中使用 PDFKit 和 socket.io 来生成 pdf。如何从此处流式传输或以其他方式将生成的 pdf 发送给最终用户?我宁愿避免将文件保存到文件系统,如果可以的话,以后必须删除它……希望以某种方式流式传输它。

socket.on('customerRequestPDF', function(){              
    doc = new PDFDocument;        

    doc.text('Some text goes here', 100, 100);

    //I could do this but would rather avoid it
    doc.write('output.pdf');

    doc.output(function(string) {
        //ok I have the string.. now what?

    });

});
4

1 回答 1

1

websocket 并不是真正适合传递 PDF 的机制。只需使用常规 HTTP 请求即可。

// assuming Express, but works similarly with the vanilla HTTP server
app.get('/pdf/:token/filename.pdf', function(req, res) {
    var doc = new PDFDocument();
    // ...

    doc.output(function(buf) { // as of PDFKit v0.2.1 -- see edit history for older versions
        res.writeHead(200, {
             'Content-Type': 'application/pdf',
             'Cache-Control': 'private',
             'Content-Length': buf.length
        });
        res.end(buf);
    });
});

现在警告一句:此 PDF 库已损坏。从 0.2.1 版开始,输出是正确的Buffer,但它在binary内部使用不推荐使用的字符串编码而不是Buffers。(以前的版本为您提供了二进制编码的字符串。)来自文档

'binary'- 一种仅使用每个字符的前 8 位将原始二进制数据编码为字符串的方法。这种编码方法已被弃用,应尽可能避免使用Buffer对象。此编码将在 Node.js 的未来版本中删除。

这意味着当节点删除二进制字符串编码时,库将停止工作。

于 2013-04-23T22:32:30.043 回答