Max
Max

Reputation: 1459

HTML and CSS to PDF in JavaScript

I know there are a bunch of libraries out there but none seem to exactly match my scenario. So I'm hoping to get some advice here...

technologies: I'm using Node.js on Express.js for the backend, and html/css/js for the front-end. Browser support is IE8 and up, chrome, FF, and other modern browsers.

What I need to do is: have a "to pdf" button for the user to click, which would then convert a chunk of the DOM to pdf. This chunk of DOM's html is generated dynamically when the back-end makes API calls to another app. The CSS is static.

Other than these, I have a lot of freedom to do whatever I want, as long as I don't have to send clear text data to third parties and etc.

Any recommended ways to do it?


Update: looking into wkhtmltopdf

Upvotes: 6

Views: 2874

Answers (2)

Max
Max

Reputation: 1459

Basically, this is what I ended up doing

console.log("before");
fs.writeFile(html_filename, html, function (err) {
  if (err) {res.writeHead(400); res.end("" + err); return;}

  console.log("wrote html fine; now converting");
  exec('wkhtmltopdf ' + html_filename + ' ' + pdf_filename, function (err, stdout, stderr) {
    if (err) {res.writeHead(400); res.end("" + err); return;}

    console.log("converted; now reading");
    fs.readFile(pdf_filename, function (err, data) {
      if (err) {res.writeHead(400); res.end("" + err); return;}

      console.log("read fine; now serving");
      res.writeHead(200, {"content-type" : "application/pdf"});
      res.end(data);
    });
  });
});

IMO it's a bit ugly as it requires making a file, then converting it, and then serving it, and finally delete the two. I suspect scalability problems here. Also wkhtmltopdf seems to not play nice with osx. There's no such problem on linux though.

Upvotes: 5

Julien
Julien

Reputation: 9216

Try wkhtmltopdf . You can easily look at the current implementation of the driver for Ruby on Rails and apply it to node and express. You basically call a command line app and it will be converted to a PDF using your print CSS.

Upvotes: 0

Related Questions