我有以下代码来在Node中生成我的子进程。而且效果很好。如果我只是返回文本,它会直接下载。当我试图返回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"
似乎您想要捕获标准输出并将其作为有效负载发送给客户机。然而,捕获的内容旨在成为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)
谢谢你指引我走上正确的道路。
这是工作的ruby
pdf = Prawn::Document.new
pdf.text "Hello World"
puts pdf.render