2014-03-13 73 views
0

我有以下代碼在Node中產生我的子進程。它效果很好。如果我只是返回文本,它會直接下載。這是當我嘗試返回PDF時,一切都出錯了。由於nodejs spawn child process ruby​​ prawn pdf

代碼的NodeJS

exports.generateReportCard = function(req,res){ 
    var jsonData = '{ property: abc }'; 
    var spawn = require('child_process').spawn; 
    var child = spawn('ruby', ['utilities/schedule.rb', jsonData]); 
    var pdf = ''; 

    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.setHeader('Content-Type', 'application/text'); 
    res.send(pdf); 
    }); 
}; 

被稱爲紅寶石文件是非常非常簡單。但我似乎無法得到pdf二進制文件。

require 'rubygems' 
require 'prawn' 

pdf = Prawn::Document.new 
pdf.text "Hello World" 
puts pdf.render_file "assignment.pdf" 

回答

0

看來你想捕獲標準輸出並將其作爲有效載荷發送給客戶端。捕獲的內容旨在爲PDF文檔,但是,

puts pdf.render_file "assignment.pdf" 

打印pdf.render_file(...)返回值(這是nil)到標準輸出,你居然什麼也得不到。

您可以使用render方法,因爲您不需要將內容存儲到文件。

require 'rubygems' 
require 'prawn' 

pdf = Prawn::Document.new 
pdf.text "Hello World" 
pdf.render(STDOUT) 
0

感謝您讓我走上正確的道路。

這裏是工作

pdf = Prawn::Document.new 
pdf.text "Hello World" 
puts pdf.render 
紅寶石