ここでは業務効率化・自動化の事例として、PythonでPDFを読み込みページサイズを取得する方法を解説します。
この方法を応用して、PDFファイルをページサイズごとに仕分けするなど、手作業では面倒な作業を自動化できると思います。
使用ライブラリ
PythonでPDFファイルを操作するライブラリは PyMuPDF
, PyPDF2
, PDFminer
などがありますが、今回はPyPDF2
を使用します。
インストール:必要
ライブラリを利用するには、pip
コマンドでPyPDF2
ライブラリをインストールします。
・関連記事:Pythonライブラリのインストール(pipの使い方)
Successfully installed ・・・・と表示されればインストールは成功です。(依存関係のある他のライブラリも同時にインストールされます。)
サンプルファイル
PDFファイルは例として交通費精算書.pdfを使用します。このファイルは下図のように4ページ構成になっています。
このファイルがPythonスクリプトファイルと同じディレクトリに保存されているものとします。
PDFファイルのページサイズ取得
PDFファイルのページサイズを取得する方法を解説します。
以下が各ページのサイズを取得するコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # PRG1: ライブラリ設定 import PyPDF2 # PRG2: 対象PDFファイル設定 pdf_file = '交通費精算書.pdf' # PRG3: readerオブジェクト生成 pdf_reader = PyPDF2.PdfFileReader(pdf_file) # PRG4: PDFページ数取得 page_num = pdf_reader.getNumPages() # PRG5: サイズ情報取得 for page in range(page_num): p = pdf_reader.getPage(page) p_size = p.mediaBox p_width = p_size.getWidth() p_height = p_size.getHeight() print(f'\nページ{page+1}') print('RectangleObject: ', p_size) print('幅 : ', p_width, 'pt') print('高さ: ', p_height, 'pt') |
出力結果は以下のようになります。
ページ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: ライブラリ設定
1 2 | # PRG1: ライブラリ設定 import PyPDF2 |
PyPDF2ライブラリを使用するためにインポートします。
PRG2: 対象PDFファイル設定
1 2 | # PRG2: 対象PDFファイル設定 pdf_file = '交通費精算書.pdf' |
対象のPDFファイルをpdf_file
に格納します。
PRG3: readerオブジェクト生成
1 2 | # PRG3: readerオブジェクト生成 pdf_reader = PyPDF2.PdfFileReader(pdf_file) |
PyPDF2のpdfFileReader
クラスの引数に対象ファイルを指定してPDFファイルを読み込み、pdf_reader
にreader
オブジェクトを格納します。
PRG4: PDFページ数取得
1 2 | # PRG4: PDFページ数取得 page_num = pdf_reader.getNumPages() |
readerオブジェクトのgetNumPages()
メソッドで、PDFのページ数を取得します。
今回のファイルでは page_num=4
になります。
PRG5: サイズ情報処理
1 2 3 4 5 6 7 8 9 10 | # PRG5: サイズ情報取得 for page in range(page_num): p = pdf_reader.getPage(page) p_size = p.mediaBox p_width = p_size.getWidth() p_height = p_size.getHeight() print(f'\nページ{page+1}') print('RectangleObject: ', p_size) print('幅 : ', p_width, 'pt') print('高さ: ', p_height, 'pt') |
順番にプログラムを解説します。
以降の処理をfor文で繰り返します。range(page_num)
でページ数の回数文繰り返します。
for文については以下の記事で詳しく解説しています。
・関連記事:繰り返し処理(for文)ー rangeを使った繰り返し処理
reader
オブジェクトのgetPage()
メソッドで、各ページをオブジェクトとして取得して p
に格納します。
PDFオブジェクトのmediaBox
プロパティを取得し、p_size
に格納します。
PDFのページサイズはmediaBox
として座標で扱われています。この座標値を取得することでサイズを調べることができます。mediaBox
はRectangleObject([lowerLeft_x, lowerLeft_y, UpperRight_x, UpperRight_y])
となっており、下図のような位置に対応しています。
mediaBoxのgetWidth()
, getHeight()
メソッドで幅と高さを取得して、p_width
, p_height
に格納します。
取得した情報を出力します。
f'\nページ{page+1}'
では、f文字列を使用してページ番号の変数 page
を文字列に変換しています。
f文字列については以下の記事を参照してください。
・関連記事:文字列処理-f文字列
PythonでPDFファイルのページサイズを取得する方法を解説しました。
他にもPDFファイルを操作する方法を解説していますので、以下の記事も参考にしてみてください。
・関連記事:PythonでPDFファイルを結合する(PyPDF2)
・関連記事:PythonでPDFファイルを分割する(PyPDF2)
・関連記事:PyMuPDFの基本的な使い方
・関連記事:PythonでPDFのテキストを抽出する(PyMuPDF)
・関連記事:PythonでPDFファイルの画像を抽出する(PyMuPDF)