How to create PDF from HTML in Meteor 1.4.4.2 and 1.5 server side

I am facing problems while generating PDF from HTML in Meteor 1.4.4.2 and 1.5 which is the latest version up to date.

I want to know how to create a PDF from HTML server side?

+3


source to share


1 answer


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 is app_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 file method.js

    inside PROJECT\imports\startup\server\index.js

    as import './methods.js'

    ). Inside methods.js write below code

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

+2


source







All Articles