Markdown を PDF に変換する 5 つの方法を比較(Pandoc、VSCode、オンラインツール)
単発文書ならブラウザ版 /markdown-to-pdf が最小設定です。引用・出版工程は Pandoc、エディタ中心や自動化は VS Code と CLI が向きます。機能、再現性、ローカル管理で選んでください。
この比較は固定の秒数やダウンロード容量ではなく、現在文書化されている機能に基づきます。設定時間とブラウザランタイム容量は OS と版で変わるためです。
適している: 単発変換、コードハイライト、数式、図表、インストール不要。
やり方: /markdown-to-pdf を開き、貼り付けて PDF をクリック。
設定と初回実行: OS、PDF エンジン、キャッシュ、文書の複雑さで変わるため、自分の環境で確認してください。
長所: ローカルインストール不要でブラウザから利用可能。コード、KaTeX、Mermaid、表、画像、タスクリストを描画します。無料出力には透かしが入り、ログイン済み無料ユーザーには現在、透かしなし出力が合計 5 回あります。
短所: 1 MB 入力上限。1 度に 1 ファイル — バッチは 複数の Markdown ファイルを PDF にバッチ変換 参照。
いつ使う: 単発変換の 多く はこれで足りる。
適している: 学術論文、独自 LaTeX テンプレート、引用と参考文献、1 ソースから複数フォーマット(PDF + DOCX + EPUB)。
やり方:
brew install pandoc
brew install --cask basictex # or mactex (platform-dependent)
pandoc input.md -o output.pdf
設定と初回実行: OS、PDF エンジン、キャッシュ、文書の複雑さで変わるため、自分の環境で確認してください。
長所: 安定、スクリプタブル、LaTeX による無限のテンプレート。引用ネイティブ対応 (--bibliography)。オフライン動作。書籍品質の組版。
短所: LaTeX のインストールサイズ 環境依存。デフォルト出力は学術論文の見た目。カスタムテンプレは難しい。コードハイライトは --syntax-highlighting 別途、Web 標準で見ると古い。Mermaid はフィルタープラグインが必要。
いつ使う: 本、博士論文、文献付き論文を出版する、または 3 つ以上の PDF テンプレートをバージョン管理したい場合。
適している: VSCode で 1 日中 Markdown を書く人。
やり方: yzane の「Markdown PDF」プラグインをインストール、ファイル右クリック → Markdown PDF: Export (pdf)。
設定と初回実行: OS、PDF エンジン、キャッシュ、文書の複雑さで変わるため、自分の環境で確認してください。
長所: 既に書いている場所からワンクリック。ユーザー設定で CSS をカスタマイズ可能。デフォルトのスタイルも実用的。
短所: 初回エクスポートが Chromium ダウンロードで遅い。PDF の見た目は CSS 経由のみ。KaTeX は箱から出してすぐは動かない — 別途 Markdown+Math プラグインが必要。Mermaid ブロックはコードのままで図にならない。
いつ使う: 週 5 本以上の PDF を書き、エディタが VSCode の場合。
適している: Markdown が既にブラウザで描画されているページ(GitHub README、GitLab Wiki、ドキュメントサイト)。
やり方: ⌘+P または Ctrl+P → 「PDF として保存」。
設定と初回実行: OS、PDF エンジン、キャッシュ、文書の複雑さで変わるため、自分の環境で確認してください。
長所: そこにある。インストール不要。レンダリングされた HTML なら何でも。
短所: 改ページが予測不能にテーブルとコードブロックを切る。Firefox の印刷でハイライト色が抜けることが多い。デフォルトのヘッダー/フッターは URL とページ番号で、通常は手動で無効化する必要がある。元ページが KaTeX や Mermaid を描画していない限り PDF にも入らない。
いつ使う: 既にレンダリング済みの Markdown ページの PDF が今すぐ必要で、粗さは許容できる場合。
適している: ビルドパイプライン、CI/CD、自動化されたドキュメント。
やり方:
npm install -g md-to-pdf
md-to-pdf input.md
設定と初回実行: OS、PDF エンジン、キャッシュ、文書の複雑さで変わるため、自分の環境で確認してください。
長所: スクリプタブル。ドキュメントごとに YAML front-matter でテーマ指定。watch モード。インストール後はオフラインで動く。
短所: Node + Chromium 依存。テーマ調整は YAML + CSS のみで Pandoc/LaTeX ほど表現力がない。Mermaid は箱から出して動かない — markdown-it プラグインが必要。
いつ使う: ドキュメントサイトが CI で PDF をビルドする;PDF を .md と並べてバージョン管理したい。
注意:古い markdown-pdf(ハイフンなし)パッケージは避ける — 2019 年以降未更新でセキュリティ警告あり。md-to-pdf がメンテされている後継です。
| 方法 | インストール | 初回 PDF | ハイライト | 数式 | Mermaid | 適している |
|---|---|---|---|---|---|---|
/markdown-to-pdf | None | Browser request | yes | yes (KaTeX) | yes | One-offs |
| Pandoc | Pandoc + PDF engine | Setup-dependent | yes | yes | filter | Books, papers |
| VS Code Markdown PDF | Extension + renderer | Setup-dependent | yes | extension-dependent | no | Editor users |
| Browser print | None | Browser request | varies | source-dependent | source-dependent | Rendered pages |
md-to-pdf CLI | Node.js + browser runtime | Setup-dependent | yes | configurable | plugin | CI/CD |
- 大半の読者 →
/markdown-to-pdf。多く のケースの答え。 - 引用付き学術 → Pandoc。
- VSCode 常用 → VSCode プラグイン。
- DocOps / CI ビルド →
md-to-pdfCLI。 - GitHub README が今すぐ要る → ブラウザ印刷、粗さは諦める。
Markdown → PDF ツールの誘惑はオーバーエンジニアリング。1 文書ならインストールしない。1000 文書なら CLI で自動化。Pandoc を非学術用途に正当化する中間域はほとんどありません。
コードハイライトを最もよく保つのは?
headless Chromium 系(/markdown-to-pdf、VSCode プラグイン、md-to-pdf CLI)。実際の Chromium でレンダリングするので、highlight.js / Prism のテーマがそのまま入ります。Pandoc の --syntax-highlighting は Web 標準で見ると古いです。詳しくは コードハイライトを保持した Markdown PDF 変換。
バッチ変換できるのは?
CLI が自然に対応 (md-to-pdf chapter*.md)。Web ツールの場合は 複数の Markdown ファイルを PDF にバッチ変換 を参照。
なぜ markdown-pdf ではなく md-to-pdf なのか?
markdown-pdf(ハイフンなし)は 2019 年以降未更新でセキュリティ警告あり。md-to-pdf はメンテされている後継です。
CJK / 中国語フォントの扱いが最も良いのは?
ホスト型 /markdown-to-pdf はサーバー側のフォント環境を使います。ローカル Chromium 系は実行環境のフォントを使い、Pandoc + XeLaTeX は通常 mainfont: などで CJK フォントを明示します。実際の文字でテストしてください。
スケール時に最も安いのは?
週 100+ PDF なら CI 上の md-to-pdf は実質無料(計算コストのみ)。たまの利用ならブラウザ版が無料。Pandoc 自体は無料ですがテンプレート保守が隠れコスト。
勝者は量で決まります。1 PDF → ブラウザツール。1000 PDF → CI の CLI。引用付きの本 → Pandoc。軽量版の痛みを感じてから重い武器を取り出すべきです。
上記の制限とコマンドは、次の最新一次資料で確認しました:
MarkdownToImage を開いて Markdown を描画し、用途に合う形式を選びます。バッチ自動化の前に代表的な文書 1 件で検証してください。