Help us understand the problem. What is going on with this article?

Markdown ファイルを PDF に変換する。

More than 3 years have passed since last update.

Markdown ファイルを PDF に変換するツールがあるらしい。

さっそく 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 をローカルにインストールして,以下のコードを用意する。

makepdf.js
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

とすれば全く同じ出力になる。

あるいは

makepdf2.js
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 ファイルを指定することもできるらしい。この辺はおいおい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした