PythonでPDFファイルを1ページ毎に分割する方法

Pythonを使用してPDFファイルを1ページ毎に分割する方法を紹介します。紹介する方法では、PDFファイルから個々のページを抽出し、それぞれを別々のPDFファイルとして保存します。以下に、具体的な手順とPythonコードを示します。

1. 準備

必要なライブラリPyPDF2をインストールします。PyPDF2は、PDFファイルの操作に必要な機能を提供します。

pip install PyPDF2

2. コードの作成

以下の様なPythonスクリプトにより、PDFファイルを1ページ毎に分割します。

import PyPDF2
import os

def split_pdf(input_pdf, output_folder):
    # PDFファイルをバイナリモードでオープン
    with open(input_pdf, 'rb') as file:
        # PyPDF2のPdfFileReaderオブジェクトを作成
        pdf_reader = PyPDF2.PdfFileReader(file)
        
        # 各ページごとに処理
        for page_num in range(pdf_reader.numPages):
            # 新しいPDFを作成
            pdf_writer = PyPDF2.PdfFileWriter()
            pdf_writer.addPage(pdf_reader.getPage(page_num))
            
            # 出力ファイル名を生成
            output_pdf = os.path.join(output_folder, f"page_{page_num + 1}.pdf")
            
            # 出力ファイルに書き込む
            with open(output_pdf, 'wb') as output_file:
                pdf_writer.write(output_file)

# PDFファイルを分割する
split_pdf("input.pdf", "output_folder")

コードの解説

def split_pdf(input_path, output_path):

この行では、split_pdf という関数を定義しています。この関数は、PDFファイルを入力として受け取り、それを1ページ毎に分割して新しいPDFファイルとして出力します。input_path は入力PDFファイルのパス、output_path は出力PDFファイルの接頭辞です。

with open(input_path, 'rb') as file:

この行では、open() 関数を使って入力PDFファイルをバイナリ読み込みモード ('rb') で開いています。as file の部分は、ファイルを扱うためのファイルオブジェクトを file という名前で参照することを意味します。

reader = PyPDF2.PdfFileReader(file)

この行では、PdfFileReader() を使用して、開いたPDFファイルを読み込むための reader オブジェクトを作成しています。

for page_num in range(reader.numPages):

この行では、reader.numPages で取得したページ数分のループを行います。各ページを個別に処理するための準備です。

writer = PyPDF2.PdfFileWriter()

この行では、新しいPDFファイルを作成するための PdfFileWriter() オブジェクトを作成しています。

writer.addPage(reader.getPage(page_num))

この行では、reader.getPage(page_num) で取得したページを、writer オブジェクトに追加しています。これにより、新しいPDFファイルにページが追加されます。

output_pdf = f"{output_path}_page_{page_num + 1}.pdf"

この行では、出力PDFファイルの名前を生成しています。各ページごとに異なる名前が付けられます。{page_num + 1} は、1から始まるページ番号を意味します。

with open(output_pdf, 'wb') as output_file:

この行では、出力PDFファイルをバイナリ書き込みモード ('wb') で開いています。

writer.write(output_file)

この行では、writer オブジェクトに追加されたページを出力ファイルに書き込みます。

以上で、PDFファイルを1ページ毎に分割して保存するコードの完成です。

3. 実行

上記スクリプトを実行し、指定したPDFファイルを1ページ毎に分割します。input.pdfを適切なPDFファイル名に置き換え、output_folderには分割されたページが保存されるフォルダを指定してください。

# 実行
input_pdf = "input_file.pdf"  # 元のPDFファイルのパス
output_folder = "output_folder"  # 分割したPDFファイルの保存先のパス
split_pdf(input_pdf, output_folder)

まとめ

以上、PythonでPDFファイルを1ページ毎に分割し保存する方法を紹介しました。この処理は非構造化データの前処理としても有用です。大規模な文書全体を一度に処理するのではなく、小さなチャンクに分割することで、処理の効率が向上します。特に、メモリや計算リソースが限られている場合に役立ちます。この方法は生成AIのRAGの構成でベクトル化するPDF文書をチャンキング(1ページ毎にチャンク)する際などにも利用できます。

[PR]

click.linksynergy.com

click.linksynergy.com

click.linksynergy.com

click.linksynergy.com