PyMuPDF(fitz)とは|インストールから使い方・ライセンスまで解説【2026年版】
PyMuPDF(パイミューピーディーエフ)は、C言語製の高速PDFエンジンMuPDFをPythonから扱うためのライブラリです。PDFのテキスト抽出、ページの画像化、メタデータや目次の取得などを数行のコードで実行でき、処理速度が速いことで知られます。コード上は長らくimport fitzと書いてきましたが、現在はimport pymupdfが推奨です。2026年6月時点の最新版は1.27.2.3。この記事では、pipでの導入、基本コード、画像化、そして見落とされがちなライセンス(AGPL/商用)までを、公式情報と実行確認済みのコードで解説します。
まとめ:PyMuPDFの要点
PyMuPDFは「速さ」が強みのPDF処理ライブラリです。導入はpip install pymupdfの一行で、コードではimport pymupdf(旧来のimport fitzも動作)で読み込みます。PDFを開くのはpymupdf.open()、テキスト抽出はpage.get_text()、ページの画像化はpage.get_pixmap()と、覚えるAPIは多くありません。一方で実務上もっとも重要なのがライセンスです。PyMuPDFはAGPL-3.0で公開されており、社内ツールやOSSなら無料ですが、ソースを公開しないSaaSや製品に組み込む場合はArtifex社の商用ライセンスが必要になります。以下でインストール、基本操作のコード、画像化、メタデータ取得、ライセンスの順に解説します。
PyMuPDF(fitz)とは|MuPDF由来の高速PDF処理ライブラリ
PyMuPDFは、Artifex社が開発する軽量PDFエンジンMuPDFのPythonバインディングです。レンダリングやテキスト抽出といった重い処理はC実装のMuPDFが担うため、Pythonの書きやすさを保ちつつ高速に動作します。PDFだけでなく、XPS・EPUB・CBZ・FB2など複数の文書形式を同じコードで開ける点も特徴です。読み方は「パイミューピーディーエフ」で、基盤エンジンのMuPDFは「ミューピーディーエフ」と読みます。最新版は1.27.2.3で、内部のMuPDFは1.27.2に対応しています。
import fitzとimport pymupdfの違い|なぜfitzなのか
古い記事やサンプルではimport fitzと書かれています。これはPyMuPDFの内部モジュール名が歴史的に「fitz」だったためで、別のライブラリではありません。現在は読みやすさのためimport pymupdfが公式に推奨され、import fitzは後方互換のエイリアスとして引き続き使えます。新規に書くならimport pymupdfを選んでください。なお、PyPIには無関係の「fitz」という別パッケージが存在するため、pip install fitzと打つのは誤りです。必ずpip install pymupdfでインストールします。
PyMuPDFのインストール|pip installとimportの確認
導入はpipの一行で完了します。Pillowなど追加パッケージは不要で、依存もまとめて入ります。
pip install pymupdf
インストール後、次のように読み込めれば成功です。バージョンはpymupdf.VersionBindで確認できます。
import pymupdf
print(pymupdf.VersionBind) # 例: 1.27.2.3
# 旧来の書き方(後方互換・現在も有効)
import fitz
WindowsでもmacOS・Linuxでも同じコマンドで導入でき、ホイール(ビルド済みパッケージ)が配布されているためコンパイラの準備は通常不要です。特定バージョンに固定したい場合はpip install pymupdf==1.27.2.3のようにバージョンを指定します。
PyMuPDFの基本的な使い方|PDFを開いてテキストを抽出
もっとも使う操作が、PDFを開いてテキストを取り出す処理です。ここからのコードはすべて実行確認済みのものです。
PDFを開いてページ数とテキストを取得する
PDFはpymupdf.open()で開き、page_countでページ数、load_page()で特定ページを取得します。
import pymupdf
doc = pymupdf.open("sample.pdf")
print(doc.page_count) # ページ数
page = doc.load_page(0) # 1ページ目(0始まり)
print(page.get_text()) # ページのテキスト
doc.close()
ファイルが存在しない、または壊れている場合は例外が出るため、実運用ではtry-exceptで囲んで失敗時の処理を入れておきます。
全ページのテキストを抽出し形式を指定する
ドキュメントはそのままforで回すと各ページを順に取得できます。全文をまとめて取り出すなら次のようにします。
import pymupdf
doc = pymupdf.open("sample.pdf")
all_text = "\n".join(page.get_text() for page in doc)
doc.close()
get_text()は引数で出力形式を変えられます。プレーンテキストなら"text"、レイアウトを保ったHTMLなら"html"、位置やフォント情報を含む構造化データなら"json"を渡します。検索インデックスを作るなら"text"、表示用途なら"html"、座標を使った後処理なら"json"、と用途で選び分けます。なお画像として埋め込まれた文字は抽出できないため、その場合はTesseract OCRの使い方で触れているようなOCR処理を別途併用します。
キーワードを検索して位置を取得する
特定の語がページのどこにあるかはsearch_for()で取得します。戻り値は一致箇所の矩形(Rect)のリストで、ハイライトや切り出しに使えます。
rects = page.search_for("PyMuPDF")
print(rects) # 例: [Rect(100.1, 60.1, 150.2, 75.2)]
ページの画像化|get_pixmapでPNG・SVGに変換
ページを画像にするにはget_pixmap()を使います。dpiで解像度を、colorspaceでカラーモードを指定でき、グレースケールにするとファイルサイズを抑えられます。
page = doc.load_page(0)
pix = page.get_pixmap(dpi=150) # 解像度150dpi
pix.save("page.png") # PNG保存
gray = page.get_pixmap(colorspace=pymupdf.csGRAY) # グレースケール
svg = page.get_svg_image() # SVG文字列(拡大はget_svg_image(matrix=pymupdf.Matrix(2,2)))
SVGはベクター形式のため拡大しても劣化せず、図面やWeb埋め込みに向きます。なお、古い解説で見かけるget_svg_data()というメソッドは存在せず、正しくはget_svg_image()です。PDFをそのままMarkdownへ変換したい場合は、PyMuPDFを土台にしたPyMuPDF4LLMを使ったPDFからMarkdownへの変換手順が便利です。
メタデータ・目次・リンクの取得
文書の属性や構造も簡単に取り出せます。メタデータは辞書で返り、目次は階層・タイトル・ページ番号のリストになります。
print(doc.metadata) # タイトル・著者・作成日などの辞書
print(doc.get_toc()) # 目次 [[レベル, タイトル, ページ], ...]
links = page.get_links() # ページ内リンクのリスト
メタデータは文書管理や検索の絞り込みに、目次はナビゲーション生成に使えます。暗号化や権限制限のあるPDFでは一部の取得が制限されるため、doc.permissions(整数のビットフラグで返る)で許可状況を確認してから処理を進めると安全です。
PyMuPDFのライセンスと商用利用|AGPLと商用ライセンス
PyMuPDFを業務で使う前に必ず確認したいのがライセンスです。PyMuPDFと基盤のMuPDFはどちらもArtifex社が管理し、オープンソース版はGNU AGPL-3.0で提供されています。AGPLは、PyMuPDFを組み込んだソフトウェアを配布・公開する場合、自分のコードもAGPLで公開する義務を課します。ここで見落とされやすいのが、ネットワーク経由で提供するSaaSやWebアプリ、Dockerで配布する形態も「配布」に該当しうる点です。つまり、ソースを公開できない自社プロダクトやSaaSにPyMuPDFを組み込むなら、Artifex社の商用ライセンス(有償)が必要になります。逆に、社内限定のツールや、AGPLで公開するOSSであれば無償で使えます。「pymupdf 価格」「商用利用」という検索が一定数あるのは、この無償/有償の境界が分かりにくいためで、判断に迷う場合は導入前にライセンス形態を確定させておくべきです。
PyMuPDFを使うべきでない場面・他ライブラリとの違い
PyMuPDFは高速で多機能ですが、すべての案件で最適ではありません。最大の判断材料はAGPLです。ソースを公開できない商用製品やSaaSで、商用ライセンス費用をかけられないなら、PyMuPDFは選ばない方が無難です。その場合は、より緩いライセンスのpypdf(BSD系)や、表抽出に強いpdfplumberが候補になります。一方で、テキスト抽出やレンダリングの速度、対応フォーマットの広さを重視するならPyMuPDFが優位です。スキャンされた画像PDFから文字を取りたいなら、PyMuPDF単体ではなくOCRや、PDF情報抽出ツールMinerU、Markerのような構造抽出ツールと組み合わせる方が実用的です。要するに、ライセンスが許容でき速度を求めるならPyMuPDF、ライセンス制約を避けたいなら別ライブラリ、という判断になります。
よくある質問(FAQ)
PyMuPDFの読み方は?
「パイミューピーディーエフ」と読みます。基盤エンジンのMuPDFは「ミューピーディーエフ」です。コード上のモジュール名が「fitz」であるため、import文だけ見ると別物に見えますが同じライブラリです。
import fitzとimport pymupdfの違いは?
指すものは同じで、import pymupdfが現在の推奨、import fitzは後方互換のエイリアスです。新規コードではimport pymupdfを使ってください。どちらでも同じ機能が呼べます。
pip install fitzでインストールできますか?
できません。PyPIの「fitz」はPyMuPDFとは無関係の別パッケージです。必ずpip install pymupdfでインストールし、コード側でimport pymupdf(またはimport fitz)と書きます。
PyMuPDFは無料で商用利用できますか?
ライセンス次第です。AGPL-3.0のまま使うなら無償ですが、その場合は組み込んだソフトウェアのソース公開義務が生じます。ソースを公開できないSaaSや製品に組み込むなら、Artifex社の商用ライセンス(有償)が必要です。
PyMuPDFとpypdfはどちらを使うべきですか?
速度と機能、対応フォーマットの広さを重視し、AGPLが許容できるならPyMuPDFです。ライセンス制約を避けたい、または基本的なページ操作で十分なら、BSD系ライセンスのpypdfが向きます。表抽出が主目的ならpdfplumberも候補です。