PyMuPDF_Fitz
Published at 2026/04/11
PyMuPDF_Fitz
テストコード
ページ数&表紙画像の取得
analyze_pdf.py
import fitz
def analyze_pdf(pdf_path, output_image_path="cover.png"):
# PDFを開く
doc = fitz.open(pdf_path)
# 1. ページ数を調べる
page_count = len(doc)
print(f"総ページ数: {page_count}")
# 2. 表紙(1ページ目)を画像として取り出す
page = doc[0]
pix = page.get_pixmap() # ページを画像(ピクセルマップ)に変換
pix.save(output_image_path)
print(f"表紙を保存しました: {output_image_path}")
doc.close()
analyze_pdf("sample_fitz.pdf")
新規PDF作成
create_pdf.py
import fitz # PyMuPDF
def create_pdf_with_fitz(filename="sample_fitz.pdf"):
doc = fitz.open() # 新規PDF作成
for i in range(1, 31):
page = doc.new_page() # A4サイズがデフォルト
width, height = page.rect.width, page.rect.height
if i == 1:
# --- 表紙のデザイン ---
# 背景に色を塗る(青い長方形)
page.draw_rect([0, 0, width, height / 2], color=None, fill=(0.2, 0.4, 0.8), overlay=True)
# 円を描画
page.draw_circle((width / 2, height / 2), 50, color=(1, 0.5, 0), fill=(1, 0.5, 0))
# 文字
page.insert_text((width / 2 - 100, height / 2 - 150), "Python PDF Test", fontsize=40, color=(1, 1, 1))
else:
# --- 本文ページ ---
page.insert_text((50, 50), f"This is page {i}", fontsize=20)
page.draw_line((50, 60), (width - 50, 60), color=(0.7, 0.7, 0.7)) # 線を引く
doc.save(filename)
doc.close()
print(f"'{filename}' を作成しました。")
create_pdf_with_fitz()
関連リンク
- PyMuPDF documentation
- Page - PyMuPDF documentation - Pageクラスのメソッド
- PyMuPDF: How to Guide - PyMuPDF documentation - 逆引き
注意点
- 座標系(Origin)
- エクセルは「行(Y), 列(X)」の順で考えがちですが、PDFは数学と同じ $(X, Y)$ です。ただし、$Y$軸が下向きなのが最大の特徴です。
- $(0, 0)$:ページの左上
- $(width, height)$:ページの右下
- 色(Color)
- RGBを0〜255で指定したい場合は、単に 255で割る と覚えればOKです。
- 赤 $(255, 0, 0)$ $\rightarrow$ (1, 0, 0)
- グレー $(128, 128, 128)$ $\rightarrow$ (128/255, 128/255, 128/255)
- 領域指定(Rect)
- 四角形を指定するときは、リストやタプルで [x0, y0, x1, y1] (左上座標と右下座標)を渡すことが多いです。
- page.draw_rect([50, 50, 200, 100], …)
- $\rightarrow$ 「左から50、上から50」の地点から、「左から200、上から100」の地点まで四角を塗る。