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]