Reputation: 1459
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
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
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