我在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?
});
});
答案 0 :(得分: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
字符串编码而不是Buffer
s。 (以前的版本为您提供了二进制编码的字符串。)来自docs:
'binary'
- 一种通过仅使用每个字符的前8位将原始二进制数据编码为字符串的方法。不推荐使用此编码方法,应尽可能避免使用Buffer
对象。在将来的Node版本中将删除此编码。
这意味着当节点删除二进制字符串编码时,库将停止工作。