当前位置: 首页 > 软件库 > 应用工具 > >

markdown-pdf

📄 Markdown to PDF converter
授权协议 MIT License
开发语言 JavaScript
所属分类 应用工具
软件类型 开源软件
地区 不详
投 递 者 蔚学林
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

markdown-pdf 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: StringDefault value: process.cwd()

Current working directory.

options.phantomPath

Type: StringDefault value: Path provided by phantomjs module

Path to the phantomjs binary.

options.cssPath

Type: StringDefault value: [module path]/markdown-pdf/css/pdf.css

Path to custom CSS file, relative to the current directory.

options.highlightCssPath

Type: StringDefault 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: StringDefault value: A4

'A3', 'A4', 'A5', 'Legal', 'Letter' or 'Tabloid'.

options.paperOrientation

Type: StringDefault value: portrait

'portrait' or 'landscape'.

options.paperBorder

Type: StringDefault value: 2cm

Supported dimension units are: 'mm', 'cm', 'in', 'px'

options.runningsPath

Type: StringDefault value: runnings.js

Path to CommonJS module which sets the page header and footer (see runnings.js).

options.renderDelay

Type: NumberDefault value: Time until page.onLoadFinished event fired

Delay (in ms) before the PDF is rendered.

options.loadTimeout

Type: NumberDefault 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: FunctionDefault value: function () { return through() }

A function that returns a through2 stream that transforms the markdown before it is converted to HTML.

options.preProcessHtml

Type: FunctionDefault value: function () { return through() }

A function that returns a through2 stream that transforms the HTML before it is converted to PDF.

options.remarkable

Type: objectDefault value: { breaks: true }

A config object that is passed to remarkable, the underlying markdown parser.

options.remarkable.preset

Type: StringDefault 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 FunctionsDefault value: []

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

options.remarkable.syntax

Type: Array of optional remarkable syntax StringssDefault 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

  • 整个过程建议进入root用户操作,以避免一些问题 通过apt-get install npm安装的npm是0.1x版本的,太过旧,而且在root下无法启动,提示找不到npm 于是可以通过curl工具可安装最新版: sudo curl -L https://npmjs.org/install.sh | sh 方法来自node.js官网 配置淘宝的源为npm的默认源 `sudo npm config

  • 最近换 Ubuntu 系统, 打算使用 neovim, 这两天成功配置了vim-tex插件以及 markdown-preview 插件,道路比较坎坷,写篇博客将这两天安装的过程进行整理. 构建 neovim 的配置文件 切换到 ~/.config/nvim下查看有没有 init.vim配置文件,如果没有,请手动创建. 这个文件就是 neovim 的配置文件, neovim 的所有配置文件全部在这个

  • 使用“windows+Atom+markdown-preview-enhanced”编辑笔记 安装说明 下载atom; 在atom中,先从file进入settings,选择install,搜索markdown-preview-enhanced,点击下载; 选择packages,搜索markdown-preview,禁用它; 在markdown-preview-enhanced下载完成后,点击ena

  • 自定义js样式 packages | command palette | toggle (ctrl+shift+p或f3) 打开命令窗口,输入: Markdown Preview Enhanced: Customize Css 会打开less.css文件( 该文件在 ~/.mume/style.less ),输入样式即可。 导入外部文件 用法: @import "ttt.md" <!-- @im

 相关资料
  • GitBook 預設使用 Markdown 標記語法。 本章內容僅快速呈現 Markdown 的基本語法與呈現,若需要更詳細的解說,英文資源可以看看發明人的說明: John Gruber's original spec 以及 GitHub 的擴充版 Github-flavored Markdown info page。Markdown.tw 有不錯的中文詳解;想看看俗稱 GFM - GitHub

  • 更改历史 * 2017-11-17 高天阳 标准化文档内容 * 2017-09-08 高天阳 初始化文档 1 历史、现状和发展 Markdown 是一个 Web 上使用的文本到HTML的转换工具,可以通过简单、易读易写的文本格式生成结构化的HTML文档。 Markdown 的目标是实现「易读易写」。 Markdown具有一系列衍生版本,用于扩展Markdown的功能(如

  • markdown 在模板中插入Markdown代码。使用{{# markdown}}Helper很简单: <div class="my-div"> {{#markdown}} # My heading Some paragraph text {{/markdown}} </div> 确保你的markdown缩进正确。

  • Markdown 是一个 Web 上使用的文本到HTML的转换工具,可以通过简单、易读易写的文本格式生成结构化的HTML文档。目前 Stackoverflow 网站使用这种格式来提问。 一个文本实例: ### Header 3 > This is a blockquote. > > This is the second paragraph in the blockquote. > > ## Thi

  • 我试图在R降价报告中加入我的公司标志。输出必须为pdf。该徽标必须用作文件左上角报告每页的模板。例如,您可以使用此google徽标https://en.wikipedia.org/wiki/Google#/media/File:Google_2015_logo.svg 我希望报告看起来像这样(很抱歉图像模糊,但我只想举个例子)- 左上角的谷歌标志应该出现在每个页面上。 我已经进行了搜索,但我所做的

  • 来源:Markdown+Pandoc,打通写作界的任督二脉! Markdown+Pandoc,可以把自己的写作内容,变成世界上已有的任何格式的文件,包括很炫的slide,html5。没有人(或者我没看到)总结过这些内容,导致我走了很多弯路才最终打通任督二脉,特此纪念。 了解Markdwon以后,我的写作世界,只有它;看到Pandoc格式转换以后,对生成的slide和pdf羡慕的不行。那时,自己期望