ローカルのスクリプト

PythonでPDFをMarkdownに変換

更新日 · pdftomd.tools チーム

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

文書がコードエディターを通ってMarkdownファイルとして出てくる

手元にPythonがない? 下のブラウザツールなら、インストールなしで同じ作業ができます。テキスト層のあるファイルをドロップして、結果をコピーするだけです。

ブラウザで実行 · アップロードなし

元のPDF

ここにPDFをドロップ、またはクリックして選択

テキストを含むPDFのみ対応。スキャンにはOCRが必要ですが、このツールにはOCR機能はありません。

Markdownプレビュー

ここにMarkdownが表示されます。
セットアップ

4ステップのセットアップ

インストールから出力ファイルまでの、ローカルのパイプライン。

  1. ファイルをアップロード欄にドラッグする
    01

    環境を作る

    python -m venv .venv で仮想環境を作って有効にし、ライブラリがシステムのPythonに入らないようにします。

    スニペットを見る
  2. テキスト片が順序よく行にまとまる
    02

    ライブラリを1つ入れる

    汎用のMarkdown出力なら pip install pymupdf4llm、表が中心なら pip install pdfplumber を実行します。

    ライブラリを選ぶ
  3. 見出しとリストのあるMarkdownプレビュー
    03

    スクリプトを実行

    このページのスニペットを .py ファイルにコピーし、対象の文書を指定します。実行するたびに、開いて確認できる .md ファイルが書き出されます。

    スニペットをコピー
  4. 矢印でつながるMarkdownと文書のアイコン
    04

    出力を確認

    .md ファイルを元の文書と比べ、テキストを次の処理に回す前に、紛れ込んだヘッダーやフッターを取り除きます。

    ブラウザで比べる
選択肢

PDF→MarkdownにはどのPythonライブラリ?

PDFをMarkdownに変換するための唯一の最良のライブラリはありません。速度、ライセンス、表の扱いのバランスがそれぞれ違います。pymupdf4llm はPyMuPDFの上に作られていて、レイアウトを読んで見出しや罫線のある表を含むMarkdownを直接書き出します。そのため、ノートや検索の用途では妥当な第一候補です。pdfplumber は文字、線、表のセルにより深くアクセスできるので、表のデータが主な目的のスクリプトに向いています。

どちらもサードパーティのオープンソースプロジェクトで、このサイトの製品ではありません。文書が数個なら、このページのブラウザツールがインストールなしで似た処理をこなします。何百ものファイルを定期的に処理するなら、ローカルのPythonスクリプトのほうが向いています。

  • pymupdf4llm:1回の呼び出しでPDF→Markdown
  • pdfplumber:罫線のある表のセルに精密にアクセス
  • ブラウザツール:インストールもアップロードも不要

どの方法にも共通する限界

どの選択肢も、そのままではスキャンを読めません。ブラウザツールにはOCRがなく、上のライブラリも画像だけのページには別のOCRの手順が必要です。結合セル、回転した表、2段組みのレイアウトは、どのPythonライブラリにも私たちのブラウザツールにも難しいので、表は手で確認してください。ブラウザツールでは、罫線なしの表には3行以上が必要で、1行目は常にヘッダー行になります。

ブラウザかスクリプトか比較
鍵付きのアップロード欄と、歯車付きのターミナルを並べた図
左はセットアップ不要のブラウザツール、右は自動化のためのPythonスクリプトです。
スニペット

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でフォルダーごと

サードパーティ · AGPL

1つのループで 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と文書のアイコンの間の双方向の矢印

Markdownをまたページにする

Pythonで処理したあと、印刷用の版が必要になることもあります。逆方向のツールが、ブラウザでMarkdownをA4ページとして表示します。

ツール

関連ツール

PDFとMarkdownにまつわるその他のページ。

セットアップなしがいい? ここで変換しましょう

文書をドロップしてきれいなテキストをコピーするか、上のスニペットを自分のパソコンで実行してください。無料でプライベートです。

ファイルを変換

出典

  1. pymupdf4llm to_markdown() reference — PDF4LLM docs
  2. PyMuPDF (AGPL-3.0) — GitHub
  3. pdfplumber (MIT) — GitHub
  4. 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スクリプトはファイルをアップロードしますか?

いいえ。ローカルのスクリプトは自分のパソコンで動き、ここのブラウザツールもアップロードせずにファイルを処理します。