【Python】ReportLabを使ってテキストファイルをPDFに変換する方法

【Python】ReportLabを使ってテキストファイルをPDFに変換する方法 プログラミング

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

タイトルとURLをコピーしました