Markdown ファイルを PDF に変換するツールがあるらしい。
- alanshaw/markdown-pdf
- markdown-pdf - MarkdownをPDFに変換 MOONGIFT
- Node.js - markdown-pdf で .mdを.pdfに変換してみた - Qiita
さっそく markdown-pdf を -g
オプションを付けて導入してみる。
C:>npm install -g markdown-pdf
npm WARN engine markdown-pdf@5.3.0: wanted: {"node":"~0.10.0"} (current: {"node":"0.12.4","npm":"2.10.1"})
> phantomjs@1.9.17 install C:\Users\username\AppData\Roaming\npm\node_modules\markdown-pdf\node_modules\phantomjs
> node install.js
Downloading https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-windows.zip
Saving to C:\Users\username\AppData\Local\Temp\phantomjs\phantomjs-1.9.8-windows.zip
Receiving...
[=================================-------] 82% 0.0s
Received 7292K total.
Extracting zip contents
Removing C:\Users\username\AppData\Roaming\npm\node_modules\markdown-pdf\node_modules\phantomjs\lib\phantom
Copying extracted folder C:\Users\username\AppData\Local\Temp\phantomjs\phantomjs-1.9.8-windows.zip-extract-1434805144463\phantomjs-1.9.8-windows -> C:\Users\username\AppData\Roaming\npm\node_modules\markdown-pdf\node_modules\phantomjs\lib\phantom
Writing location.js file
Done. Phantomjs binary available at C:\Users\username\AppData\Roaming\npm\node_modules\markdown-pdf\node_modules\phantomjs\lib\phantom\phantomjs.exe
C:\Users\username\AppData\Roaming\npm\markdown-pdf -> C:\Users\username\AppData\Roaming\npm\node_modules\markdown-pdf\bin\markdown-pdf
markdown-pdf@5.3.0 C:\Users\username\AppData\Roaming\npm\node_modules\markdown-pdf
├── duplexer@0.1.1
├── extend@2.0.1
├── tmp@0.0.24
├── commander@2.8.1 (graceful-readlink@1.0.1)
├── through2@0.6.5 (xtend@4.0.0, readable-stream@1.0.33)
├── stream-from-to@1.4.2 (series-stream@1.0.1, async@0.9.2, mkdirp@0.5.1, concat-stream@1.5.0)
├── highlight.js@8.6.0
├── remarkable@1.6.0 (autolinker@0.15.3, argparse@0.1.16)
└── phantomjs@1.9.17 (which@1.0.9, progress@1.1.8, kew@0.4.0, request-progress@0.3.1, adm-zip@0.4.4, npmconf@2.1.1, request@2.42.0, fs-extra@0.18.4)
node.js のバージョンが新しすぎると怒られたが C:\Users\username\AppData\Roaming\npm
フォルダにちゃんと markdown-pdf.cmd
ができてたので大丈夫だろう。コマンドを起動してみる。
C:>markdown-pdf --version
5.3.0
C:>markdown-pdf --help
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] 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
では,これを使って以前書いた「Windows 版 GnuPG 2.1.x を使ってみる」というドキュメントを PDF に変換してみる。(同じものを Qiita にも貼ってある)
C:>markdown-pdf -o using-gnupg-2.1.x.pdf using-gnupg-2.1.x.md
結果を GitHub に置いてみた。
Windows 環境で実行しているせいか,フォントが MSUIGothic になってたりして微妙な感じだが全く見れないほどではないので,まぁよかろう。細かいコントロールは -s
または -z
オプションを使って CSS でコントロールすることになるのであろう。
node.js で駆動しているので,当然 JavaScript でもコントロールできる。
まずは markdown-pdf をローカルにインストールして,以下のコードを用意する。
var markdownpdf = require("markdown-pdf")
markdownpdf().from("using-gnupg-2.1.x.md").to("using-gnupg-2.1.x.pdf", function () {
console.log("Done")
})
これで
C:>node makepdf.js
Done
とすれば全く同じ出力になる。
あるいは
var markdownpdf = require("markdown-pdf")
, fs = require("fs")
fs.createReadStream("using-gnupg-2.1.x.md")
.pipe(markdownpdf())
.pipe(fs.createWriteStream("using-gnupg-2.1.x.pdf"))
のように Stream を pipe で繋ぐこともできる。
markdownpdf()
の引数にオプションを指定することも可能。また複数の markdown ファイルを指定することもできるらしい。この辺はおいおい。