如何使用NodeJS将PDF缓冲区输出到浏览器?

时间:2017-03-29 15:37:57

标签: javascript node.js express pdf buffer

所以我使用html-pdf转换我的html,这是我的代码:

var pdf = require('html-pdf')
var html = 'somehtmlfile.html'

pdf.create(html).toBuffer(function (err, buffer) {
        if (err) {
          console.log(err)
        } else {
          console.log(buffer)
          var pdfBuffer = new Buffer(buffer)
          res.setHeader('Content-disposition', 'inline; filename="test.pdf"');
          res.setHeader('Content-type', 'application/pdf');
          res.send(pdfBuffer)
        }
}

我没有将任何PDF文件作为下载程序,也不会在浏览器中输出任何pdf文件。 console.log(buffer)就是这样:

<Buffer 25 50 44 46 2d 31 2e 34 0a 31 20 30 20 6f 62 6a 0a 3c 3c 0a 2f 54 69 74 6c 65 20 28 fe ff 29 0a 2f 43 72 65 61 74 6f 72 20 28 fe ff 29 0a 2f 50 72 6f ... >

有一种简单的方法吗?或者我做错了吗?

我只想在浏览器中以pdf格式输出缓冲区。

4 个答案:

答案 0 :(得分:1)

更改为:

@media

答案 1 :(得分:0)

  

您可以使用以下功能或html.create(somehtmlfile.html).toStream()

将缓冲区转换为流的函数

 function bufferToStream(buffer) {  
     let stream = new Duplex();
     stream.push(buffer);
     stream.push(null);
     return stream;
   }

如果是流,请在浏览器中下载或查看pdf

var pdf = require('html-pdf')
var html = 'somehtmlfile.html'
exports.generatePdf = (req, res) =>{
    pdf.create(html).toBuffer(function (err, buffer) {
            if (err) {
              console.log(err)
            } else {
              console.log(buffer)

           bufferToStream(buffer).pipe(res)
            }
    }
}

答案 2 :(得分:0)

s2i build file://$(pwd) --exclude="" --copy --keep-symlinks ${S2I_IMAGE} ${IMAGE_TO_BUILD}

答案 3 :(得分:-2)

在客户端尝试一下:

var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";

oReq.onload = function (oEvent) {
    console.log(oReq.response);
    var blob = new Blob([oReq.response], {type: "application/pdf"});
    var win = window.open('', '_blank');
    var URL = window.URL || window.webkitURL;
    var dataUrl = URL.createObjectURL(blob);
    win.location = dataUrl;
};
oReq.send();

在服务器端:

pdf.create(htmlContent).toStream(function(err, stream){
    console.log("in post method"+stream.length);
        res.header('Content-type', 'application/pdf');

        stream.pipe(res);
});