首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsreport呈现给writableStream

jsreport呈现给writableStream
EN

Stack Overflow用户
提问于 2015-05-27 21:17:18
回答 1查看 794关注 0票数 0

我试图让jsreport写入一个writablestream,如果我在writablestream中打印缓冲区,我会得到一个pdf数据,但是如果我保存到一个pdf文件中,我会得到一个错误,即pdf文件已经损坏。

代码语言:javascript
复制
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);
    });
}

如果我在out.result.pipe(res)中使用jsreport,我会得到一个hello world的pdf,但是用我的方法我会得到一个错误。有人看到我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 01:52:40

尝尝这个!

代码语言:javascript
复制
 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中,并导致腐败!无论如何,真正的问题是,您在回调中获得了一个缓冲区,并将其编码到utf8中,所以即使创建了pdf,它也是空白的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30493305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档