How to create PDF from HTML in Meteor 1.4.4.2 and 1.5 server side
Following are the steps to create PDF from HTML Template using Meteor 1.4.4.2
-
Download the file and add the packages below
PROJECT/.meteor/packages
meteorhacks:ssr bryanmorgan:webshot
- Make sure that any html page you want to convert to pdf must be present in place
PROJECT/private
as per Meteor 1.4.4.2 guidelines. In this example, the filename isapp_clientagreement.html
(file is plain html). -
We will now create a server side method to generate the PDF. The file is in location
PROJECT\imports\startup\server\methods.js
(make sure you import the filemethod.js
insidePROJECT\imports\startup\server\index.js
asimport './methods.js'
). Inside methods.js write below codeimport { Meteor } from 'meteor/meteor'; import { SSR, Template } from 'meteor/meteorhacks:ssr'; Meteor.methods({ 'generate_pdf'(){ var fs = Npm.require('fs'); var Future = Npm.require('fibers/future'); var fut = new Future(); var fileName = "pokemon-report.pdf"; SSR.compileTemplate('agreement', Assets.getText('app_clientagreement.html')); var html_string = SSR.render('agreement'); var options = { "paperSize": { "format": "Letter", "orientation": "portrait", "margin": "1cm" }, siteType: 'html' }; webshot(html_string, fileName, options, function(err) { fs.readFile(fileName, function (err, data) { if (err) { return console.log(err); } fs.unlinkSync(fileName); fut.return(data); }); }); let pdfData = fut.wait(); let base64String = new Buffer(pdfData).toString('base64'); return base64String; } });
-
To call this method in the Template, for convenience of getting an automatic call, I call it when the template is rendered. The code is below,
Template.App_Agreement.onRendered(function(){ Meteor.call('generate_pdf', function(err, res) { if (err) { console.error(err); } else if (res) { window.open("data:application/pdf;base64, " + res); } }); });
When you call over the template (which is "App_Agreement"), a new tab opens and a PDF is created.
source to share