无法使用Node.js webapp中的Prawn PDF图像获取PDF

时间:2013-05-14 10:51:14

标签: node.js prawn

我在node.js webapp中使用Prawn PDF来动态生成PDF并将其发送回用户。只要PDF文档中没有图像,它就可以正常工作。当我在pdf中包含图像(png或jpeg)时,生成的节点子进程永远不会得到“退出”消息。

在shell中运行时,相同的ruby脚本会按预期输出带有图像的pdf。不知何故,当通过stdout发送时,图像数据似乎搞砸了!我必须逃脱吗?

谢谢, 马诺

var spawn = require('child_process').spawn;
var child = spawn('ruby', ['print_scripts/print.rb', doc_id]);
var pdf = '';

child.stdout.on('data', function(data){
    if(data.toString() != 'ERROR'){
    pdf += data;
    }
});
child.on('exit', function(code){
    res.setHeader('Content-Type', 'application/pdf');
    if(code == 0){
    res.send(pdf);
    }
});

1 个答案:

答案 0 :(得分:2)

在我做过的简单测试中,甚至在调用exit之前调用了data。这可能与此通知有关:"Note that the child process stdio streams might still be open."(这可能意味着内部缓冲区中仍有数据需要读取)。

当您不使用图像时,输出可能足够小以适合单个缓冲区,因此不会出现问题。而不是exit你可能应该抓住close事件。

在您的代码(pdf += data)中还存在隐式转换为字符串的问题,这也可能导致问题。

我认为这会奏效:

var chunks = [];

child.stdout.on('data', function(data) {
  // insert error check here...
  chunks.push(data);
});
child.on('close', function() {
  var pdf = Buffer.concat(chunks);
  res.send(pdf);
});