All Downloads are FREE. Search and download functionalities are using the official Maven repository.

os.ui-reports.0.2.3.source-code.htmltopdf.js Maven / Gradle / Ivy

var system = require('system');
var webpage = require('webpage');

// Usage: htmltopdf.js url pdf options
var args = system.args;
var url = args[1];
var pdf = args[2];
var options = JSON.parse(args[3]);

var doRender = function() {
  console.log('doRender :>>');

  var page = webpage.create();

  // typekit workaround
  page.settings.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17';
  page.customHeaders = {
    Referer: url
  };  

  page.viewportSize = options.page.viewportSize;
  page.paperSize = options.page.paperSize;

  if (options.header) {
    var paperSize = page.paperSize;

    var thatHeader = options.header;
    var header = new Function("pageNum", "numPages", thatHeader.contents);
    paperSize.header = {
      height : thatHeader.height,
      contents : phantom.callback(function(pageNum, numPages) {
        return page.evaluate(header, pageNum, numPages);
      })
    }

    page.paperSize = paperSize;
  }

  if (options.footer) {
    var paperSize = page.paperSize;

    var thatFooter = options.footer;
    var footer = new Function("pageNum", "numPages", thatFooter.contents);
    paperSize.footer = {
      height : thatFooter.height,
      contents : phantom.callback(function(pageNum, numPages) {
        return page.evaluate(footer, pageNum, numPages);
      })
    }

    page.paperSize = paperSize;
  }

  var pageOpened = function(status) {
    console.log('pageOpened :>> ' + status);

    var moreOptions = page.evaluate(function() {
      return Way ? Way.htmltopdf : undefined;
    });

    console.log('moreOptions :>> ' + moreOptions);

    if (moreOptions) {
      var paperSize = page.paperSize;

      if (moreOptions.header) {
        var thatHeader = moreOptions.header;

        paperSize.header = {
          height : thatHeader.height,
          contents : phantom.callback(function(pageNum, numPages) {
            return page.evaluate(function(pageNum, numPages) {
              return Way.htmltopdf.header.contents(pageNum, numPages);
            }, pageNum, numPages);
          })
        };
      }

      if (moreOptions.footer) {
        var thatFooter = moreOptions.footer;

        paperSize.footer = {
          height : thatFooter.height,
          contents : phantom.callback(function(pageNum, numPages) {
            return page.evaluate(function(pageNum, numPages) {
              return Way.htmltopdf.footer.contents(pageNum, numPages);
            }, pageNum, numPages);
          })
        };

        console.log('footer :<< ' + page.paperSize.footer);
      }

      page.paperSize = paperSize;
    }

    console.log(page.paperSize.header);
    page.render(pdf);
    phantom.exit();
  };

  page.open(url, pageOpened);
};

var doAuthentication = function(auth) {
  var authPage = webpage.create();

  var authPageOpened = function(status) {
    doRender.apply();
  };

  authPage.open(auth.url, 'post', auth.data, authPageOpened);
};

if (options.authInfo) {
  doAuthentication.apply(this, [ options.authInfo ]);
} else {
  doRender.apply(this);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy