Skip to content
PDF Generation for Node.js using handlebars and less
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
phantom
test/lib
.gitignore
Changelog.md
LICENSE
README.md
index.js
package.json

README.md

Phantom PDF

A very opinionated PDF generation using PhantomJS written for Node.js. This is a push to get it out there. Unit tests and better documentation to come.

Installing

Make sure you have PhantomJS installed. Download link can be found on their website.

npm install phantom-pdf

Rendering a PDF

  var PhantomPDF = require('phantom-pdf');

  var manifest = {
    phantomjsPath: __dirname+'/node_modules/phantomjs/bin/phantomjs', // Optional
    templates: {
      body: __dirname+'/templates/body.hbs', // Body is required as its the entry point
      // If header is defined it will be the page header
      // Note: phantomSettings.paperSize.header.height must also be set
      header: __dirname+'/templates/header.hbs',
      // If footer is defined it will be the page header
      // Note: phantomSettings.paperSize.footer.height must also be set
      footer: __dirname+'/templates/footer.hbs',
      // This is an example of having a parcial view
      product: __dirname+'/templates/product.hbs'
    },
    helpers: __dirname+'/helpers/index.js', // Handlebars helper
    helperVariables: {}, // Additional data to be passed in the helper such as local
    less: __dirname + '/less/index.less', // Less file to render into css
    output: '/tmp/foo.pdf', // This is the destination of the newly created PDF
    // Settings to be passed into phantom
    // List of settings: http://phantomjs.org/api/webpage/
    phantomSettings: {
      paperSize: {
        format: 'Letter',
        orientation: 'portrait',
        margin: {
          top: '0.25in',
          right: '0.5in',
          bottom: '0.25in',
          left: '0.5in'
        },
        header: {
          height: '0.5in'
        },
        footer: {
          height: '0.5in'
        }
      }
    }
  };

  var data = { // Put any data you want to be exposed to your handlebars template
    products: ['soccer ball', 'baseball', 'football'],
    category: 'Balls'
  };
  var pdf = new PhantomPDF(manifest, data, function(err){
    ...
  });

For debug

Save in a temp html file for develop

var manifest = {
    output: '/tmp/foo.html'
    ...,
    isDebug: true
}
You can’t perform that action at this time.