node.js - 无法在 Node.js Web 应用程序中从 Prawn PDF 获取包含图像的 PDF

标签 node.js prawn

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

相同的 ruby​​ 脚本在 shell 中运行时会按预期输出带有图像的 pdf。不知怎的,当通过标准输出发送图像数据时,图像数据似乎变得困惑!我必须逃避它吗?

谢谢, 马诺

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);
    }
});

最佳答案

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

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

代码中还存在隐式转换为字符串的问题 (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);
});

关于node.js - 无法在 Node.js Web 应用程序中从 Prawn PDF 获取包含图像的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16541255/

相关文章:

ruby-on-rails - 使用包含图像的 Prawto 生成 PDF

javascript - 通知服务器有关图像上传的 Azure Blob

node.js - Baucis - 找不到路由器文档方法

node.js - Postman 可以工作,但 Fetch 不能。我究竟做错了什么?

ruby-on-rails - 将 chart.js Canvas 导出到 Rails 中的 prawn-pdf

ruby - 如何在 Prawn 表中按单词换行

ruby-on-rails - Prawn 如何使用 Prawn 填写表格字段?

JavaScript:如何以既能在 Node.js 上又能在浏览器上运行的方式包含文件?

node.js - 带有 gzip header 的 Node JS ElasticSearch

ruby-on-rails - ruby Prawn gem ,餐 table 位置