md-to-pdfのコマンドラインオプションと実行例

md-to-pdfでHTML出力する方法がないかなと調べたら、あっさりコマンドラインオプションで指定方法が見つかったので、ついでにコマンドラインオプションについてメモ。併せてUsageで表示される実行例についてもメモ。Usageはmd-to-pdf 4.0.1版の出力に基づいています。

md-to-htmlな感じのことができるし、それ以外にもいろんなことができます。

## コマンドラインオプション

`md-to-pdf -h` するまでもなく、[md-to-pdfのサイトのUsage](https://www.npmjs.com/package/md-to-pdf#user-content-usage)に書かれています。

```
Usage
$ md-to-pdf [options] path/to/file.md
```

このあとに続くオプションの説明と、[Options](https://www.npmjs.com/package/md-to-pdf#user-content-options)の指定値の例をまとめて雑に和訳。

|オプション|説明|指定例|
|---|---|---|
|`-h`, `--help`|Usage情報の出力||
|`-v`, `--version`|バージョン出力||
|`-w`, `--watch`|現在のファイル（群）をWatch||
|`--watch-options`|Chokidarのwatch呼び出し時のオプション||
|`--basedir`|ファイルサーバーが提供するベースディレクトリ|`path/to/folder`|
|`--stylesheet`|ローカルまたはリモートのスタイルシートのパス（複数回指定可能）|`path/to/style.css`<br/>`https://example.org/stylesheet.css`|
|`--css`|スタイルシート文字列|`body { color: tomato; }`|
|`--body-class`|Bodyタグに追加するクラス（複数回指定可能）|`markdown-body`|
|`--page-media-type`|ページでエミュレートするメディアタイプ（デフォルト：screen）|`print`|
|`--highlight-style`|highlight.jsで使用するハイライトスタイル（デフォルト：github）|`monokai`<br/>`solarized-light`|
|`--marked-options`|marked.jsのカスタムオプションを（JSON文字列で）指定|`'{ "gfm": false }'`|
|`--pdf-options`|生成されるPDFのカスタムオプションを（JSON文字列で）指定|`'{ "format": "Letter", "margin": "20mm", "printBackground": true }'`|
|`--launch-options`|Puppeteerのカスタム起動オプションを指定|`'{ "args": ["--no-sandbox"] }'`|
|`--port`|HTTPサーバーの実行ポートを指定|`3000`|
|`--md-file-encoding`|Markdownファイルのファイルエンコーディングを指定|`utf-8`<br/>`windows1252`|
|`--stylesheet-encoding`|スタイルシートのファイルエンコーディングを指定|`utf-8`<br/>`windows1252`|
|`--as-html`|代わりにHTMLを出力||
|`--config-file`|JSONまたはJSの構成（configuration）ファイルを指定|`path/to/config.json`|
|`--devtools`|PDFを作成する代わりにブラウザーでdevtoolsを開く||

## 実行例

`md-to-pdf -h` するとオプションに続いて実行例（`Examples`）セクションも表示されるので、こちらも雑に和訳。

`./file.md`を変換し`./file.pdf`として保存。

```
$ md-to-pdf file.md
```

カレントディレクトリのすべてのMarkdownファイルを変換。

```
$ md-to-pdf ./*.md
```

カレントディレクトリ以下のすべてのマークダウンファイルを変換。

```
$ md-to-pdf ./**/*.md
```

変換とWatchモード（訳者注：Markdownファイルの変更を監視）の有効化。

```
$ md-to-pdf ./*.md -w
```

変換とカスタムオプションを指定してWatchモードの有効化。

```
$ md-to-pdf ./*.md --watch --watch-options '{ "atomic": true }'
```

`path/to/file.md`を異なるベースディレクトリに変換。

```
$ md-to-pdf path/to/file.md --basedir path
```

`file.md`を`custom-markdown.css`を使って変換。

```
$ md-to-pdf file.md --stylesheet custom-markdown.css
```

`file.md`を`Monokai`テーマデコードハイライトして変換。

```
$ md-to-pdf file.md --highlight-style monokai
```

`file.md`をカスタムページオプションで変換。

```
$ md-to-pdf file.md --pdf-options '{ "format": "Letter" }'
```

`file.md`を変換しHTML形式の中間ファイルとして保存。

```
$ md-to-pdf file.md --as-html
```

# おわりに

Classmethodさんの『[MarkdownをPDFに変換する「md-to-pdf」は痒いところに手が届く素敵ツール | DevelopersIO](https://dev.classmethod.jp/articles/md-to-pdf/)』を読んで、雑にmd-to-pdfに入門中です。PDF変換中に生成してる（と思われる）HTMLファイルを見たいなと思ってドキュメントを見ることにしたのですが、あっさり冒頭近くのコマンドラインオプションで指定方法が見つかったので、ついでにまとめてみました。あらためて思いましたが、「やってみた」を読んでやってみたら、次にすることはドキュメント確認ですね。

ということで無事に `md-to-pdf file.md --as-html` でHTMLファイルを生成できたのですが……違う、そうじゃない。僕はページの[ヘッダー/フッター部](https://www.npmjs.com/package/md-to-pdf#user-content-headerfooter)がどんな出力に変換されているのか知りたかったのに、それはHTMLに含まれてないじゃないか。まあ[puppeteerのpage.pdfオプション](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagepdfoptions)として引渡す値らしいので、考えてみたらHTMLに含まれていなくて当然なのですが。そういうわけで勉強は続く。

# 参考

* [md-to-pdf - Usage](https://www.npmjs.com/package/md-to-pdf#user-content-usage)
* [md-to-pdf - Options](https://www.npmjs.com/package/md-to-pdf#user-content-options)
* [MarkdownをPDFに変換する「md-to-pdf」は痒いところに手が届く素敵ツール | DevelopersIO](https://dev.classmethod.jp/articles/md-to-pdf/)