---
title: "PyMuPDF（fitz）とは｜インストールから使い方・ライセンスまで解説【2026年版】"
url: "https://www.issoh.co.jp/tech/details/4017/"
published: 2024-10-31
updated: 2026-10-13
categories: ["Python"]
publisher: "株式会社一創"
---

# PyMuPDF（fitz）とは｜インストールから使い方・ライセンスまで解説【2026年版】

PyMuPDFは、C言語で書かれたPDFエンジンMuPDFをPythonから呼び出すライブラリです。PDFのテキスト・表・画像の抽出、ページの画像化、結合や透かしなどの編集を1つのパッケージでこなし、開発元は米Artifex Softwareです。この記事では2026年10月時点の最新版1.28.2で全コードを実行し直し、出力をそのまま載せています。1.28.2では古い書き方の`import fitz`に非推奨の警告が出るようになり、PyPIの`fitz`パッケージも無効化されました。古い解説記事のとおりに書くと動かない箇所があるので、その点から順に説明します。

## まとめ：PyMuPDFの要点

- インストールは`pip install pymupdf`。Python 3.10以上が必要で、3.9の環境では1.26.5までしか入らない。
- コードは`import pymupdf`で書く。`import fitz`は1.28.2で警告が出る旧名で、`pip install fitz`は、2026年8月に無効化された版が入るためエラーで終わる。
- テキストは`page.get_text()`、表は`page.find_tables()`、画像化は`page.get_pixmap()`、埋め込み画像は`doc.extract_image()`で取り出せる。
- 公的PDF（480ページ）の全文抽出は3.66秒で、同じ環境のpypdfの約3分の1、pdfplumberの約10分の1の時間だった。
- ライセンスはAGPL-3.0とArtifex商用ライセンスのデュアル。自社アプリのソースをAGPLで公開せずに、配布する製品や社外向けのWebサービスに組み込むなら商用ライセンスが要る。価格は非公開で、個別見積もり。

## PyMuPDFでできること｜MuPDFをPythonから使うライブラリ

PyMuPDFの処理本体はC言語のMuPDFで、Pythonは呼び出し口です。C言語のエンジンで処理する構成が特徴です。後述のテキスト抽出比較ではpypdfやpdfplumberより短時間でしたが、処理内容やPDFによって差は変わります。[公式の機能比較表](https://pymupdf.readthedocs.io/en/latest/about.html)によると、PDFに加えてXPS・EPUB・MOBI・FB2・CBZ・SVG・TXT・画像を開け、ページの描画（画像化）はすべての形式でできます。pypdfとpikepdfにはページ描画機能がありませんが、pdfplumberには`Page.to_image()`による画像化機能があります。

主な用途は次の4つです。

- 抽出：テキスト（座標・フォント付き）、表、埋め込み画像、目次、リンク、メタデータ
- 変換：ページのPNG・SVG化、PDF以外の文書からPDFへの変換
- 編集：ページの結合・削除・並べ替え、文字や画像の書き込み、注釈、墨消し（redaction）
- OCR：文字情報を持たないスキャンPDFをTesseractで読む

### PyMuPDF・PyMuPDF4LLM・PyMuPDF Proの違い

同じArtifexの製品に名前の似たものが3つあります。PyMuPDFが土台で、PyMuPDF4LLMはその上でPDFを見出しや表の構造を残したMarkdownに変換するパッケージ、PyMuPDF ProはWordやExcelなどOffice文書を扱えるようにする商用の拡張です。RAGやLLMに渡すためにPDFをMarkdownにしたいなら、PyMuPDF単体で組むよりPyMuPDF4LLMを使うほうが早く、手順は[PyMuPDF4LLMの使い方｜PDFをMarkdownに変換する手順と日本語PDFの注意点【1.28.2】](/tech/details/2325/)にまとめています。

## fitzとpymupdfの違い｜import fitzは1.28.2で非推奨

PyMuPDFのモジュール名は長く`fitz`でした。パッケージ名（pymupdf）とimport名（fitz）が食い違うため、初めて使う人がつまずく原因になっていました。[PyMuPDFの変更履歴](https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt)では、1.24.3（2024年5月9日）で「モジュール名を`pymupdf`にした。`fitz`は後方互換のために引き続きサポートする」と記されています（公式FAQは1.24.0から`import pymupdf`を推奨と記載）。

その互換も終わりに向かっています。1.28.2（2026年8月6日）の変更履歴には「旧`fitz`モジュールをimportしたときに警告を出す」とあり、実際に1.28.2で`import fitz`を実行すると次の1行が出ます。

```
$ python -c "import fitz"
warning: The `fitz` API is deprecated and will be removed in future. Use `import pymupdf` instead.
```

「将来削除する」と明記されているので、新しく書くコードは`import pymupdf`にしてください。既存コードの置き換えは`import fitz`を`import pymupdf`に、`fitz.`を`pymupdf.`に変えるだけで済みます。行数が多くてすぐに直せない場合は、`import pymupdf as fitz`と書けば残りの`fitz.open()`などはそのまま動き、警告も出ません（1.28.2で確認）。なお、GitHubの開発ブランチの変更履歴では、次の版でこの警告をPython標準の`FutureWarning`に切り替える予定です。

### pip install fitzのエラーと復旧手順

「import fitzで使うのだから」と`pip install fitz`を実行するのは誤りです。PyPIの`fitz`はPyMuPDFとは無関係の別パッケージで、[公式のインストール手順](https://pymupdf.readthedocs.io/en/latest/installation.html)は最終リリースが2017年の保守されていないパッケージと説明しています。公式FAQも、両方を入れると共存できず`No module named 'frontend'`などのエラーになると注意しています。

この混乱を終わらせるため、PyPIの`fitz`は2026年8月11日に版番号0.0.0の無効化パッケージへ置き換えられ、それ以前の版はPyPIから消えています。中身を確認すると、READMEに「このパッケージはPyMuPDFではない」と書かれ、インストール処理は意図的にエラーで終わる作りです。まだ`fitz`を入れていない環境で実行すると、次のように失敗します。

```
$ pip install fitz
      ERROR: Package 'fitz' has been deactivated and cannot be installed.
      Please install 'pymupdf' instead.
ERROR: Failed to build 'fitz' when getting requirements to build wheel
```

このエラーが出たら`pip install pymupdf`を実行すれば解決します。2026年8月より前に`fitz`を入れてしまった環境では、`pip uninstall fitz`のあとに`pip install --force-reinstall pymupdf`で入れ直してください。

## PyMuPDFのインストール｜pip install pymupdfと動作要件

```
pip install pymupdf
python -c "import pymupdf; print(pymupdf.__version__)"
# 1.28.2

# 記事と同じ版で試す場合
python -m pip install "pymupdf==1.28.2"
```

[PyPI](https://pypi.org/project/PyMuPDF/)の1.28.2はPython 3.10以上を要求します。MuPDFを組み込んだビルド済みのwheelが配布されているので、Cコンパイラは要りません。1.28.2のwheelがある環境は次のとおりです。

| OS           | CPU                 | 条件              |
| ------------ | ------------------- | --------------- |
| Windows      | x64・x86・ARM64       | ARM64は1.28.2で追加 |
| macOS        | Apple Silicon・Intel | Intelは10.15以上   |
| Linux（glibc） | x86\_64・aarch64     | glibc 2.28以上    |
| Linux（musl）  | x86\_64             | Alpineなど        |
| Pyodide      | WebAssembly         | ブラウザ内のPython    |

wheelは約24MB、インストール後のpymupdfフォルダは59MBでした（macOS・Python 3.12で計測）。

つまずきやすいのは次の2つです。

- Python 3.9の環境では、エラーにならず古い1.26.5が入る。3.10以上を要求するようになったのは1.26.6（2025年11月5日）からで、pipは条件を満たす最後の版を黙って選ぶ。最新版のAPIが無いときは`pymupdf.__version__`を確認する。
- glibcが2.28より古いLinux（CentOS 7など）ではwheelが使えず、88MBのソース一式からビルドが始まって失敗しやすい。[公式のインストール手順](https://pymupdf.readthedocs.io/en/latest/installation.html)も、古いLinuxではOSの更新、またはソースからのローカルビルドを案内している。

## PDFからテキストを抽出する｜get\_textの使い方

以下のコードは、日本語の本文と罫線付きの表、リンク、画像、目次を入れた3ページの検証用PDF（sample.pdf）で実行した結果です。同じPDFは次のコードで作れるので、作業フォルダで先に実行してから各コードを試してください。

```
import pymupdf

doc = pymupdf.open()
for i in range(3):
    page = doc.new_page()                  # 既定はA4縦（595×842ポイント）
    page.insert_text((72, 72), f"第{i+1}章 請求書の確認", fontname="japan", fontsize=16)
    page.insert_text((72, 110), "合計金額は 12,345 円です。PyMuPDF で抽出します。",
                     fontname="japan", fontsize=11)
    if i == 0:                             # 1ページ目に罫線付きの表・リンク・画像
        rows = [["品目", "数量", "金額"], ["りんご", "3", "300"], ["みかん", "5", "500"]]
        for r, row in enumerate(rows):
            for c, val in enumerate(row):
                rect = pymupdf.Rect(72 + c*150, 150 + r*24, 222 + c*150, 174 + r*24)
                page.draw_rect(rect, color=(0, 0, 0), width=0.8)
                page.insert_text((rect.x0 + 6, rect.y1 - 7), val, fontname="japan", fontsize=10)
        page.insert_link({"kind": pymupdf.LINK_URI, "from": pymupdf.Rect(72, 260, 300, 275),
                          "uri": "https://pymupdf.readthedocs.io/"})
        page.insert_text((72, 272), "公式ドキュメントへのリンク", fontname="japan", fontsize=10)
        pix = pymupdf.Pixmap(pymupdf.csRGB, pymupdf.IRect(0, 0, 40, 40), False)
        pix.clear_with(200)
        page.insert_image(pymupdf.Rect(72, 300, 152, 380), pixmap=pix)
doc.set_toc([[1, "第1章", 1], [1, "第2章", 2], [2, "2.1 詳細", 2], [1, "第3章", 3]])
doc.set_metadata({"title": "検証用PDF", "author": "issoh"})
doc.save("sample.pdf")
```

### PDFの読み込みとページ数・本文の取得

```
import pymupdf

doc = pymupdf.open("sample.pdf")
print(doc.page_count)            # ページ数
print(doc.metadata["title"])     # 文書のタイトル
page = doc[0]                    # 1ページ目（0始まり）
print(page.get_text())           # 本文をプレーンテキストで
doc.close()
```

```
3
検証用PDF
第1章 請求書の確認
合計金額は 12,345 円です。PyMuPDF で抽出します。
品目
数量
金額
りんご
3
300
...
```

表のセルは1行ずつばらばらに出ます。表の形を保ちたいときは後述の`find_tables()`を使います。`doc.metadata`は辞書で、title・author・creationDate・producerなどのキーを持ちます。

### get\_textの出力形式とブロック・単語・フォント情報

`get_text()`は引数で出力の形式を変えられます。座標で並べ替えたり、文字の大きさで見出しを見分けたりするときに使います。

```
import pymupdf

with pymupdf.open("sample.pdf") as doc:
    page = doc[0]
    # 段落（ブロック）単位：(x0, y0, x1, y1, テキスト, ブロック番号, 種別)
    for b in page.get_text("blocks")[:2]:
        print([round(v) for v in b[:4]], b[4].strip())
    # 単語単位：(x0, y0, x1, y1, 単語, ブロック, 行, 単語番号)
    print(len(page.get_text("words")))
    # フォント名・サイズまで含む辞書形式
    d = page.get_text("dict")
    span = d["blocks"][0]["lines"][0]["spans"][0]
    print(span["font"], round(span["size"], 1), span["text"])
```

```
[72, 56, 232, 75] 第1章 請求書の確認
[72, 99, 424, 112] 合計金額は 12,345 円です。PyMuPDF で抽出します。
16
Gothic 16.0 第1章 請求書の確認
```

座標の単位はポイント（1/72インチ）で、原点はページの左上です。`"words"`は空白で単語を区切るため、空白の無い日本語の文は1語として数えられます。1文字ずつの座標が要るときは`"rawdict"`を指定します。

### キーワードの位置検索とハイライト注釈

```
import pymupdf

with pymupdf.open("sample.pdf") as doc:
    for page in doc:
        for rect in page.search_for("合計金額"):
            print(page.number + 1, [round(v, 1) for v in rect])
            page.add_highlight_annot(rect)   # 見つけた箇所に黄色マーカー
    doc.save("highlighted.pdf")
```

```
1 [72.0, 99.0, 116.0, 112.2]
2 [72.0, 99.0, 116.0, 112.2]
3 [72.0, 99.0, 116.0, 112.2]
```

`search_for()`はヒットした範囲を`Rect`（左上と右下の座標）のリストで返します。ASCII文字の大文字と小文字は区別しませんが、アクセント付き文字などにはこの規則が適用されません。

## 表を抽出する｜find\_tablesの使い方

```
import pymupdf

with pymupdf.open("sample.pdf") as doc:
    page = doc[0]
    tabs = page.find_tables()
    print(len(tabs.tables))
    for row in tabs[0].extract():
        print(row)
```

```
Consider using the pymupdf_layout package for a greatly improved page layout analysis.
1
['品目', '数量', '金額']
['りんご', '3', '300']
['みかん', '5', '500']
```

罫線付きの表は行と列を保ったまま取れました。`find_tables()`は1.23.0で追加されたメソッドです。`tabs[0].to_pandas()`を使えばpandasのDataFrameにもなります。1行目の英文は、レイアウト解析用の追加パッケージpymupdf\_layoutが入っていないときに1.28.2が出す案内です。罫線の無い表が多いPDFでは、pymupdf\_layoutを依存パッケージとして使うPyMuPDF4LLMでの変換も試す価値があります。PyMuPDF4LLM 1.28.2で罫線の無い表を変換した結果は[PyMuPDF4LLMの使い方](/tech/details/2325/)の記事で比べていますが、表の検出結果はPDFによって変わるので、対象の文書で確かめてから採用してください。

## PDFページの画像化と埋め込み画像の抽出

```
import pymupdf

with pymupdf.open("sample.pdf") as doc:
    pix = doc[0].get_pixmap(dpi=150)     # 150dpiでラスタライズ
    pix.save("page1.png")
    print(pix.width, pix.height)
    svg = doc[0].get_svg_image()         # ベクター形式（SVG文字列）
    open("page1.svg", "w", encoding="utf-8").write(svg)
    # 埋め込み画像を元の形式のまま取り出す
    for xref, *_ in doc[0].get_images(full=True):
        img = doc.extract_image(xref)
        open(f"img_{xref}.{img['ext']}", "wb").write(img["image"])
        print(xref, img["ext"], img["width"], img["height"])
```

```
1240 1755
30 png 40 40
```

A4縦（595×842ポイント）を150dpiで描くと1240×1755ピクセルになります。解像度は`dpi`で指定するのが簡単です。`get_pixmap()`はページを丸ごと描画した画像、`extract_image()`はPDF内の画像オブジェクトを抽出します。元の画像形式は可能な場合に保持されますが、常に元ファイルと同じ形式やバイト列になるわけではありません。古い解説記事にある`get_svg_data()`というメソッドは存在せず、SVGは`get_svg_image()`で出力します。

## PDFの目次・リンク・メタデータの取得

```
import pymupdf

with pymupdf.open("sample.pdf") as doc:
    print(doc.get_toc())                  # [階層, 見出し, ページ番号]
    for link in doc[0].get_links():
        print(link["kind"], link.get("uri"))
```

```
[[1, '第1章', 1], [1, '第2章', 2], [2, '2.1 詳細', 2], [1, '第3章', 3]]
2 https://pymupdf.readthedocs.io/
```

`get_toc()`はしおり（アウトライン）を階層つきのリストで返し、ページ番号は1始まりです。`doc.set_toc()`に同じ形のリストを渡せば、しおりを書き込めます。リンクの`kind`は2が外部URL、1がPDF内の別ページへの移動を表します。

## PDFを編集する｜結合・ページ削除・透かしの書き込み

```
import pymupdf

a = pymupdf.open("sample.pdf")
b = pymupdf.open("highlighted.pdf")
a.insert_pdf(b, from_page=0, to_page=0)   # bの1ページ目をaの末尾へ
a.delete_page(1)                           # 2ページ目を削除
for page in a:                             # 全ページに日本語の透かし
    page.insert_text((400, 820), "社外秘", fontname="japan", fontsize=20,
                     color=(1, 0, 0), fill_opacity=0.3)
a.save("merged.pdf", garbage=3, deflate=True)
print(a.page_count)                        # 3
```

日本語を書き込むときは`fontname="japan"`を指定します。フォントファイルを用意しなくても書き込めますが、PDFに入るのはフォント名の参照だけで、フォント本体は埋め込まれません（merged.pdfを`page.get_fonts()`で調べると、拡張子欄が埋め込みなしを表す`n/a`でした）。表示は閲覧ソフト側の日本語フォントに頼るので、社外に配るPDFでは`page.insert_font(fontname="F0", fontfile="フォントファイルのパス")`でフォントを埋め込み、`fontname="F0"`で書き込みます。ヒラギノ角ゴシックW3を丸ごと埋め込むと1ページで5.7MBになりましたが、保存前に`doc.subset_fonts()`（既定の処理ではfontTools不要）で使った文字だけに絞ると135KBに収まりました。保存時の`garbage=3`は[公式APIリファレンス](https://pymupdf.readthedocs.io/en/latest/document.html#Document.save)によると、未使用オブジェクトの削除・相互参照表の詰め直し・重複オブジェクトの統合までを行う指定で、`deflate=True`は圧縮です。どちらも結合や削除のあとにファイルサイズが膨らむのを防ぎます。

## スキャンPDFをOCRで読む｜Tesseract連携と日本語の注意点

スキャンPDFのうち、OCRによるテキスト層が付いていない画像だけのページでは、`get_text()`は空文字を返します。PyMuPDFはOCRエンジンTesseractをMuPDFの中に組み込んでいて、[公式FAQ](https://pymupdf.readthedocs.io/en/latest/faq/index.html)によれば外部に必要なのは言語データ（tessdata）だけです。macOSなら`brew install tesseract tesseract-lang`、Ubuntuなら`apt install tesseract-ocr tesseract-ocr-jpn`で日本語のデータが入ります。Tesseract本体の導入と設定は[Tesseract OCRの使い方｜インストール・日本語設定・コマンドとPython/C#連携【5.5.3対応】](/tech/details/8204/)で詳しく扱っています。

```
import pymupdf

# スキャンPDFを模して、1ページ目を画像だけのPDFにする
src = pymupdf.open("sample.pdf")
pix = src[0].get_pixmap(dpi=200)
scan = pymupdf.open()
p = scan.new_page(width=src[0].rect.width, height=src[0].rect.height)
p.insert_image(p.rect, pixmap=pix)
print(repr(p.get_text()[:20]))                       # 文字は取れない

tp = p.get_textpage_ocr(language="jpn", dpi=300, full=True)
print(p.get_text(textpage=tp)[:60])
```

```
''
第1草請求
書の確認
合計金額は12,
345
円です。PyMuPDF
で抽出
...
```

日本語を読ませるには`language="jpn"`が必須で、既定の英語のままでは日本語が化けます。上の結果でも「第1章」が「第1草」になり、行の途中で改行が入りました。OCRの結果は誤読を含む前提で、金額や日付などは元の画像と照合する工程を残してください。検証環境（Homebrew版Tesseract 5.5.3）では環境変数を設定しなくても言語データが見つかりましたが、公式のインストール手順はこの自動検出に頼らないよう勧めています。本番の環境では`tessdata`引数か環境変数`TESSDATA_PREFIX`で場所を明示してください。請求書や申込書のように帳票の項目を大量に読み取る業務では、Tesseractの精度で足りないこともあります。その場合は[AI-OCR導入支援](/service/ai/ocr/)のように、帳票向けのOCRサービスと組み合わせる構成も検討対象になります。

## pypdf・pdfplumberとの速度比較｜公的PDFで実測

速さの差を、日本語の公的PDF2本で測りました。対象は内閣府の[事業継続ガイドライン（令和5年3月）](https://www.bousai.go.jp/kyoiku/kigyou/pdf/guideline202303.pdf)と、金融庁の[中小・地域金融機関向けの総合的な監督指針（令和8年10月版）](https://www.fsa.go.jp/common/law/guide/chusho.pdf)で、2026年10月13日に取得しました。各ライブラリで全ページのテキストを抽出し、次のコードで5回ずつ測った中央値を比べています。

```
# 事前準備: python -m pip install pymupdf==1.28.2 pypdf==6.20.1 pdfplumber==0.11.10
# 実行例: python bench.py guideline202303.pdf
import sys, time, statistics
import pymupdf, pypdf, pdfplumber

path = sys.argv[1]

def by_pymupdf():
    with pymupdf.open(path) as d:
        return "".join(p.get_text() for p in d)

def by_pypdf():
    return "".join(p.extract_text() or "" for p in pypdf.PdfReader(path).pages)

def by_pdfplumber():
    with pdfplumber.open(path) as d:
        return "".join(p.extract_text() or "" for p in d.pages)

for name, fn in [("pymupdf", by_pymupdf), ("pypdf", by_pypdf), ("pdfplumber", by_pdfplumber)]:
    times = []
    for _ in range(5):
        t = time.perf_counter()
        fn()
        times.append(time.perf_counter() - t)
    print(name, round(statistics.median(times), 2))
```

| 対象PDF                       | PyMuPDF 1.28.2 | pypdf 6.20.1 | pdfplumber 0.11.10 |
| --------------------------- | -------------- | ------------ | ------------------ |
| 内閣府 事業継続ガイドライン（53ページ）       | 0.72秒          | 2.06秒        | 6.36秒              |
| 金融庁 中小・地域金融機関向け監督指針（480ページ） | 3.66秒          | 9.65秒        | 38.69秒             |

計測環境はIntel Core i9-9880H・macOS・Python 3.12です。同じマシンで別の作業が動いていたため値は計測のたびに振れ、480ページのpdfplumberは別の回で23秒台、PyMuPDFは2秒台のこともありました。ただし3つの速さの順位は、どの回でも変わりませんでした。

抽出結果の中身も比べました。空白と改行を取り除いた文字列で比べると、pypdfの結果はPyMuPDFと2本とも完全に一致しました。pdfplumberは文字の種類と個数は一致したものの、並び順が一部で異なりました。どの結果が原本の読み順に正しいかまでは検証していないので、この比較は速度の比較として読んでください。

数千ページを毎日処理するバッチではこの差が積み上がるため、PyMuPDFを選ぶ理由になります。数ページの帳票を1日に数十件読む程度なら、どれを使っても数秒の差にしかなりません。その場合は次章のライセンス条件で選んでください。

## PyMuPDFのライセンスと商用利用｜AGPLと商用ライセンスの分かれ目

PyMuPDFはAGPL-3.0とArtifexの商用ライセンスのデュアルライセンスです。[公式ドキュメント](https://pymupdf.readthedocs.io/en/latest/about.html)によると土台のMuPDFも同じ2本立てで、PyPIのライセンス欄にも「Dual Licensed – GNU AFFERO GPL 3.0 or Artifex Commercial License」とあります。AGPLを選べば無料ですが、条件を守れないときは商用ライセンスを買う、という二択です。商用利用そのものが禁止されているわけではありません。

### AGPLのままで使える場面・使えない場面

AGPLは、GPLに「ネットワーク越しに使わせる場合」の条項を足したライセンスです。[AGPL-3.0の第13条](https://www.gnu.org/licenses/agpl-3.0.txt)は、プログラムを改変し、その改変版をネットワーク越しに利用者へ使わせる場合に、利用者がソースコードを受け取れるようにすることを求めています。[Artifexのライセンス説明](https://artifex.com/licensing)はさらに踏み込み、サーバー型のアプリケーションやサービスの一部としてPyMuPDFを使うなら、利用者に自社アプリケーションのソースコード全体をAGPLで開示しなければならない、という立場を明示しています。これを前提に場面を分けると次のとおりです。

| 使い方               | AGPLのままで     | 判断の根拠                |
| ----------------- | ------------ | -------------------- |
| 社内PCでのバッチ処理・分析    | 使える          | 配布もネットワーク提供もしない      |
| ソースを公開するOSS       | 使える          | AGPLで公開すれば条件を満たす     |
| 社員向けの社内Webアプリ     | 要確認          | 利用者は社員でもネットワーク提供に当たる |
| 社外向けのSaaS・Webサービス | 全ソースを開示するなら可 | 開示しないなら商用ライセンス       |
| ソース非公開のパッケージ製品    | 商用ライセンス      | 配布時にソース開示が必要         |

AGPLで使う場合も、Artifexは作成・変更したPDFのメタデータにArtifexのオープンソース製品とAGPLの情報を残し、producer行（作成ソフトの記録）を保持することを推奨しています。「社内だけだから大丈夫」と決める前に、そのツールに社外の人がブラウザやAPIでアクセスする経路が無いかを確認してください。判断がつかない場合は法務部門に相談するか、Artifexに問い合わせるのが確実です。

### 商用ライセンスの種類と価格

Artifexのライセンス説明では、商用ライセンスは利用形態ごとに個別に組み立てるとしたうえで、代表的な2種類を挙げています。

- OEM Distribution License：製品に組み込んで配布する場合。ソース開示は不要、配布本数を年1回報告、サポート付き。
- Subscription License：同じくソース開示は不要で、配布本数の年次報告は社内利用だけなら要らない。サポート付き。

費用はどちらも「1コピーあたりの料金と四半期ごとの最低料金」という形で、金額は公開されていません。見積もりはArtifexの営業窓口への問い合わせになります。予算化の段階では、社外提供の有無と想定する配布本数・利用者数を先に整理しておくと話が早く進みます。

## PyMuPDFを選ばない方がよい場面と代わりの候補

次の条件に当てはまるなら、PyMuPDF以外を選ぶほうが合理的です。

- ソースを公開できない社外向けサービスで、商用ライセンスの予算も取れない：BSD-3-Clauseのpypdf、MITのpdfplumberを選ぶ。どちらも純Pythonで、テキスト抽出の速度は上の実測のとおり数倍遅くなる。
- 罫線の無い表の位置や文字の並びを細かく調べたい：pdfplumberは1文字ごとの座標と罫線を確認しながら抽出条件を詰められる。
- LLMやRAGに渡すMarkdownが目的：PyMuPDF4LLMのほか、[Doclingとは？PDFをMarkdown化してRAGに載せる実装手順と採用判断](/tech/details/17736/)、レイアウト解析に深層学習を使う[Marker（marker-pdf）の使い方｜PDFをMarkdown変換する手順と商用ライセンス制約](/tech/details/12109/)がある。WordやExcelもまとめて変換したいなら[MarkItDown（マークイットダウン）とは｜各種ファイルをMarkdownに変換するMicrosoft製Pythonツール](/tech/details/4810/)が手軽。

反対に、画像化・編集・OCRまで1つのライブラリで済ませたい場合や、大量のPDFを速く処理したい場合は、PyMuPDFが第一候補です。pypdfとpdfplumberはどちらもOCRの機能を持たず、pypdfはページの画像化もできません（pdfplumberは`Page.to_image()`でページを画像にできます）。

## よくある質問（FAQ）

### PyMuPDFの読み方は？

読み方の一例は「パイミューピーディーエフ」です。PyはPython、MuPDFは土台のPDFエンジンの名前です。

### pip install fitzでインストールできますか？

できません。PyPIの`fitz`はPyMuPDFとは別のパッケージで、2026年8月11日に公開された0.0.0は、新規インストールを意図的に失敗させる無効化パッケージです。`pip install pymupdf`を実行してください。

### PyMuPDFは無料で商用利用できますか？

AGPL-3.0の条件を守れば無料で商用利用できます。社内でのバッチ処理や、ソースを公開するOSSでの利用がこれに当たります。自社アプリのソースをAGPLで公開せずに、配布する製品や社外向けのWebサービスに組み込むなら、Artifexの商用ライセンスが必要です。

### PyMuPDFの商用ライセンスの価格はいくらですか？

公開されていません。Artifexの説明では、1コピーあたりの料金に四半期ごとの最低料金を組み合わせた体系で、利用形態ごとに個別に見積もるとしています。

### PyMuPDFの代わりになるライブラリは？

テキスト抽出だけならpypdf（BSD-3-Clause）とpdfplumber（MIT）が代表的で、どちらもライセンス上の制約が緩い反面、実測では約3〜11倍の時間がかかりました。Markdownへの変換が目的ならPyMuPDF4LLM・Docling・Markerが候補です。

## 関連記事

- [PyMuPDF4LLMの使い方｜PDFをMarkdownに変換する手順と日本語PDFの注意点【1.28.2】](/tech/details/2325/)
- [Tesseract OCRの使い方｜インストール・日本語設定・コマンドとPython/C#連携【5.5.3対応】](/tech/details/8204/)
- [Doclingとは？PDFをMarkdown化してRAGに載せる実装手順と採用判断](/tech/details/17736/)
- [Marker（marker-pdf）の使い方｜PDFをMarkdown変換する手順と商用ライセンス制約](/tech/details/12109/)
- [MarkItDown（マークイットダウン）とは｜各種ファイルをMarkdownに変換するMicrosoft製Pythonツール](/tech/details/4810/)

---

出典: [PyMuPDF（fitz）とは｜インストールから使い方・ライセンスまで解説【2026年版】](<https://www.issoh.co.jp/tech/details/4017/>)（株式会社一創）
