markdow-pdf简介

工具:Markdown-pdf


用 markdown-pdf 将 markdown 格式文件转换为 pdf 格式文件,将使转换后的 pdf 文件有极好的效果。因为它可以用 Phantomjs 来对你的文件进行渲染,指定一个 CSS 文件还可以定制你自己的风格,并且可以在转换前通过预处理函数进行预处理。


1. Node.js的安装和配置

在运用 markdown-pdf 之前需要安装 Node.js 和配置相关环境,在这里我们选择在 Windows 下安装(其实是别无选择)。对 javascript 的发展有所了解的同学可能会听说过 Node.js 。有关 Node.js 的资料网上已经可以说是铺天盖地,我们这时可以稍微奉行一下 “拿来主义” ,本文不过多介绍(不过还是可以给介绍一个流量比较多的网站 CNode:Node.js 专业中文社区 )。

Node.js 下载地址– 官网

logo

Node.js 支持 Windows 、 Linux 和 Mac OS 。

下载截图

在这里我们下载的是 Winstaller(.msi),64-bit 。

2. markdown-pdf 的安装

markdown-pdf 的 开源代码 发布在 github 。

安装 Node.js 完后,可以发现安装包里已经自带了 npm ( npm 是什么呢?)。

npm 的全称是 Node Package Manager ,是 Node.js 的包管理和分发工具(好像跟 java 中的 Maven 的功能一样的,管理各种依赖包)。Node.js 自身提供了基本的模块,但是开发
实际应用仅仅依靠这些基本模块则还需要较多的工作。幸运的是,Node.js库和框架为我们提供了帮助,让我们减少工作量。
但是成百上千的库或者框架管理起来又很麻烦,有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。
所以,我们可以用 npm 来安装 markdown-pdf 。

如果要将 markdown-pdf 作为终端的一个独立的程序,可以在 Node.js 的安装目录 (E:\Program Files\nodejs)下打开命令窗口,输入如下命令:

npm install -g markdown-pdf

markdown-pdf安装成功

安装完后,我们就可以在终端直接输入 markdown-pdf 作为命令,命令的详细信息如下:

Usage: markdown-pdf [options] <markdown-file-path>

< markdown-file-paht > 就是我们将要转换的 markdown 文件所在的路径。

Options:
    -h, --help                             output usage information(命令用法)
    -V, --version                          output the version number(版本信息)
    < markdown-file-path >                 Path of the markdown file to convert(即将转换的markdown文件路径)
    -c, --cwd [path]                       Current working directory(当前工作空间)
    -p, --phantom-path [path]              Path to phantom binary(phantom文件所在路径,phantom是用来渲染)
    -h, --runnings-path [path]             Path to runnings (header, footer)
    -s, --css-path [path]                  Path to custom CSS file(定制私人风格的CSS文件路径)
    -z, --highlight-css-path [path]        Path to custom highlight-CSS file(定制私人风格的高亮CSS文件路径)
    -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(保存PDF文件的路径)

现在我们可以验证一下,是否安装成功:

markdown-pdf -V

markdown-pdf version

验证成功!我们就可以开始将我们编辑的 markdown 格式的文件转换为 pdf 啦!!!
我们可以指定 CSS 文件来定制风格,并且可以指定是 ‘A4’ 还是 ‘Letter’ 等其它格式……

值得注意的是: 当我们的文档中有中文的时候,我们要注意保存时文档的格式,格式最好调为 UTF-8 无 BOM 格式;否则可能会导致中文乱码(可以想象乱码后的心情有多糟)

3. markdown-pdf的Example Usage

git clone git@github.com:alanshaw/markdown-pdf.git

可以发现,其目录结构为:

markdown-pdf目录结构

我们可以看到有一个 test 的文件夹,里面有不少值得借鉴的用例。至于 bin 、 phantom 、 html5bp 这几个文件夹里的内容,对 Node.js 感兴趣的同学,可以研究一下它们具体的作用啦!
看了 test 文件夹里内容的同学可能会发现,这些例子并不是使用的终端的命令行呀!对的,除了在终端直接输入命令外,还有另外一种方式,那就是新建js文件,然后运行。
比如说,我们现在可以新建一个temp.js这样一个文件,如果只是简单的想把 markdown 文件转换为 pdf 文件,可以再文件了写下如下代码:

1
2
3
4
var markdownpdf = require("markdown-pdf")
markdownpdf().from("markdown-pdf.md").to("markdown-pdf.pdf", function () {
console.log("Done")
})

然后打开终端,输入命令:

node temp.js

运行成功

我们发现同样是可以转换成功。当然,往往我们的需求不会那么简单,为了突出我们的个性,我们会需要更多的“私人订制”,那么我们可以加上 options .

比如说我们可能需要转换后的 pdf 是 ‘A4’ 格式,横排排版,有 remarkable 等等……那就需要加上options:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var markdownpdf = require("markdown-pdf")
var options = {
paperFormat : 'A4', //A4格式
paperOrientation : 'portrait', //横排排版
cssPath : 'temp.css', //css文件的路径,相对于当前目录
remarkable :{
html : true, //是否允许存在 html 标签
xhtmlOut : true, //用 '/'来关闭Single tags(<br/>),是否严格规定标签的自封闭吧!
breaks : false, //是否将段落中的 '\n' 转换为 <br /> .
linkify : false //是否自动转换类似URL的文本为链接
}
}
markdownpdf(options).from("markdown-pdf.md").to("markdown-pdf.pdf", function () {
console.log("Done")
})

在这里我们需要注意的是 options需要为json格式
那么 remarkable 又是什么呢?remarkable是一个markdown的解析器,官网是这样说的:

Markdown parser, done right. 100% Commonmark support, extensions, syntax plugins, high speed - all in one.

翻译成一句就是,“我很牛,我很强大”。有兴趣的同学可以继续深入了解一下。

有时,我们可能会需要将多个markdown文件转换为一个pdf文件:

1
2
3
4
5
var markdownpdf = require("markdown-pdf")
var mdDocs = ["temp.md","temp1.md","temp2.md"]
markdownpdf().concat.from(mdDocs).to("result.pdf", function () {
console.log("Done")
})

同样,我们可以定义一个预处理函数 preProcessMd ,然后配置在options,在转换前进行预处理;markdown-pdf还有很多功能。我也是边学边用,如果想对markdown-pdf这个工具想有更深入的了解,可以在 官网 获得更多,更详细的信息。