jsreport 渲染到 writableStream
jsreport render to writableStream
我正在尝试让 jsreport 写入一个可写流,如果我在可写流中打印缓冲区,我会得到一个 pdf 描述,但是如果我保存到一个 pdf 文件,我会得到一个 pdf 文件已损坏的错误。
function streamtoPdf(template, callback) {
var ws = new stream;
ws.writable = true;
ws.bytes = 0;
var decoder = new StringDecoder('utf8');
ws.write = function (buf) {
ws.bytes += buf.length;
console.log(buf);
ws.pdf += decoder.write(buf);
}
ws.end = function (buf) {
if (arguments.length) ws.write(buf);
ws.writable = false;
// console.log(ws.pdf)
callback(ws.pdf);
}
renderPDF(template, ws);
}
//create a pdf from a template.
function renderPDF(template, writableStream) {
jsreport.render("<h1>Hello world</h1>").then(function (out) {
out.result.pipe(writableStream);
}).catch(function (e) {
res.end(e.message);
});
}
如果我将 jsreport 与 out.result.pipe(res)
一起使用,我会得到一个带有 hello world 的 pdf,但是我的方法会出错。有人看到我做错了什么吗?
试试这个!
var jsreport = require('jsreport'),
fs = require('fs'),
Stream = require('stream');
function streamtoPdf(template, callback) {
var ws = new Stream.Writable;
var bufs = []
ws.write = function(buf) {
bufs.push(buf);
}
ws.end = function(buf) {
if (arguments.length) {
bufs.push(buf)
}
ws.pdf = Buffer.concat(bufs);
ws.writable = false;
callback(ws.pdf);
}
renderPDF(template, ws);
}
//create a pdf from a template.
function renderPDF(template, writableStream) {
jsreport.render("<h1>Hello world</h1>").then(function(out) {
out.result.pipe(writableStream);
}).catch(function(e) {
res.end(e.message);
});
}
streamtoPdf('', function(wStream) {
//console.log(wStream)
fs.writeFile('myPdf', wStream, function(err) {
if (err) throw err;
console.log('It\'s saved!');
});
});
第一个问题是 "ws.pdf" 最初是未定义的,因此导致 pdf 中出现意外的 "undefined" 单词并导致损坏!
无论如何,真正的问题是你在回调中有一个缓冲区并且你编码为 utf8 所以即使创建了 pdf 它也是空白的!
我正在尝试让 jsreport 写入一个可写流,如果我在可写流中打印缓冲区,我会得到一个 pdf 描述,但是如果我保存到一个 pdf 文件,我会得到一个 pdf 文件已损坏的错误。
function streamtoPdf(template, callback) {
var ws = new stream;
ws.writable = true;
ws.bytes = 0;
var decoder = new StringDecoder('utf8');
ws.write = function (buf) {
ws.bytes += buf.length;
console.log(buf);
ws.pdf += decoder.write(buf);
}
ws.end = function (buf) {
if (arguments.length) ws.write(buf);
ws.writable = false;
// console.log(ws.pdf)
callback(ws.pdf);
}
renderPDF(template, ws);
}
//create a pdf from a template.
function renderPDF(template, writableStream) {
jsreport.render("<h1>Hello world</h1>").then(function (out) {
out.result.pipe(writableStream);
}).catch(function (e) {
res.end(e.message);
});
}
如果我将 jsreport 与 out.result.pipe(res)
一起使用,我会得到一个带有 hello world 的 pdf,但是我的方法会出错。有人看到我做错了什么吗?
试试这个!
var jsreport = require('jsreport'),
fs = require('fs'),
Stream = require('stream');
function streamtoPdf(template, callback) {
var ws = new Stream.Writable;
var bufs = []
ws.write = function(buf) {
bufs.push(buf);
}
ws.end = function(buf) {
if (arguments.length) {
bufs.push(buf)
}
ws.pdf = Buffer.concat(bufs);
ws.writable = false;
callback(ws.pdf);
}
renderPDF(template, ws);
}
//create a pdf from a template.
function renderPDF(template, writableStream) {
jsreport.render("<h1>Hello world</h1>").then(function(out) {
out.result.pipe(writableStream);
}).catch(function(e) {
res.end(e.message);
});
}
streamtoPdf('', function(wStream) {
//console.log(wStream)
fs.writeFile('myPdf', wStream, function(err) {
if (err) throw err;
console.log('It\'s saved!');
});
});
第一个问题是 "ws.pdf" 最初是未定义的,因此导致 pdf 中出现意外的 "undefined" 单词并导致损坏! 无论如何,真正的问题是你在回调中有一个缓冲区并且你编码为 utf8 所以即使创建了 pdf 它也是空白的!