はじめに
こんにちは、株式会社フォトラクションでエンジニアをしています酒井です。
自分のチームではPDFを扱うことが多く、これらを PyMuPDF
と呼ばれるPythonのライブラリを用いて操作しています。
Pythonには他にも PyPDF2
や PDFminer
など様々なPDF操作用のライブラリがありますが、日本語への対応や実装されている関数の多さ、ドキュメントの読みやすさ等をふまえ、弊社では PyMuPDF
を使用しています。(参考: PyMuPDFドキュメント)
今回はPyMuPDFで可能となる操作をいくつか紹介したいと思います。
1. 画像変換(pdf ⇒ ndarray)
import io import cv2 import fitz import numpy as np from PIL import Image # PDFファイルパスの読み込み pdf_path = input() # 1ページ目の要素を取得 document = fitz.open(pdf_path) page = document[0] # 拡大度を指定 zoom = 3.0 # pixmapを取得 matrix = fitz.Matrix(zoom, zoom) pixmap = page.get_pixmap(matrix=matrix) # pillowでpng形式のバイトオブジェクトを取得 byte = pixmap.pil_tobytes("png") # PIL画像を取得 binary = io.BytesIO(byte) pil_img = Image.open(binary) # PIL画像をNumPy配列の画像に変換 ndarray_img = np.array(pil_img) # BGR -> RGB ndarray_img = cv2.cvtColor(ndarray_img, cv2.COLOR_BGR2RGB)
2. 注釈取得
# PDFファイルパスの読み込み pdf_path = input() # 1ページ目の要素を取得 document = fitz.open(pdf_path) page = document[0] # 注釈情報を取得 annotations = page.annots()
3. PDFサイズの取得
# PDFファイルパスの読み込み pdf_path = input() # 1ページ目の要素を取得 document = fitz.open(pdf_path) page = document[0] pdf_width, pdf_height = page.rect.width, page.rect.height
最後に
PyMuPDF
を使えば、他にも「ページの分割」や「注釈の設定」等様々な操作が可能となります。
よかったら使ってみてください。
参考
Introduction - PyMuPDF 1.21.0 documentation
株式会社フォトラクションでは一緒に働く仲間を募集しています