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に変換できます。
この方法は、ドキュメントの管理やコード共有の際に活用できるでしょう。


