📃

# Markdown to PDF 変換手順

に公開

概要

Node.jsプロジェクトでMarkdownファイルをPDFに変換する方法をまとめた記録。

試行錯誤の経過

1. 最初に試したツール(失敗)

  • pandoc: インストールされていない、sudo権限が必要
  • wkhtmltopdf: インストールされていない
  • markdown-pdf: PhantomJSのSSL設定エラーで失敗
# これらのコマンドは失敗
which pandoc
which wkhtmltopdf
which md-to-pdf

# markdown-pdfは一度インストールしたが動作せず
npm install markdown-pdf --save-dev
npx markdown-pdf "@service.md" -o "service-overview.pdf"
# Error: PhantomJSのSSL関連エラー

2. 成功した方法:md-to-pdf

インストール

npm install --save-dev puppeteer md-to-pdf

実行コマンド

npx md-to-pdf "@service.md" --pdf-options '{"format": "A4", "margin": {"top": "20mm", "bottom": "20mm", "left": "20mm", "right": "20mm"}}'

結果

  • 実行時間:約33秒
  • 出力ファイル:@service.pdf (440KB)
  • 正常にPDF変換完了

md-to-pdfの特徴

利点

  • Puppeteer使用: PhantomJSより安定している
  • Node.js環境: 既存のNode.jsプロジェクトに簡単に統合
  • 豊富なオプション: マージン、フォーマット、スタイルの細かい調整が可能
  • Markdown対応: 標準的なMarkdown記法を適切にレンダリング

設定オプション例

# 基本的な変換
npx md-to-pdf "input.md"

# A4サイズ、マージン設定
npx md-to-pdf "input.md" --pdf-options '{"format": "A4", "margin": {"top": "20mm", "bottom": "20mm", "left": "20mm", "right": "20mm"}}'

# CSSカスタマイズ
npx md-to-pdf "input.md" --css "custom.css"

# 出力ファイル名指定
npx md-to-pdf "input.md" --output "output.pdf"

依存関係

実際にインストールされたパッケージ:

  • md-to-pdf: ^5.2.4
  • puppeteer: ^24.15.0

使用した環境

  • OS: Linux 6.8.0-71-generic
  • Node.js: v22.17.0

今後の参考事項

  1. md-to-pdfが最も安定して動作する選択肢
  2. Puppeteerを使用するため、Chrome/Chromiumが必要
  3. sudo権限不要でnpmパッケージとして利用可能
  4. PDF品質が高く、日本語も適切に表示される

トラブルシューティング

  • PhantomJS系のツールはSSL関連でエラーが発生しやすい
  • md-to-pdfは初回実行時にChromiumダウンロードが発生する場合がある
  • メモリ使用量が多いため、大きなファイルの場合は注意が必要

Discussion