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.
Type Name Latest commit message Commit time
Failed to load latest commit information.

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.


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:
    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.