ローカルのスクリプト
PythonでPDFをMarkdownに変換
更新日 · pdftomd.tools チーム
PythonでPDFをMarkdownに変換すれば、自分のパソコン上のスクリプトで作業が完結します。このガイドでは、2つのオープンソースライブラリの検証済みスニペットと、何もインストールしたくない日のためのブラウザツールを紹介します。

手元にPythonがない? 下のブラウザツールなら、インストールなしで同じ作業ができます。テキスト層のあるファイルをドロップして、結果をコピーするだけです。
元のPDF
ここにPDFをドロップ、またはクリックして選択
テキストを含むPDFのみ対応。スキャンにはOCRが必要ですが、このツールにはOCR機能はありません。
Markdownプレビュー
ここにMarkdownが表示されます。
4ステップのセットアップ
インストールから出力ファイルまでの、ローカルのパイプライン。
01環境を作る
python -m venv .venv で仮想環境を作って有効にし、ライブラリがシステムのPythonに入らないようにします。
スニペットを見る
02ライブラリを1つ入れる
汎用のMarkdown出力なら pip install pymupdf4llm、表が中心なら pip install pdfplumber を実行します。
ライブラリを選ぶ
03スクリプトを実行
このページのスニペットを .py ファイルにコピーし、対象の文書を指定します。実行するたびに、開いて確認できる .md ファイルが書き出されます。
スニペットをコピー
04出力を確認
.md ファイルを元の文書と比べ、テキストを次の処理に回す前に、紛れ込んだヘッダーやフッターを取り除きます。
ブラウザで比べる
PDF→MarkdownにはどのPythonライブラリ?
PDFをMarkdownに変換するための唯一の最良のライブラリはありません。速度、ライセンス、表の扱いのバランスがそれぞれ違います。pymupdf4llm はPyMuPDFの上に作られていて、レイアウトを読んで見出しや罫線のある表を含むMarkdownを直接書き出します。そのため、ノートや検索の用途では妥当な第一候補です。pdfplumber は文字、線、表のセルにより深くアクセスできるので、表のデータが主な目的のスクリプトに向いています。
どちらもサードパーティのオープンソースプロジェクトで、このサイトの製品ではありません。文書が数個なら、このページのブラウザツールがインストールなしで似た処理をこなします。何百ものファイルを定期的に処理するなら、ローカルのPythonスクリプトのほうが向いています。
- pymupdf4llm:1回の呼び出しでPDF→Markdown
- pdfplumber:罫線のある表のセルに精密にアクセス
- ブラウザツール:インストールもアップロードも不要
どの方法にも共通する限界
どの選択肢も、そのままではスキャンを読めません。ブラウザツールにはOCRがなく、上のライブラリも画像だけのページには別のOCRの手順が必要です。結合セル、回転した表、2段組みのレイアウトは、どのPythonライブラリにも私たちのブラウザツールにも難しいので、表は手で確認してください。ブラウザツールでは、罫線なしの表には3行以上が必要で、1行目は常にヘッダー行になります。

PDFをMarkdownにするPythonスニペット
pymupdf4llm 1.28 と pdfplumber 0.11 で検証済み。1つコピーしてローカルで実行してください。
pymupdf4llmで1ファイル
サードパーティ · AGPLレイアウトを考慮して高速に動き、出力に見出しと罫線のある表が残ります。PyMuPDFはAGPLなので、クローズドな製品に組み込む前に条件を確認してください。
# pip install pymupdf4llm
import pathlib
import pymupdf4llm
md = pymupdf4llm.to_markdown("report.pdf")
pathlib.Path("report.md").write_text(md, encoding="utf-8")
pdfplumberで表を抽出
サードパーティ · MIT罫線のある表に最適です。初期設定では線が描かれた表だけを見つけ、罫線なしの表には独自の設定が必要です。ヘルパー関数がそれぞれの表をパイプテーブルとして書き出します。
# pip install pdfplumber
import pdfplumber
def table_to_md(rows):
rows = [[(c or "").replace("|", "\\|").strip() for c in r] for r in rows]
head, body = rows[0], rows[1:]
lines = ["| " + " | ".join(head) + " |", "|" + " --- |" * len(head)]
lines += ["| " + " | ".join(r) + " |" for r in body]
return "\n".join(lines)
with pdfplumber.open("invoice.pdf") as pdf:
for page in pdf.pages:
for table in page.extract_tables():
print(table_to_md(table), end="\n\n")
pymupdf4llmでフォルダーごと
サードパーティ · AGPL1つのループで pdfs フォルダー内の全ファイルを読み、入力ごとに .md ファイルを1つ書き出します。
# pip install pymupdf4llm
import pathlib
import pymupdf4llm
out = pathlib.Path("markdown")
out.mkdir(exist_ok=True)
for pdf in sorted(pathlib.Path("pdfs").glob("*.pdf")):
md = pymupdf4llm.to_markdown(str(pdf))
(out / f"{pdf.stem}.md").write_text(md, encoding="utf-8")
print("wrote", out / f"{pdf.stem}.md")
Pythonスクリプトが向いている場面
スクリプト化する価値がある3つの作業。

スクリプトでもブラウザでも、ファイルはローカルに
ローカルのスクリプトはファイルをどこにも送りません。私たちのブラウザツールも同じで、変換はページ内の pdf.js で行われ、ファイルが私たちのサーバーに届くことはありません。

Markdownをまたページにする
Pythonで処理したあと、印刷用の版が必要になることもあります。逆方向のツールが、ブラウザでMarkdownをA4ページとして表示します。
関連ツール
PDFとMarkdownにまつわるその他のページ。
出典
- pymupdf4llm to_markdown() reference — PDF4LLM docs
- PyMuPDF (AGPL-3.0) — GitHub
- pdfplumber (MIT) — GitHub
- pdf.js — Mozilla
よくある質問
Pythonの選択肢、ライセンス、制限についての質問。
PythonでPDFをMarkdownに変換するいちばん簡単な方法は?
pymupdf4llmです。pipでインストールし、ファイルに対して to_markdown を呼び出すだけで、見出し、リスト、罫線のある表を含むMarkdownが得られます。
アカウントやキーは必要ですか?
いいえ。ライブラリはpipでインストールしてオフラインで動き、ブラウザツールにもアカウントは不要です。スクリプトにはローカルのPythonライブラリを使ってください。
pymupdf4llmとpdfplumberはこのサイトのものですか?
いいえ。どちらもサードパーティのオープンソースプロジェクトです。pymupdf4llmとPyMuPDFは AGPL、pdfplumberは MIT です。
Pythonスクリプトでスキャンを読めますか?
それだけでは読めません。画像だけのページには、まずOCRの手順が必要です。私たちのブラウザツールにもOCRはなく、ファイルがスキャンのように見えるときは警告します。
変換で表を残すには?
pymupdf4llmは罫線のある表をパイプテーブルとして書き出します。pdfplumberは表を見つけ、ヘルパー関数がそれを変換します。罫線なしの表は、どちらでも調整が必要です。
ブラウザツールはこれらのライブラリと同じものですか?
いいえ。pdf.jsと独自のレイアウト規則を使っているので、出力は異なることがあります。インストールが不要で、数個のファイルに向いています。
Pythonスクリプトはファイルをアップロードしますか?
いいえ。ローカルのスクリプトは自分のパソコンで動き、ここのブラウザツールもアップロードせずにファイルを処理します。


