Pythonでテキストファイル(プログラムコードを含む)をPDFに変換したい場合、ReportLabというライブラリが便利です。
この記事では、ディレクトリ内の複数のテキストファイルを一括でPDFに変換する方法を紹介します。
前提条件
- Python 3.x がインストールされていること
- ReportLabがインストールされていること
- 日本語フォントのIPAexゴシックをダウンロードし、スクリプトと同じディレクトリに配置すること
ReportLabについては、以下の記事で説明しています。
以下のPythonスクリプトを使うと、指定したディレクトリ内のテキストファイルをPDFに変換します。
その際、再帰的に探索し各ファイルを変換して、別のディレクトリに保存することになります。
import os from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics def create_pdf(input_file, output_file): # PDFドキュメントの作成 c = canvas.Canvas(output_file, pagesize=letter) width, height = letter # フォントの登録と設定 pdfmetrics.registerFont(TTFont('IPAexGothic', 'ipaexg.ttf')) c.setFont('IPAexGothic', 10) # ファイルの内容を読み込む(UTF-8エンコーディングを指定) with open(input_file, 'r', encoding='utf-8') as file: lines = file.readlines() # 行の高さを設定 line_height = 12 # PDFにテキストを描画 y = height - line_height for line in lines: if y < line_height: # 改ページ処理 c.showPage() c.setFont('IPAexGothic', 10) y = height - line_height c.drawString(10, y, line.strip()) y -= line_height # PDFファイルを保存 c.save() def convert_files_in_directory(input_directory, output_directory): if not os.path.exists(output_directory): os.makedirs(output_directory) for root, dirs, files in os.walk(input_directory): for file in files: input_file_path = os.path.join(root, file) relative_path = os.path.relpath(input_file_path, input_directory) output_file_name = relative_path.replace('.', '_').replace(os.sep, '/') output_file_path = os.path.join(output_directory, f"{output_file_name}.pdf") os.makedirs(os.path.dirname(output_file_path), exist_ok=True) create_pdf(input_file_path, output_file_path) print(f"Converted {input_file_path} to {output_file_path}") # 入力/出力ディレクトリを指定してファイルを変換 input_directory = 'input_files' output_directory = 'PDF' convert_files_in_directory(input_directory, output_directory)
使い方
- 上記のコードをPythonファイル(例: convert_to_pdf.py)として保存します。
- 変換したいテキストファイルを
input_files
ディレクトリ(または任意の名前のディレクトリ)に配置します。 - コマンドラインから
python convert_to_
pdf.pyを実行します。
例えば、input_filesディレクトリ内に以下のようなファイルがあるとします。
input_files/ ├── README.md ├── main.py ├── utils.py └── tests/ ├── test_main.py └── test_utils.py
スクリプトが正常に実行されると、PDFディレクトリ内には以下のようなファイルが生成されます。
PDF/ ├── README_md.pdf ├── main_py.pdf ├── utils_py.pdf └── tests/ ├── test_main_py.pdf └── test_utils_py.pdf
変換後のPDFファイルは、元のディレクトリ構造を維持しつつ、ファイル名の.が_に置換されています。
以上の手順で、ReportLabを使ってテキストファイル(プログラムコードを含む)を一括でPDFに変換できます。
この方法は、ドキュメントの管理やコード共有の際に活用できるでしょう。