‚̧Neverending Plethora of Modules
    Have ideas to improve npm?Join in the discussion! ¬Ľ

    markdown-pdf
    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/markdown-pdf package

    10.0.0¬†‚Äʬ†Public¬†‚Äʬ†Published

    markdown-pdf Build Status Dependency Status Coverage Status

    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 --ignore-scripts

    Note: elevated (sudo) permissions may be needed for npm install -g

    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 = require("markdown-pdf")
      , fs = require("fs")
     
    fs.createReadStream("/path/to/document.md")
      .pipe(markdownpdf())
      .pipe(fs.createWriteStream("/path/to/document.pdf"))
     
    // --- OR ---
     
    markdownpdf().from("/path/to/document.md").to("/path/to/document.pdf", function () {
      console.log("Done")
    })

    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 Functions Default value: []

    An array of Remarkable plugin functions, that extend the markdown parser functionality.

    options.remarkable.syntax

    Type: Array of optional remarkable syntax Stringss 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 = require("markdown-pdf")
     
    var md = "foo===\n* bar\n* baz\n\nLorem ipsum dolor sit"
      , outputPath = "/path/to/doc.pdf"
     
    markdownpdf().from.string(md).to(outputPath, function () {
      console.log("Created", outputPath)
    })

    From multiple paths to multiple paths

    var markdownpdf = require("markdown-pdf")
     
    var mdDocs = ["home.md", "about.md", "contact.md"]
      , pdfDocs = mdDocs.map(function (d) { return "out/" + d.replace(".md", ".pdf") })
     
    markdownpdf().from(mdDocs).to(pdfDocs, function () {
      pdfDocs.forEach(function (d) { console.log("Created", d) })
    })

    Concat from multiple paths to single path

    var markdownpdf = require("markdown-pdf")
     
    var mdDocs = ["chapter1.md", "chapter2.md", "chapter3.md"]
      , bookPath = "/path/to/book.pdf"
     
    markdownpdf().concat.from(mdDocs).to(bookPath, function () {
      console.log("Created", bookPath)
    })

    Transform markdown before conversion

    var markdownpdf = require("markdown-pdf")
      , split = require("split")
      , through = require("through")
      , duplexer = require("duplexer")
     
    function preProcessMd () {
      // Split the input stream by lines
      var splitter = split()
     
      // Replace occurences of "foo" with "bar"
      var replacer = through(function (data) {
        this.queue(data.replace(/foo/g, "bar") + "\n")
      })
     
      splitter.pipe(replacer)
      return duplexer(splitter, replacer)
    }
     
    markdownpdf({preProcessMd: preProcessMd})
      .from("/path/to/document.md")
      .to("/path/to/document.pdf", function () { console.log("Done") })

    Remarkable options and plugins

    Example using remarkable-classy plugin:

    var markdownpdf = require("markdown-pdf")
     
    var options = {
        remarkable: {
            html: true,
            breaks: true,
            plugins: [ require('remarkable-classy') ],
            syntax: [ 'footnote', 'sup', 'sub' ]
        }
    }
     
    markdownpdf(options)
      .from("/path/to/document.md")
      .to("/path/to/document.pdf", function () { console.log("Done") })

    Contribute

    Feel free to dive in! Open an issue or submit PRs.

    License

    MIT © Alan Shaw

    Install

    npm i markdown-pdf

    DownloadsWeekly Downloads

    4,348

    Version

    10.0.0

    License

    MIT

    Unpacked Size

    253 kB

    Total Files

    45

    Last publish

    Collaborators

    • avatar