最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to output a PDF buffer to browser using NodeJS? - Stack Overflow

programmeradmin2浏览0评论

So I am using html-pdf to convert my html and here is my code:

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)
        }
}

I am not getting any PDF file to be downloader nor any output of a pdf file in the browser. The console.log(buffer) is this:

<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 ... >

Is there a simple way of doing this? Or am I doing it wrong?

I just want to output the buffer in a pdf form in the browser.

So I am using html-pdf to convert my html and here is my code:

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)
        }
}

I am not getting any PDF file to be downloader nor any output of a pdf file in the browser. The console.log(buffer) is this:

<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 ... >

Is there a simple way of doing this? Or am I doing it wrong?

I just want to output the buffer in a pdf form in the browser.

Share Improve this question edited Mar 29, 2017 at 16:01 wobsoriano asked Mar 29, 2017 at 15:37 wobsorianowobsoriano 13.4k25 gold badges103 silver badges177 bronze badges 2
  • Which lib is this that you are using to create the PDF (pdf.create)? – Diego ZoracKy Commented Mar 29, 2017 at 16:00
  • @DiegoZoracKy uhm I just said it in the post – wobsoriano Commented Mar 29, 2017 at 16:01
Add a comment  | 

5 Answers 5

Reset to default 6

Change to:

pdf.create(html).toStream(function(err, stream) {
    if (err) {
        console.log(err)
    } else {
        res.set('Content-type', 'application/pdf');
        stream.pipe(res)
    }
});

you can use the below function or html.create(somehtmlfile.html).toStream()

function to convert a buffer to stream

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

download or view a pdf in browser if it's a stream

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)
            }
    }
}
pdf.create(html).toBuffer(function (err, buffer) {
    if (err) {
        console.log(err)
    } else {
        console.log(buffer)
        res.header('Content-type', 'application/pdf')
        res.send(buffer)
    }
}
function bufferToStream(buffer) {
          let stream = new Duplex();
          stream.push(buffer);
          stream.push(null);
          return stream;
        }

        pdf.create(doctoPdf).toBuffer(function (err, buffer) {
          if (err) {
            console.log(err)
          } else {
            console.log("buffer");
            console.log(buffer)
            res.contentType('application/pdf')
            res.attachment()
            return bufferToStream(buffer).pipe(res)

          }
        })

if you want to download it on the client-side then this will be help full.

Try this in client side:

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();

In server Side:

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

        stream.pipe(res);
});
发布评论

评论列表(0)

  1. 暂无评论