PythonでPDFのページサイズを取得(PyPDF2)

PythonでPDFのページサイズを取得(PyPDF2)
スポンサーリンク
スポンサーリンク

ここでは業務効率化・自動化の事例として、PythonでPDFを読み込みページサイズを取得する方法を解説します。

この方法を応用して、PDFファイルをページサイズごとに仕分けするなど、手作業では面倒な作業を自動化できると思います。

スポンサーリンク

使用ライブラリ

PythonでPDFファイルを操作するライブラリは PyMuPDF, PyPDF2, PDFminerなどがありますが、今回はPyPDF2を使用します。

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

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

python -m pip install PyPDF2

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

サンプルファイル

PDFファイルは例として交通費精算書.pdfを使用します。このファイルは下図のように4ページ構成になっています。
このファイルがPythonスクリプトファイルと同じディレクトリに保存されているものとします。

PDFファイルのページサイズ取得

PDFファイルのページサイズを取得する方法を解説します。

以下が各ページのサイズを取得するコードになります。

出力結果は以下のようになります。

ページ1
RectangleObject: RectangleObject([0, 0, 595.32001, 841.92004])
幅 : 595.32001 pt
高さ: 841.92004

ページ2
RectangleObject: RectangleObject([0, 0, 595.32001, 841.92004])
幅 : 595.32001 pt
高さ: 841.92004 pt

ページ3
RectangleObject: RectangleObject([0, 0, 595.32001, 841.92004])
幅 : 595.32001 pt
高さ: 841.92004 pt

ページ4
RectangleObject: RectangleObject([0, 0, 595.32001, 841.92004])
幅 : 595.32001 pt
高さ: 841.92004 pt

サイズの単位はpt(ポイント)となります。1pts = 1/72 インチ = 0.3528mm になります。

参考に、JIS規格とポイントの対応は以下になります。
【A4縦】595pt x 842pt
【A3縦】842pt×1191pt

プログラムのポイントを解説します。

PRG1: ライブラリ設定

PyPDF2ライブラリを使用するためにインポートします。

PRG2: 対象PDFファイル設定

対象のPDFファイルをpdf_fileに格納します。

PRG3: readerオブジェクト生成

PyPDF2のpdfFileReaderクラスの引数に対象ファイルを指定してPDFファイルを読み込み、pdf_readerreaderオブジェクトを格納します。

PRG4: PDFページ数取得

readerオブジェクトのgetNumPages()メソッドで、PDFのページ数を取得します。
今回のファイルでは page_num=4 になります。

PRG5: サイズ情報処理

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

for page in range(page_num):

以降の処理をfor文で繰り返します。range(page_num)でページ数の回数文繰り返します。

for文については以下の記事で詳しく解説しています。
・関連記事:繰り返し処理(for文)ー rangeを使った繰り返し処理


p = pdf_reader.getPage(page)

readerオブジェクトのgetPage()メソッドで、各ページをオブジェクトとして取得して p に格納します。


p_size = p.mediaBox

PDFオブジェクトのmediaBoxプロパティを取得し、p_size に格納します。

PDFのページサイズはmediaBoxとして座標で扱われています。この座標値を取得することでサイズを調べることができます。
mediaBoxRectangleObject([lowerLeft_x, lowerLeft_y, UpperRight_x, UpperRight_y])となっており、下図のような位置に対応しています。

ページサイズ


p_width = p_size.getWidth()
p_height = p_size.getHeight()

mediaBoxのgetWidth(), getHeight()メソッドで幅と高さを取得して、p_width, p_heightに格納します。

print(f’\nページ{page+1}’)
print(‘RectangleObject: ‘, p_size)
print(‘幅 : ‘, p_width, ‘pt’)
print(‘高さ: ‘, p_height, ‘pt’)

取得した情報を出力します。

f'\nページ{page+1}' では、f文字列を使用してページ番号の変数 page を文字列に変換しています。
f文字列については以下の記事を参照してください。
・関連記事:文字列処理-f文字列


PythonでPDFファイルのページサイズを取得する方法を解説しました。

他にもPDFファイルを操作する方法を解説していますので、以下の記事も参考にしてみてください。

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