markdown-pdf
Node module that converts Markdown files to PDFs.
The PDF looks great because it is styled by HTML5 Boilerplate. What? - Yes! Your Markdown is first converted to HTML, then pushed into the HTML5 Boilerplate index.html
. Phantomjs renders the page and saves it to a PDF. You can even customise the style of the PDF by passing an optional path to your CSS and you can pre-process your markdown file before it is converted to a PDF by passing in a pre-processing function, for templating.
Install
npm install -g markdown-pdf
Usage
Usage: markdown-pdf [options] <markdown-file-path>
Options:
-h, --help output usage information
-V, --version output the version number
<markdown-file-path> Path of the markdown file to convert
-c, --cwd [path] Current working directory
-p, --phantom-path [path] Path to phantom binary
-h, --runnings-path [path] Path to runnings (header, footer)
-s, --css-path [path] Path to custom CSS file
-z, --highlight-css-path [path] Path to custom highlight-CSS file
-m, --remarkable-options [json] Options to pass to Remarkable
-f, --paper-format [format] 'A3', 'A4', 'A5', 'Legal', 'Letter' or 'Tabloid'
-r, --paper-orientation [orientation] 'portrait' or 'landscape'
-b, --paper-border [measurement] Supported dimension units are: 'mm', 'cm', 'in', 'px'
-d, --render-delay [millis] Delay before rendering the PDF
-t, --load-timeout [millis] Timeout before the page is rendered in case `page.onLoadFinished` isn't fired
-o, --out [path] Path of where to save the PDF
markdown-pdf
can also be used programmatically:
var markdownpdf = fs = fs // --- OR ---
Options
Pass an options object (markdownpdf({/* options */})
) to configure the output.
options.cwd
Type: String
Default value: process.cwd()
Current working directory.
options.phantomPath
Type: String
Default value: Path provided by phantomjs module
Path to the phantomjs binary.
options.cssPath
Type: String
Default value: [module path]/markdown-pdf/css/pdf.css
Path to custom CSS file, relative to the current directory.
options.highlightCssPath
Type: String
Default value: [module path]/markdown-pdf/css/highlight.css
Path to custom highlight CSS file (for code highlighting with highlight.js), relative to the current directory.
options.paperFormat
Type: String
Default value: A4
'A3', 'A4', 'A5', 'Legal', 'Letter' or 'Tabloid'.
options.paperOrientation
Type: String
Default value: portrait
'portrait' or 'landscape'.
options.paperBorder
Type: String
Default value: 2cm
Supported dimension units are: 'mm', 'cm', 'in', 'px'
options.runningsPath
Type: String
Default value: runnings.js
Path to CommonJS module which sets the page header and footer (see runnings.js).
options.renderDelay
Type: Number
Default value: Time until page.onLoadFinished
event fired
Delay (in ms) before the PDF is rendered.
options.loadTimeout
Type: Number
Default value: 10000
If renderDelay
option isn't set, this is the timeout (in ms) before the page is rendered in case the page.onLoadFinished
event doesn't fire.
options.preProcessMd
Type: Function
Default value: function () { return through() }
A function that returns a through2 stream that transforms the markdown before it is converted to HTML.
options.preProcessHtml
Type: Function
Default value: function () { return through() }
A function that returns a through2 stream that transforms the HTML before it is converted to PDF.
options.remarkable
Type: object
Default value: { breaks: true }
A config object that is passed to remarkable, the underlying markdown parser.
options.remarkable.preset
Type: String
Default value: default
Use remarkable presets as a convenience to quickly enable/disable active syntax rules and options for common use cases.
Supported values are default
, commonmark
and full
options.remarkable.plugins
Type: Array
of remarkable-plugin Function
s
Default value: []
An array of Remarkable plugin functions, that extend the markdown parser functionality.
options.remarkable.syntax
Type: Array
of optional remarkable syntax Strings
s
Default value: []
An array of optional Remarkable syntax extensions, disabled by default, that extend the markdown parser functionality.
API
from.path(path, opts) / from(path, opts)
Create a readable stream from path
and pipe to markdown-pdf. path
can be a single path or array of paths.
from.string(string)
Create a readable stream from string
and pipe to markdown-pdf. string
can be a single string or array of strings.
concat.from.paths(paths, opts)
Create and concatenate readable streams from paths
and pipe to markdown-pdf.
concat.from.strings(strings, opts)
Create and concatenate readable streams from strings
and pipe to markdown-pdf.
to.path(path, cb) / to(path, cb)
Create a writeable stream to path
and pipe output from markdown-pdf to it. path
can be a single path, or array of output paths if you specified an array of inputs. The callback function cb
will be invoked when data has finished being written.
to.buffer(opts, cb)
Create a concat-stream and pipe output from markdown-pdf to it. The callback function cb
will be invoked when the buffer has been created.
to.string(opts, cb)
Create a concat-stream and pipe output from markdown-pdf to it. The callback function cb
will be invoked when the string has been created.
More examples
From string to path
var markdownpdf = var md = "foo===\n* bar\n* baz\n\nLorem ipsum dolor sit" outputPath = "/path/to/doc.pdf" from
From multiple paths to multiple paths
var markdownpdf = var mdDocs = "home.md" "about.md" "contact.md" pdfDocs = mdDocs
Concat from multiple paths to single path
var markdownpdf = var mdDocs = "chapter1.md" "chapter2.md" "chapter3.md" bookPath = "/path/to/book.pdf" concat
Transform markdown before conversion
var markdownpdf = split = through = duplexer = { // Split the input stream by lines var splitter = // Replace occurences of "foo" with "bar" var replacer = splitter return }
Remarkable options and plugins
Example using remarkable-classy plugin:
var markdownpdf = var options = remarkable: html: true breaks: true plugins: syntax: 'footnote' 'sup' 'sub'
Contribute
Feel free to dive in! Open an issue or submit PRs.
License
MIT © Alan Shaw