見出し画像

PythonでPDFのページサイズをログに一覧で出力する方法(GoogleColab)

PDFファイルのページサイズを知りたいというタイミングがあるかと思います。普通にパソコンで見ることもできますが、ページごとにサイズが違う場合など面倒です。

今回は、Python(GoogleColab)を使って、ページごとのファイルサイズをログに出力するコードを作成していきましょう。

完成したコードを動かした際の出力目標は以下のようにしたいと思います。

PDFのページサイズをログに一覧で出力

デフォルトはポイントで表示ですが、人の目で見たときにポイント表示では分かりにくいので、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.widthheight_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桁までの浮動小数点数として数値を表示するために使用します。


ここまでをまとめ、実際に実装した完全なコードは以下のようになります。

ここから先は

867字

¥ 120

期間限定!PayPayで支払うと抽選でお得

この記事が気に入ったらチップで応援してみませんか?