PythonでPDFのページサイズをログに一覧で出力する方法(GoogleColab)
PDFファイルのページサイズを知りたいというタイミングがあるかと思います。普通にパソコンで見ることもできますが、ページごとにサイズが違う場合など面倒です。
今回は、Python(GoogleColab)を使って、ページごとのファイルサイズをログに出力するコードを作成していきましょう。
完成したコードを動かした際の出力目標は以下のようにしたいと思います。
デフォルトはポイントで表示ですが、人の目で見たときにポイント表示では分かりにくいので、mm単位に変換も行います。
1ポイントは1/72インチであり、1インチは25.4ミリメートルなので、ポイントをミリメートルに変換するには、以下の式を使用します。
ミリメートル = ポイント × 25.4/72
PythonでPDFのページサイズをログに一覧で出力するステップ
①PyMuPDFライブラリのインストールとライブラリのインポート
まず、PyMuPDFライブラリ(pymupdf)をインストールします。このライブラリはPDFファイルの読み込み、ページ情報の取得などに使用されます。
PyMuPDFライブラリから fitz モジュールをインポートします。
②PDFを開く
指定された入力PDFファイルパスを使用して、PDFドキュメントを開きます。これにより、ドキュメント内のページにアクセスできるようになります。
③ページごとのサイズを取得
ドキュメント内の全ページに対してループを実行し、各ページのサイズ情報を取得します。サイズは、ページの rect 属性から取得できます。
④サイズの単位変換
取得したページサイズ(幅と高さ)はポイント単位です。
これをミリメートルに変換するため、変換式を使用します(1ポイント = 1/72インチ、1インチ = 25.4ミリメートル)。
⑤サイズの出力
ポイント単位とミリメートル単位でのページサイズをコンソールに出力します。ページ番号とともに表示させます。
⑥PDFを閉じる
全てのページのサイズが出力された後、PDFドキュメントを閉じます。
⑦スクリプトの実行
①-⑥で実装する処理を含む print_pdf_page_sizes 関数を定義し、任意のPDFファイルパスに対して実行します。これにより、指定されたPDFの各ページのサイズが出力されます。
コードの解説
for page_num in range(len(doc)):
PDFドキュメント内の全ページに対してループを行うためのコードです。len(doc) はPDFドキュメントの総ページ数を返し、range(len(doc)) は0から総ページ数-1までの整数のシーケンスを生成します。このシーケンスを使って、各ページに対するループ処理を行います。
page = doc.load_page(page_num)
現在のループのページ番号(page_num)に対応するPDFページをロードしています。doc.load_page(page_num) は、指定されたページ番号のページオブジェクトを返します。
size = page.rect
ロードされたページのサイズと位置情報を含む fitz.Rect オブジェクトを取得しています。このオブジェクトから、ページの幅と高さの情報を抽出します。
width_pt = size.width と height_pt = size.height
fitz.Rect オブジェクトからページの幅(width_pt)と高さ(height_pt)をポイント単位で取得しています。
width_mm = width_pt * (25.4 / 72) と height_mm = height_pt * (25.4 / 72)
取得したページの幅と高さをミリメートル単位に変換しています。変換式 25.4 / 72 は、1ポイントをインチに変換し(1ポイント = 1/72インチ)、その後インチをミリメートルに変換するためのものです(1インチ = 25.4ミリメートル)。
print(f"Page {page_num + 1}: {width_pt:.2f} pt x {height_pt:.2f} pt ({width_mm:.2f} mm x {height_mm:.2f} mm)")
計算されたページサイズを画面に出力するためのものです。ここで、ページ番号(1から始まる)、ページの幅と高さ(ポイント単位)、および変換後のミリメートル単位のサイズが出力されます。フォーマット指定子 :.2f は、小数点以下2桁までの浮動小数点数として数値を表示するために使用します。
ここまでをまとめ、実際に実装した完全なコードは以下のようになります。
ここから先は
¥ 120
この記事が気に入ったらチップで応援してみませんか?