grits-plugin-pdf
v0.4.3
Published
A Grits plugin for rendering PDFs
Downloads
13
Maintainers
Readme
This module is a plugin for Grits.js, a static content builder that's designed for ease-of-use. It allows you to render HTML generated by Grits.js to PDF by way of PhantomJS.
Installation
Prerequisites
PhantomJS has a silent dependency on libfontconfig.so.1
(see phantomjs#10904),
and you'll get strange failures until you install that dep. I've not yet discovered
the fix for every platform, but here are the ones I've found:
CentOS
yum install urw-fonts
Ubuntu
sudo apt-get install libfontconfig
Install with NPM
Barring any prerequisites, NPM should be all that you need:
# Global Install
npm install -g grits grits-plugin-pdf
# Project Install
npm install --save grits grits-plugin-pdf
Basic Usage
Loading the Plugin
CLI
grits -v --plugin grits-plugin-pdf .
Config File
{
"plugins": {
"grits-plugin-pdf": { ..pdfConfig.. }
}
}
Programmatic via Constructor
require("grits");
var grits = new Dasix.grits.Renderer({
"plugins": {
"grits-plugin-pdf": pdfConfig
}
});
Programmatic via use()
require("grits");
var grits = new Dasix.grits.Renderer();
grits.use("grits-plugin-pdf", pdfConfig);
There are some subtleties with loading plugins, but they're beyond the scope of this document; see the Grits.js module and its documentation for more info.
Rendering PDFs
To flag a document for PDF rendering, add pdf: true
to its front-matter, like so:
content/mycontent.md
---
pdf: true
---
# Some Great Content
It was a cold day..
Configuration
Here are the configuration options. They're mostly intuitive but I'll write full docs for them later..
{
base : "http://ph.local/", // You can almost certainly ignore this..
type : "pdf", // Output Type, can be: "pdf", "png", or "jpeg"
format : "Letter", // PhantomJS paper size
orientation : "portrait", // Paper orientation
width : "800", // Overrides format when provided
height : "600", // Overrides format when provided
quality : "100", // Image quality; not used by "pdf" output type
timeout : 30000, // PhantomJS page-load timeout
phantomArgs : [], // Additional args to pass to PhantomJS
border : "0.15in", // Page margin, also accepts border { left: "12px" } et al
concurrency : 3, // Maximum number of concurrent PDF render ops
httpHeaders : {}, // Optional headers to pass to PhantomJS
header : { // Optional HTML header to apply to the output
height : "45mm",
contents : "<div style=\"text-align: center;\">Author: Luke C</div>"
},
footer : { // Optional HTML footer to apply to the output
height : "28mm",
contents : "<span style=\"color: #444;\">{{page}}</span>/<span>{{pages}}</span>"
}
}