0

My database contains 600000 rows. I have to read the data from Database page wise(1000 records par page). Then generate the pdf on the fly and stream it as downloadable pdf using node.js

Somnath
  • 3,187
  • 4
  • 26
  • 41

1 Answers1

1

I have done it in a sample Hello world code.

Idea from the link: Serve dynamically generated PDF with remote images in Node.js

Here is my code.

var express = require('express'),
  request = require('request'),
  expressJSON = require('express-json'),
  pdfDocument = require('pdfkit');

// Start Express
var app = express();

// Use JSON in POST body
app.use(expressJSON());

// Setup POST response
app.get('/post_pdf', function(req, res) {
  // Create PDF
  var doc = new pdfDocument();

  // Write headers
  res.writeHead(200, {
    'Content-Type': 'application/pdf',
    'Access-Control-Allow-Origin': '*',
    'Content-Disposition': 'attachment; filename=Untitled.pdf'
  });

  // Pipe generated PDF into response
  doc.pipe(res);

  // Process image
  request({
    url: 'http://dummyimage.com/640.jpeg',
    encoding: null // Prevents Request from converting response to string
  }, function(err, response, body) {
    if (err) throw err;
    var idx =0;

    var fource2Stream = function(){
      idx++;
      if(idx >= 10) {
        doc.end(); // Close document and, by extension, response
        return;
      }

      doc.addPage();
      // Inject image
      doc.image(body); // `body` is a Buffer because we told Request
                       // to not make it a string
      doc.addPage();
      doc.text ('Hello world!', 100, 100);

      doc.addPage();
      doc.text('Hello world!', 100, 100);

      doc.flushPages();
      setTimeout(fource2Stream, 5000);
    };

    fource2Stream();
    return;
  });
});

app.listen(8080);
Community
  • 1
  • 1
Somnath
  • 3,187
  • 4
  • 26
  • 41