📃
# 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
今後の参考事項
- md-to-pdfが最も安定して動作する選択肢
- Puppeteerを使用するため、Chrome/Chromiumが必要
- sudo権限不要でnpmパッケージとして利用可能
- PDF品質が高く、日本語も適切に表示される
トラブルシューティング
- PhantomJS系のツールはSSL関連でエラーが発生しやすい
- md-to-pdfは初回実行時にChromiumダウンロードが発生する場合がある
- メモリ使用量が多いため、大きなファイルの場合は注意が必要
Discussion