我有以下代码在Node中生成我的Child Process。而且效果很好。如果我只是返回文本,它会直接下载。当我试图返回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);
});
};
调用的ruby文件非常简单。但我似乎无法获得PDF格式的二进制文件。
require 'rubygems'
require 'prawn'
pdf = Prawn::Document.new
pdf.text "Hello World"
puts pdf.render_file "assignment.pdf"
答案 0 :(得分: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)
答案 1 :(得分:0)
感谢您让我走上正确的道路。
这是有效的红宝石
pdf = Prawn::Document.new
pdf.text "Hello World"
puts pdf.render