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()

関連リンク

注意点

  1. 座標系(Origin)
    1. エクセルは「行(Y), 列(X)」の順で考えがちですが、PDFは数学と同じ $(X, Y)$ です。ただし、$Y$軸が下向きなのが最大の特徴です。
    2. $(0, 0)$:ページの左上
    3. $(width, height)$:ページの右下
  2. 色(Color)
    1. RGBを0〜255で指定したい場合は、単に 255で割る と覚えればOKです。
    2. 赤 $(255, 0, 0)$ $\rightarrow$ (1, 0, 0)
    3. グレー $(128, 128, 128)$ $\rightarrow$ (128/255, 128/255, 128/255)
  3. 領域指定(Rect)
    1. 四角形を指定するときは、リストやタプルで [x0, y0, x1, y1] (左上座標と右下座標)を渡すことが多いです。
    2. page.draw_rect([50, 50, 200, 100], …)
    3. $\rightarrow$ 「左から50、上から50」の地点から、「左から200、上から100」の地点まで四角を塗る。