Python で PDF を Markdown に

PDF を Markdown に変換する 4 つのライブラリについて、インストールコマンドと動くコード、ライセンスで何ができるか、どう選ぶかをまとめました。

最終更新: 2026-11-13

どのライブラリを選ぶか

ライブラリライセンス必要なもの向いている用途
PyMuPDF4LLMAGPL 3.0、または有料の商用ライセンスpip だけ速く正確なテキスト PDF、見出しと表
MarkItDownMITpip だけ1 回の呼び出しで多くの形式
DoclingMITPyTorch、モデルのダウンロード複雑なレイアウト、表、構造化された出力
Markerコードは Apache 2.0、モデルの重みは改変版 OpenRAIL-M ライセンスPyTorch と、OCR 用の推論サーバー数式の多い論文やスキャン、できれば GPU で

以下のバージョンは、このページ冒頭の日付時点のものです。PDF が数個だけなら、どれも必要ありません。トップページの変換ツールがブラウザの中で同じことをします。

PyMuPDF4LLM

PyMuPDF の Markdown 書き出し機能です。PyMuPDF 2.0 からは pymupdf パッケージに含まれています。import 名は pymupdf4llm のままです。

pip install pymupdf
import pymupdf4llm

md = pymupdf4llm.to_markdown("report.pdf")
open("report.md", "w", encoding="utf-8").write(md)

便利なオプション:

# 一部のページだけ(0 始まり)を、ページごとにメタデータ付きの dict で
pages = pymupdf4llm.to_markdown("report.pdf", pages=[0, 1, 2], page_chunks=True)
for p in pages:
    print(p["metadata"]["page_number"], len(p["text"]))

スキャンしたページには OCR エンジンも入れます。pip install rapidocr onnxruntime を実行すると、PyMuPDF はテキスト層のないページも読みます。

ライセンス: PyMuPDF は GNU AGPL 3.0 と Artifex の商用ライセンスのデュアルライセンスです。AGPL では、ソフトウェアを配布したりネットワークサービスとして提供したりする場合、自分のソースコードも公開する必要があります。クローズドな製品で使う前に確認してください。

私たちのベンチマークでは、PyMuPDF4LLM 2.1 は本文の平均 99% を残し、評価した 3 つの変換ツールの中で読む順序が最も正確でした。

MarkItDown

PDF、Word、PowerPoint、Excel、HTML、EPUB など、多くの形式に対応した Microsoft の変換ツールです。

pip install 'markitdown[pdf]'
from markitdown import MarkItDown

md = MarkItDown()
result = md.convert("report.pdf")
open("report.md", "w", encoding="utf-8").write(result.markdown)

コマンドラインでは markitdown report.pdf -o report.md です。

ライセンス: MIT。

知っておきたいこと: PDF では pdfminer.six と pdfplumber で文字を取り出します。出力には見出しがなく、PDF の改行と行末のハイフンが残り、標準のインストールには OCR がありません。さまざまなオフィスファイルの中に PDF が少し混ざっている程度なら、ちょうどよい選択です。詳しくは MarkItDown のページをご覧ください。

Docling

IBM Research Zurich で始まり、現在は LF AI & Data Foundation がホストしている文書変換ツールキットです。レイアウト、表、OCR のモデルを動かすので、PyTorch をインストールし、初回にモデルをダウンロードします。PDF のほかに Word、PowerPoint、Excel、HTML、画像なども読めます。

pip install docling
from docling.document_converter import DocumentConverter

converter = DocumentConverter()
result = converter.convert("report.pdf")
md = result.document.export_to_markdown()
open("report.md", "w", encoding="utf-8").write(md)

コマンドラインでは docling report.pdf で、現在のフォルダに .md ファイルが書き出されます。

ライセンス: MIT。Markdown のほか、HTML や、レイアウト情報を後の処理のために保つロスレスな JSON 形式にも書き出せます。

Marker

独自の視覚モデルを中心に作られた Datalab の変換ツールです。数式とスキャンに強い反面、動かすのは重めです。

pip install marker-pdf

Marker には PyTorch が必要で、OCR のために初回に推論サーバーを起動します。NVIDIA の GPU では vLLM、CPU や Apple Silicon では llama.cpp の llama-server バイナリを使います。

from marker.converters.pdf import PdfConverter
from marker.models import create_model_dict
from marker.output import text_from_rendered

converter = PdfConverter(artifact_dict=create_model_dict())
rendered = converter("report.pdf")
text, _, images = text_from_rendered(rendered)
open("report.md", "w", encoding="utf-8").write(text)

コマンドラインでは marker_single report.pdf です。

ライセンス: コードは Apache 2.0 です。モデルの重みは改変版 AI Pubs OpenRAIL-M ライセンスで、研究、個人利用、資金調達額または売上が 500 万ドル未満のスタートアップは無料です。それより大きな商用利用には Datalab のライセンスが必要です。

フォルダ内の PDF をまとめて変換する

同じループはどのライブラリでも使えます。ここでは PyMuPDF4LLM の例です。

from pathlib import Path
import pymupdf4llm

src, out = Path("pdfs"), Path("markdown")
out.mkdir(exist_ok=True)
for pdf in sorted(src.glob("*.pdf")):
    try:
        md = pymupdf4llm.to_markdown(str(pdf))
    except Exception as e:  # 壊れたファイルや暗号化されたファイルで全体を止めない
        print(f"skipped {pdf.name}: {e}")
        continue
    (out / f"{pdf.stem}.md").write_text(md, encoding="utf-8")

スクリプトが向かない場面

  • 数ファイルを一度だけ: 環境を用意するより変換ツールにドロップするほうが早く、各ページを Markdown と見比べられます。
  • 共有のマシンで機密文書を扱う: ブラウザの変換ツールはインストール不要で、ファイルはタブの中にとどまります。
  • トークン数と RAG チャンクを自分で書かずに使いたい: LLM 向け PDF から Markdown へをご覧ください。

よくある質問

いちばん速いライブラリは?

テキスト PDF なら、MarkItDown と PyMuPDF4LLM はノートパソコンで 1 文書あたり 1 秒未満から数秒です。Docling と Marker はニューラルモデルを動かすので、GPU がないとかなり遅くなります。

表にいちばん強いのは?

私たちが測った 2 つのうち、PyMuPDF4LLM はきちんとした Markdown の表を出力し、MarkItDown はほとんど出力しませんでした。Docling と Marker はどちらも表のモデルを使い、複雑な表によく勧められます。自分の文書で試してみてください。

商用製品で使えますか?

MarkItDown と Docling は MIT なので使えます。PyMuPDF は AGPL に従うか商用ライセンスが必要です。Marker のコードは Apache 2.0 ですが、モデルの重みには商用利用での売上の上限があります。

JavaScript の選択肢はありますか?

pdftomd 自体が、ブラウザの中で JavaScript と WebAssembly で動いています。テキストのエンジンはオープンソースの @firecrawl/pdf-inspector-wasm パッケージ、OCR は ONNX Runtime Web で動く PaddleOCR です。各コンポーネントはライセンスのページをご覧ください。