md2pdf.py ドキュメント

概要

md2pdf.py は、Markdown形式のテキストファイルをPDF形式のドキュメントに変換するためのユーティリティスクリプトです。 日本語フォントの自動検出機能を備え、見出し、段落、箇条書き、コードブロックといった基本的なMarkdown要素のレンダリングに対応しています。また、URLやファイルパスなどの長大な文字列に対する折り返し処理もサポートしています。

動作原理

本プログラムは、以下の手順で変換処理を行います。

  1. MarkdownからHTMLへの変換: 入力されたMarkdownテキストを、Pythonの markdown ライブラリを使用してHTML文字列に変換します。この際、テーブル、フェンス付きコードブロックなどの拡張機能が有効化されます。

  2. コードブロックの分離: HTMLテキストからコードブロック要素を抽出し、一時的なプレースホルダに置き換えます。これにより、後段のPDFレンダリングにおいて、コードブロックの独立した背景色付きボックス描画を可能にします。

  3. 日本語フォントの検出: コマンドライン引数で指定されたフォントファイルを優先し、指定がない場合は一般的なシステムフォントディレクトリから日本語対応フォントを自動検索します。

  4. PDFへの描画: fpdf ライブラリを拡張したカスタムクラスを使用して、HTMLの各要素を解析しながらPDFページにテキストを描画します。長大な英数字の連続(URLなど)が検出された場合は、ゼロ幅スペースを内部的に挿入することで、自動折り返しを機能させレイアウトの崩れを防ぎます。

依存関係

本スクリプトは以下の非標準ライブラリに依存しています。

  • markdown

  • fpdf

入出力

  • 入力: Markdown形式のテキストファイル

  • 出力: PDF形式のファイル

スクリプト実行時に入力ファイルのパスが必須となります。出力ファイルのパスが省略された場合は、入力ファイルの拡張子を .pdf に変更した名前で、自動的に保存されます。 ファイルが空である場合や、指定されたパスにファイルが存在しない場合は、エラーを出力して処理を中断します。

実行例

コマンドラインからの基本的な実行方法は以下の通りです。

python md2pdf.py input.md

出力ファイル名を明示的に指定する場合は、第二引数にパスを指定します。

python md2pdf.py input.md output.pdf

特定の日本語フォントファイルを使用する場合、および処理完了後のキーボード入力待機をスキップする場合は、以下のオプションを指定します。

python md2pdf.py input.md output.pdf --font custom_font.ttf --no-pause

利用可能なCLIオプションは以下の通りです。

  • input_path: 入力ファイルのパス(必須)

  • output_path: 出力ファイルのパス(任意)

  • --font: 日本語表示に使用するフォントファイルのパス

  • --no-pause: プログラム終了時にエンターキーの入力を待機せず、即座に終了する機能を有効化する