This is the swiss army knife of html to pdf render'ers.
ejs, mustache, handlebars, pug, or haml to PDF
-
I have an HTML file/page that I need to convert into a pdf, save it to local filesystem, S3, or get back a buffer.
-
I have an HTML template and data written in ejs, mustache, handlebars, pug, or haml, and I need to make a pdf out of it, and upload it to S3 or filesystem, or buffer
basic usage if you have pdftk installed
npm install html-template-pdf
var templateToPdf = require('html-template-pdf')
var options = {
html: "<div><p>hello der</p></div>",
fileName: 'howdycolton.pdf',
filePath: '/Users/myname/Desktop/baaay/'
}
templatetoPdf(options)
.then(function(resp){
console.log(resp);
})
.catch(function(err){
console.log(err);
});
var options = {
html: "<div><p>hello der</p></div>",
fileName: 'howdycolton.pdf',
buffer = true
}
have your creds in ~/.aws/credentials
structure credentials file to look like
[default]
aws_access_key_id = YOURACCESSKEYID
aws_secret_access_key = YOURSECRETACCESSKEY
var options = {
html: "<div><p>hello der</p></div>",
fileName: 'howdycolton.pdf',
aws: {
s3: true,
bucket: 'pdf-err/meow/baby'
}
}
currently there is support for Handlebars, Mustache, EJS, HAML, PUG
Mkae sure you change the templateType
to the template you are using.
var options = {
templateOptions: {
template: '<p>{{basic}}</p>',
templateData: { basic: 'hello world' },
templateType: 'Handlebars'
},
aws: {
s3: true,
bucket: 'pdf-err/meow/baby'
}
}
we use the html-pdf library for pdf generation. They accept a list of arguments for the pdf that you could optionally pass in
var options = {
templateOptions: {
template: '<p>{{basic}}</p>',
templateData: { basic: 'hello world' },
templateType: 'Handlebars'
},
aws: {
s3: true,
bucket: 'pdf-err/meow/baby'
},
pdfOptions: {
format: 'Letter'
}
}
var options = {
templateOptions: {
template: '<p>{{basic}}</p>',
templateData: { basic: 'hello world' },
templateType: 'Handlebars'
},
aws: {
s3: true,
bucket: 'pdf-err/meow/baby'
},
pdfOptions: {
// Papersize Options: http://phantomjs.org/api/webpage/property/paper-size.html
"height": "10.5in", // allowed units: mm, cm, in, px
"width": "8in", // allowed units: mm, cm, in, px
- or -
"format": "Letter", // allowed units: A3, A4, A5, Legal, Letter, Tabloid
"orientation": "portrait", // portrait or landscape
// Page options
"border": "0", // default is 0, units: mm, cm, in, px
- or -
"border": {
"top": "2in", // default is 0, units: mm, cm, in, px
"right": "1in",
"bottom": "2in",
"left": "1.5in"
},
"header": {
"height": "45mm",
"contents": '<div style="text-align: center;">Author: Marc Bachmann</div>'
},
"footer": {
"height": "28mm",
"contents": {
first: 'Cover page',
2: 'Second page' // Any page number is working. 1-based index
default: '<span style="color: #444;">{{page}}</span>/<span>{{pages}}</span>', // fallback value
last: 'Last Page'
}
},
// Rendering options
"base": "file:///home/www/your-asset-path", // Base path that's used to load files (images, css, js) when they aren't referenced using a host
// Zooming option, can be used to scale images if `options.type` is not pdf
"zoomFactor": "1", // default is 1
// File options
"type": "pdf", // allowed file types: png, jpeg, pdf
"quality": "75", // only used for types png & jpeg
// Script options
"phantomPath": "./node_modules/phantomjs/bin/phantomjs", // PhantomJS binary which should get downloaded automatically
"phantomArgs": [], // array of strings used as phantomjs args e.g. ["--ignore-ssl-errors=yes"]
"script": '/url', // Absolute path to a custom phantomjs script, use the file in lib/scripts as example
"timeout": 30000, // Timeout that will cancel phantomjs, in milliseconds
// HTTP Headers that are used for requests
"httpHeaders": {
// e.g.
"Authorization": "Bearer ACEFAD8C-4B4D-4042-AB30-6C735F5BAC8B"
}
}
}
we are using pdftk. go to their website https://www.pdflabs.com/tools/pdftk-server/ to download. If on OSX use this https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_server-2.02-mac_osx-10.11-setup.pkg
by default we are using the command line call, but you may pass in an optional path if you are having trouble rendering a pdf
var options = {
html: "<div><p>hello der</p></div>",
fileName: 'howdycolton.pdf',
pdftkPath: '/usr/local/bin/pdftk',
buffer: true
}
var options = {
html: "<div><p>hello der</p></div>",
fileName: 'howdycolton.pdf',
pdftkOptions: {
owner_pw: 'somepassword',
allow: ['DegradedPrinting', 'CopyContents', 'Printing']
}
}
Run pdftk --help
from the machine running the service to see additional parameters that can be passed in.