PythonでPDFを分割する(PyPDF2)

PythonでPDFを分割する(PyPDF2)
スポンサーリンク
スポンサーリンク

ここでは業務効率化・自動化の事例として、PythonでPDFを分割する方法を解説します。

スポンサーリンク

使用ライブラリ

PythonでPDFファイルを操作するライブラリはPyMuPDF,PyPDF2,PDFminerなどがあります。
それぞれのライブラリで得意とする操作が異なるため使い分けていきます。
ライブラリ使い分けをまとめると以下のようになります。

PythonのPDFライブラリ比較

今回はPyPDF2を使用します。

ライブラリ :PyPDF2(公式ドキュメント
インストール:必要

ライブラリを利用するには、pipコマンドでPyPDF2ライブラリをインストールします。
・関連記事:Pythonライブラリのインストール(pipの使い方)

python -m pip install PyPDF2

Successfully installed ・・・・と表示されればインストールは成功です。(依存関係のある他のライブラリも同時にインストールされます。)

PDFファイルをページ毎に分割する

PDFファイルをページ毎に分割する方法を解説します。

以下のようなディレクトリ構成を例にします。
Pythonスクリプトファイルと同じディレクトリに、分割するPDFファイルが保存されているものとします。

ディレクトリ構成

このPDFファイルを1ページ毎に分割し、フォルダを作成して保存します。

プログラムは以下のようになります。

分割後のファイルは以下のようになります。

PDF分割

プログラムを解説します。

1:ライブラリ設定

PyPDF2ライブラリを使用するためにインポートします。
またパスを取得・生成するためにosモジュールを呼び出します。

2:PDFの保存先フォルダを設定

ポイントを解説します。

path = os.getcwd() 

Pythonスクリプトを実行しているディレクトリをos.getcwd()で取得してpathに格納します。
getcwd() については以下の記事を参考にしてください。
・参考記事:Pythonでカレントディレクトリを取得・変更

filename = ‘経費精算書.pdf’

読み込むPDFを設定します。

dir_name = filename.split(‘.’)[0]

PDFのファイル名「経費精算書.pdf」から拡張子抜きの文字列「経費精算書」を取得し、dir_name に格納します。
filename.split('.') で [‘経費精算書’, ‘pdf’] のリストを取得し[0]で1番目の要素を取り出しています。

・関連記事:文字列処理-文字列の分割(split)


pdf_dir = os.path.join(path, dir_name)

分割したPDFの保存先パスを設定します。pathdir_nameを結合してpdf_dirに格納しています。


if os.path.isdir(pdf_dir) == False:
    os.mkdir(pdf_dir)

os.path.isdir()で、先程設定したPDF保存先フォルダの有無を調べ、存在しない場合はos.mkdir()でフォルダを作成します。

3:PDFを読み込みオブジェクトを生成

PyPDF2のPdfFileReaderクラスでPDFファイルを読み込みreaderに格納します。

4:ページ数を取得

読み込んだPDFオブジェクトからgetNumPage()メソッドでページ数を取得します。

5:PDFを分割

1行ずつ解説します。

for page in range(page_num):

1ページずつ処理を行うためページ数の範囲で繰り返し処理を行います。

・関連記事:繰り返し処理(for文)

writer = PyPDF2.PdfFileWriter()

PdfFileWriterクラスで空のwriterオブジェクトを生成します。

p = reader.getPage(page)

PDFオブジェクトから1ページずつ取り出します。

writer.addPage(p) 

取り出したページをaddPage()メソッドでwriterオブジェクトに追加します。

6:分割したPDFに名前を付けて保存

fnum = ‘{0:03d}’.format(page+1)

分割したファイル名に連番を付けるために、3桁のゼロ埋め連番001、002… を生成します。

newpdf = os.path.join(pdf_dir, f'{filename}_{fnum}.pdf’)

ファイル保存先パスを設定します。
pdf保存先フォルダパスと元のファイル名、および連番を結合しています。「経費精算書.pdf_001.pdf」のようなファイル名になります。

ファイル名の指定で f文字列を利用しています。使用方法は以下の記事を参照してください。
・関連記事:文字列処理ーf文字列

with open(newpdf, mode=’wb’) as f:

ファイルを書き込むために、新しいファイルを wb(write binary) モードで開き、f と設定します。

writer.write(f)

writerオブジェクトをファイル f に書き込みます。

PythonでPDFファイルを分割する方法を解説しました。

PDFファイルの操作に関しては、以下の記事も参考にしてみてください。

・関連記事:PythonでPDFファイルを結合する(PyPDF2)
・関連記事:PythonでPDFのページサイズを取得(PyPDF2)
・関連記事:PyMuPDFの基本的な使い方
・関連記事:PythonでPDFのテキストを抽出する(PyMuPDF)
・関連記事:PythonでPDFファイルの画像を抽出する(PyMuPDF)