Skip to content

PyMuPDF vs pypdf

PyMuPDF und pypdf sind zwei der beliebtesten Python-PDF-Bibliotheken, aber beide haben erhebliche Kompromisse. PyMuPDF ist schnell, aber durch die AGPL-3.0-Lizenzierung eingeschränkt. pypdf ist permissiv lizenziert, aber 15× langsamer. Diese Seite vergleicht sie direkt — und zeigt, warum PDF Oxide die bessere Wahl als beide ist.

Die kurze Antwort: PDF Oxide ist 5,8× schneller als PyMuPDF, 15× schneller als pypdf, MIT-lizenziert und bietet mehr Funktionen als beide — einschließlich integrierter Markdown-/HTML-Ausgabe, XFA-Formularunterstützung und OCR ohne Systemabhängigkeiten.

Schnellvergleich

PyMuPDF pypdf PDF Oxide
Lizenz AGPL-3.0 BSD-3 MIT
Sprache C (MuPDF) Reines Python Rust + PyO3
Durchschn. Extraktionszeit 4,6ms 12,1ms 0,8ms
p99-Extraktionszeit 28ms 97ms 9ms
Erfolgsrate (3.830 PDFs) 99,3% 98,4% 100%
Textextraktion Ja Ja Ja
Zeichenpositionen Ja Teilweise Ja
Bildextraktion Ja Ja Ja
Formularfelder Lesen + Schreiben Lesen + Schreiben Lesen + Schreiben
PDF-Erstellung Ja Eingeschränkt (nur Zusammenführen) Ja (Markdown/HTML)
Markdown-Ausgabe Nein Nein Ja
HTML-Ausgabe Nein Nein Ja
Rendering Ja Nein Ja
OCR Tesseract Nein Integriert (PaddleOCR)
Installationsgröße ~20 MB ~1 MB ~5 MB
Verschlüsselung Lesen + Schreiben Lesen + Schreiben Lesen + Schreiben
Suche Ja Nein Regex + räumlich
Python-Versionen 3.8–3.12 3.6+ 3.8–3.14

PyMuPDF ist schneller und funktionsreicher als pypdf, aber seine AGPL-Lizenz ist für viele kommerzielle Projekte ein Ausschlusskriterium. pypdf ist leichter und BSD-lizenziert, aber deutlich langsamer und in den Extraktionsfähigkeiten eingeschränkter. PDF Oxide kombiniert den Geschwindigkeitsvorteil einer nativen Engine mit der Lizenzierungsfreiheit einer permissiven Lizenz.

Lizenzierung: AGPL vs BSD vs MIT

Der Lizenzierungsunterschied zwischen PyMuPDF und pypdf ist oft der entscheidende Faktor für Teams.

PyMuPDF — AGPL-3.0

PyMuPDF nutzt MuPDF, das unter AGPL-3.0 lizenziert ist. Dies ist eine starke Copyleft-Lizenz. Wenn Sie Software vertreiben, die PyMuPDF verwendet — einschließlich SaaS-Anwendungen, Docker-Container, Web-Services, Desktop-Apps oder CLI-Tools — muss Ihre gesamte Anwendung unter AGPL-3.0 veröffentlicht werden. Das bedeutet, Ihren vollständigen Quellcode unter derselben Lizenz zu veröffentlichen.

Die Alternative ist der Kauf einer kommerziellen Lizenz von Artifex, dem Unternehmen hinter MuPDF. Artifex veröffentlicht keine Preise; Sie müssen deren Vertriebsteam für ein Angebot kontaktieren. Kommerzielle Lizenzen sind typischerweise jährlich und werden pro Anwendung berechnet.

AGPL betrifft Sie, wenn:

  • Sie ein Produkt ausliefern, das PyMuPDF enthält (Desktop-App, Mobile-App, Electron)
  • Sie einen SaaS oder Web-Service betreiben, der PDFs mit PyMuPDF verarbeitet
  • Sie Docker-Images verteilen, die PyMuPDF enthalten
  • Sie eine API bereitstellen, die intern PyMuPDF verwendet

AGPL betrifft Sie nicht, wenn:

  • Ihr Projekt bereits unter einer AGPL-kompatiblen Lizenz Open-Source ist
  • Sie PyMuPDF nur für interne Tools verwenden, die nie verteilt werden

pypdf — BSD-3

pypdf verwendet die BSD-3-Clause-Lizenz, die permissiv ist. Sie können pypdf in kommerziellen Produkten, Closed-Source-Software und SaaS-Anwendungen verwenden, ohne Ihren Code offen legen zu müssen. Die einzige Anforderung ist die Beibehaltung des Copyright-Hinweises bei Weitergabe.

PDF Oxide — MIT

PDF Oxide ist MIT-lizenziert — die permissivste gängige Open-Source-Lizenz. Verwenden Sie es in jedem Kontext (kommerziell, proprietär, SaaS, Open Source) ohne Einschränkungen außer der Einbeziehung des Lizenztexts.

Lizenz-Zusammenfassung

Anwendungsfall PyMuPDF (AGPL) pypdf (BSD) PDF Oxide (MIT)
Kommerzielles Produkt Erfordert Lizenz Ja Ja
Closed-Source-SaaS Erfordert Lizenz Ja Ja
Docker-Distribution Erfordert Lizenz Ja Ja
Interne Tools Ja Ja Ja
Open Source (AGPL-kompatibel) Ja Ja Ja
Open Source (MIT/BSD/Apache) Nein Ja Ja

Für kommerzielle Projekte, bei denen Lizenz-Compliance wichtig ist, sind pypdf und PDF Oxide beide sichere Optionen. PyMuPDF erfordert entweder die Offenlegung Ihrer Anwendung oder den Kauf einer kommerziellen Lizenz.

Geschwindigkeits-Benchmarks

Alle Benchmarks wurden auf demselben Korpus von 3.830 PDFs ausgeführt — drei unabhängige, öffentlich verfügbare Testsuiten (veraPDF, Mozilla pdf.js, DARPA SafeDocs), die jede PDF-Spezifikationsversion (1.0–2.0), verschlüsselte Dateien, CJK-Kodierungen, komplexe Layouts und fehlerhafte Dokumente abdecken.

Textextraktionsgeschwindigkeit

Bibliothek Durchschnitt p99 Relativ zu PDF Oxide
PDF Oxide 0,8ms 9ms
PyMuPDF 4,6ms 28ms 5,8× langsamer
pypdf 12,1ms 97ms 15,1× langsamer

PyMuPDF ist 2,6× schneller als pypdf, weil es das Parsing an MuPDFs C-Engine delegiert. pypdf macht alles in reinem Python — Parsing, Schriftdekodierung, Textassemblierung — was bedeutet, dass jede Operation den Interpreter-Overhead zahlt.

PDF Oxide ist schneller als beide, weil sein Rust-Kern alles PDF-Parsing, Schriftdekodierung und Textlayout nativ via PyO3 verarbeitet, wobei nur das Endergebnis die Python-Grenze überschreitet. Es gibt keinen Subprozess-Overhead, kein C-Bibliotheks-Bridging über ctypes und keinen Interpreter-Engpass.

Zuverlässigkeit

Bibliothek Gültige PDFs bestanden Erfolgsrate
PDF Oxide 3.823 / 3.823 100%
PyMuPDF 3.796 / 3.823 99,3%
pypdf 3.762 / 3.823 98,4%

PyMuPDF scheitert bei 27 gültigen PDFs im Korpus. pypdf scheitert bei 61. In beiden Fällen handelt es sich um gültige PDF-Dateien, bei denen die Bibliothek entweder abstürzt oder leeren/fehlerhaften Text zurückgibt. PDF Oxide verarbeitet alle 3.823 gültigen PDFs ohne Fehler.

Die 7 nicht bestandenen Dateien im gesamten Korpus von 3.830 Dateien sind absichtlich fehlerhafte Test-Fixtures (fehlender PDF-Header, Fuzz-korrupte Kataloge, ungültige Xref-Streams) und werden von den Erfolgsraten-Berechnungen aller Bibliotheken ausgeschlossen.

Was das in der Praxis bedeutet

Für eine Pipeline, die täglich Tausende PDFs verarbeitet, bedeutet PyMuPDFs 99,3% Erfolgsrate etwa 7 Fehler pro 1.000 Dokumente. pypdfs 98,4% bedeutet 16 Fehler pro 1.000. Das sind Dokumente, die Sie mit Fallback-Logik, manueller Überprüfung oder einfach als verlorene Daten behandeln müssen.

Die 100% Erfolgsrate von PDF Oxide auf dem Test-Korpus bedeutet weniger Sonderfälle in der Produktion.

Funktionsvergleich

Textextraktion

Alle drei Bibliotheken unterstützen grundlegende Textextraktion. Die API-Stile unterscheiden sich:

PyMuPDF:

import fitz

doc = fitz.open("report.pdf")
page = doc[0]
text = page.get_text()
print(text)

pypdf:

from pypdf import PdfReader

reader = PdfReader("report.pdf")
text = reader.pages[0].extract_text()
print(text)

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)

PyMuPDF verwendet ein Seitenobjektmodell (doc[0] gibt eine Seite zurück). pypdf verwendet ein Reader-/Pages-Muster. PDF Oxide verwendet Seitenindizes direkt.

Für die Extraktion auf Zeichenebene (Positionen, Schriftgrößen, Bounding-Boxes) bietet PyMuPDF get_text("dict"), das eine verschachtelte Dict-Struktur zurückgibt. pypdf bietet teilweise Zeichenpositionsdaten. PDF Oxide bietet extract_chars() mit Bounding-Boxes und Schrift-Metadaten pro Zeichen.

Markdown-Konvertierung

Dies ist ein bedeutender Differenzierungsfaktor. Viele LLM- und RAG-Pipelines benötigen Markdown-Ausgabe von PDFs.

PyMuPDF:

# PyMuPDF hat keine integrierte Markdown-Konvertierung.
# Sie benötigen pymupdf4llm, ein separates Paket:
import pymupdf4llm

md = pymupdf4llm.to_markdown("paper.pdf")

pymupdf4llm funktioniert, ist aber 69× langsamer als die integrierte Markdown-Konvertierung von PDF Oxide (55,5ms Durchschnitt gegenüber 0,8ms). Es ist außerdem eine separate Abhängigkeit mit eigenem Wartungszyklus.

pypdf:

# pypdf hat keine Markdown-Konvertierung.
# Sie bräuchten eine externe Toolchain (z.B. Text extrahieren,
# dann eine separate Bibliothek verwenden, um ihn als Markdown zu strukturieren).

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("paper.pdf")
md = doc.to_markdown(0, detect_headings=True)
print(md)

Die Markdown-Konvertierung von PDF Oxide ist integriert, erkennt Überschriften, bewahrt Tabellenstruktur und läuft mit der gleichen Geschwindigkeit wie die reine Textextraktion.

HTML-Konvertierung

PyMuPDF: Keine integrierte HTML-Ausgabe.

pypdf: Keine HTML-Ausgabe.

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("paper.pdf")
html = doc.to_html(0)
print(html)

Formularfelder

Alle drei Bibliotheken unterstützen das Lesen und Schreiben von Formularfeldern (AcroForm).

PyMuPDF:

import fitz

doc = fitz.open("form.pdf")
page = doc[0]
for widget in page.widgets():
    print(f"{widget.field_name}: {widget.field_value}")

pypdf:

from pypdf import PdfReader

reader = PdfReader("form.pdf")
fields = reader.get_fields()
for name, field in fields.items():
    print(f"{name}: {field.get('/V', '')}")

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("form.pdf")
fields = doc.get_form_fields()
for field in fields:
    print(f"{field.name}: {field.value}")

Ein bemerkenswerter Unterschied: PDF Oxide unterstützt XFA-Formulare (XML Forms Architecture), die in vielen Behörden- und Unternehmens-PDF-Formularen verwendet werden. Weder PyMuPDF noch pypdf verarbeitet die Extraktion von XFA-Formulardaten.

Bildextraktion

PyMuPDF:

import fitz

doc = fitz.open("report.pdf")
page = doc[0]
for i, img in enumerate(page.get_images()):
    xref = img[0]
    base_image = doc.extract_image(xref)
    with open(f"image_{i}.{base_image['ext']}", "wb") as f:
        f.write(base_image["image"])

pypdf:

from pypdf import PdfReader

reader = PdfReader("report.pdf")
page = reader.pages[0]
for i, image in enumerate(page.images):
    with open(f"image_{i}.{image.name.split('.')[-1]}", "wb") as f:
        f.write(image.data)

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
images = doc.extract_image_bytes(0)
for i, img in enumerate(images):
    with open(f"image_{i}.{img['format']}", "wb") as f:
        f.write(img["data"])

Alle drei verarbeiten eingebettete Bildextraktion. PyMuPDFs Ansatz erfordert einen zweistufigen Xref-Lookup. pypdf und PDF Oxide bieten schlankere APIs.

Rendering

PyMuPDF kann PDF-Seiten in Bilder (PNG, JPEG) mittels MuPDFs Rendering-Engine rendern. pypdf kann Seiten überhaupt nicht rendern. PDF Oxide enthält eine integrierte Rendering-Engine.

OCR

PyMuPDF integriert Tesseract für OCR bei gescannten PDFs. pypdf hat keine OCR-Unterstützung. PDF Oxide hat integriertes OCR über PaddleOCR, ohne externe Systemabhängigkeiten.

PDF-Erstellung

PyMuPDF kann PDFs erstellen, erfordert aber manuelles Platzieren von Text, Bildern und Formen auf Seiten — es gibt keine High-Level-API zum Erstellen von PDFs aus strukturiertem Inhalt.

pypdf kann keine PDFs von Grund auf erstellen. Es kann bestehende PDFs zusammenführen, teilen und modifizieren, aber für die Erstellung benötigen Sie eine separate Bibliothek wie reportlab oder fpdf2.

PDF Oxide kann PDFs aus Markdown oder HTML erstellen:

from pdf_oxide import Pdf

pdf = Pdf.from_markdown("# Invoice\n\n| Item | Price |\n|------|-------|\n| Widget | $9.99 |")
pdf.save("invoice.pdf")

Verschlüsselung

Alle drei Bibliotheken unterstützen das Lesen verschlüsselter PDFs und das Schreiben verschlüsselter Ausgaben.

PyMuPDF:

import fitz

doc = fitz.open("encrypted.pdf")
doc.authenticate("password")
text = doc[0].get_text()

pypdf:

from pypdf import PdfReader

reader = PdfReader("encrypted.pdf")
reader.decrypt("password")
text = reader.pages[0].extract_text()

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)

Funktions-Zusammenfassung

Funktion PyMuPDF pypdf PDF Oxide
Textextraktion Ja Ja Ja
Zeichenpositionen Ja Teilweise Ja
Bildextraktion Ja Ja Ja
Formularfelder (AcroForm) Lesen + Schreiben Lesen + Schreiben Lesen + Schreiben
XFA-Formulare Nein Nein Ja
PDF-Erstellung Manuell Nein Markdown/HTML
Markdown-Ausgabe Nein (pymupdf4llm) Nein Integriert
HTML-Ausgabe Nein Nein Integriert
Rendering Ja Nein Ja
OCR Tesseract Nein Integriert (PaddleOCR)
Suche Ja Nein Regex + räumlich
Verschlüsselung Lesen + Schreiben Lesen + Schreiben Lesen + Schreiben
PDF/A-Validierung Nein Nein Ja
SVG-Export Ja Nein Nein
Zusammenführen/Teilen Ja Ja Ja

Wann welche Bibliothek wählen

Wählen Sie pypdf, wenn:

  • Sie eine reine Python-Lösung ohne kompilierte C- oder Rust-Erweiterungen benötigen
  • Sie einfache PDF-Manipulation durchführen (Zusammenführen, Teilen, Drehen, Verschlüsseln/Entschlüsseln)
  • Geschwindigkeit für Ihren Anwendungsfall nicht kritisch ist
  • Sie den kleinstmöglichen Installations-Footprint wünschen (~1 MB)
  • Sie breite Python-Versionsunterstützung benötigen (3.6+)

Wählen Sie PyMuPDF, wenn:

  • Sie bereits eine kommerzielle MuPDF-Lizenz von Artifex haben
  • Sie SVG-Export von PDF-Seiten benötigen
  • Ihr Projekt bereits unter AGPL-3.0 lizenziert ist
  • Sie auf MuPDF-spezifisches Rendering-Verhalten angewiesen sind

Wählen Sie PDF Oxide, wenn:

  • Sie maximale Textextraktionsgeschwindigkeit benötigen (5,8× schneller als PyMuPDF, 15× schneller als pypdf)
  • Sie MIT-Lizenzierung für kommerzielle oder Closed-Source-Nutzung wünschen
  • Sie integrierte Markdown- oder HTML-Ausgabe für LLM-/RAG-Pipelines benötigen
  • Sie XFA-Formularunterstützung benötigen
  • Sie integriertes OCR ohne externe Systemabhängigkeiten wünschen
  • Sie 100% Zuverlässigkeit bei gültigen PDFs wünschen

Installation

# PyMuPDF
pip install pymupdf

# pypdf
pip install pypdf

# PDF Oxide
pip install pdf_oxide

Alle drei sind über pip verfügbar. PyMuPDF liefert ein ~20 MB Wheel mit gebündeltem MuPDF. pypdf ist reines Python mit ~1 MB. PDF Oxide liefert vorkompilierte Wheels (~5 MB) für Linux (x86_64, aarch64), macOS (x86_64, arm64) und Windows (x86_64).

Das Fazit

Wenn Sie zwischen PyMuPDF und pypdf wählen, wählen Sie zwischen Geschwindigkeit und Lizenzierungsfreiheit. PDF Oxide gibt Ihnen beides — schneller als PyMuPDF, permissiver als pypdf, mit Funktionen, die keine der beiden Bibliotheken bietet.

Was Ihnen wichtig ist Beste Wahl
Maximale Geschwindigkeit PDF Oxide (0,8ms)
Permissive Lizenz PDF Oxide (MIT) oder pypdf (BSD)
Geschwindigkeit + permissive Lizenz PDF Oxide — die einzige Option
Markdown-/HTML-Ausgabe PDF Oxide — integriert
XFA-Formulare PDF Oxide — einzige Bibliothek, die sie unterstützt
100% Zuverlässigkeit PDF Oxide — 100% Erfolgsrate
OCR ohne Tesseract PDF Oxide — integriertes PaddleOCR
SVG-Export PyMuPDF
Reines Python, keine Binärdateien pypdf

In 10 Sekunden loslegen:

pip install pdf_oxide
from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
text = doc.extract_text(0)

Verwandte Seiten