PDF Oxide vs PyMuPDF
PDF Oxide ist eine schnellere, MIT-lizenzierte Alternative zu PyMuPDF. Falls Sie PyMuPDF für ein kommerzielles Projekt evaluieren oder es aufgrund der AGPL-Lizenzierung ersetzen möchten, behandelt diese Seite die wichtigsten Unterschiede.
Warum Entwickler von PyMuPDF wechseln
Lizenzierung. PyMuPDF nutzt MuPDF unter der AGPL-3.0-Lizenz. Wenn Sie Software vertreiben, die PyMuPDF enthält — einschließlich SaaS, Web-Apps und Docker-Containern — muss Ihr Code unter der AGPL als Open Source veröffentlicht werden, oder Sie müssen eine kommerzielle Lizenz von Artifex erwerben. PDF Oxide ist MIT-lizenziert und unterliegt keinerlei Einschränkungen.
Geschwindigkeit. PDF Oxide extrahiert Text in durchschnittlich 0,8 ms gegenüber 4,6 ms bei PyMuPDF — 5,8× schneller bei 3.830 PDFs.
Zuverlässigkeit. PDF Oxide erreicht eine Erfolgsquote von 100% auf demselben Korpus, auf dem PyMuPDF 99,3% erreicht (27 Fehlschläge bei gültigen PDFs).
Kurzvergleich
| PDF Oxide | PyMuPDF | |
|---|---|---|
| Lizenz | MIT | AGPL-3.0 |
| Mittlere Extraktionszeit | 0,8 ms | 4,6 ms |
| Erfolgsquote (3.830 PDFs) | 100% | 99,3% |
| Textextraktion | Ja | Ja |
| Zeichenpositionen | Ja | Ja |
| Bildextraktion | Ja | Ja |
| Formularfelder | Lesen + Schreiben | Lesen + Schreiben |
| PDF-Erstellung | Ja (Markdown/HTML) | Ja |
| Markdown-Ausgabe | Ja | Nein |
| HTML-Ausgabe | Ja | Nein |
| Verschlüsselung | Lesen + Schreiben | Lesen + Schreiben |
| Rendering | Ja | Ja |
| OCR | Integriert (PaddleOCR) | Tesseract |
| Installationsgröße | ~5 MB | ~20 MB |
| Python-Versionen | 3.8–3.14 | 3.8–3.12 |
Code im Vergleich
Textextraktion
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)
PyMuPDF:
import fitz
doc = fitz.open("report.pdf")
page = doc[0]
text = page.get_text()
print(text)
Markdown-Konvertierung
PDF Oxide (integriert):
from pdf_oxide import PdfDocument
doc = PdfDocument("paper.pdf")
md = doc.to_markdown(0, detect_headings=True)
print(md)
PyMuPDF:
# PyMuPDF has no built-in Markdown conversion.
# Use pymupdf4llm (separate package, 69× slower than PDF Oxide):
import pymupdf4llm
md = pymupdf4llm.to_markdown("paper.pdf")
Bildextraktion
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"])
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"])
PDF-Erstellung aus Markdown
PDF Oxide:
from pdf_oxide import Pdf
pdf = Pdf.from_markdown("# Invoice\n\n| Item | Price |\n|------|-------|\n| Widget | $9.99 |")
pdf.save("invoice.pdf")
PyMuPDF:
import fitz
# PyMuPDF cannot create PDFs from Markdown.
# You must manually place text on pages:
doc = fitz.open()
page = doc.new_page()
page.insert_text(fitz.Point(72, 72), "Invoice", fontsize=24)
doc.save("invoice.pdf")
Benchmark-Details
Gemessen an 3.830 PDFs aus drei unabhängigen öffentlichen Test-Suites (veraPDF, Mozilla pdf.js, DARPA SafeDocs).
| Kennzahl | PDF Oxide | PyMuPDF |
|---|---|---|
| Mittlere Extraktionszeit | 0,8 ms | 4,6 ms |
| Extraktionszeit p99 | 9 ms | 28 ms |
| Erfolgsquote (gültige PDFs) | 100% (3.823/3.823) | 99,3% (3.796/3.823) |
| Übereinstimmung der Textqualität | 99,5% | Basiswert |
Details zum Korpus und Schritte zur Reproduktion finden Sie in der vollständigen Benchmark-Methodik.
AGPL-Lizenzierung: Was sie für Sie bedeutet
PyMuPDF umschließt MuPDF, das unter AGPL-3.0 lizenziert ist. Das betrifft Sie, wenn:
- Sie Software vertreiben, die PyMuPDF verwendet (Binärdateien, Docker-Images, Electron-Apps)
- Sie ein SaaS betreiben, bei dem PyMuPDF die PDFs der Nutzer auf Ihren Servern verarbeitet
- Sie PyMuPDF in ein Produkt einbetten — selbst als Microservice hinter einer API
In all diesen Fällen verlangt die AGPL, dass Sie den gesamten Quellcode Ihrer Anwendung unter der AGPL-3.0 freigeben — oder eine kommerzielle Lizenz von Artifex erwerben.
PDF Oxide ist MIT-lizenziert. Verwenden Sie es in jedem Projekt — kommerziell, proprietär, SaaS oder Open Source — ohne Verpflichtungen.
| Anwendungsfall | PDF Oxide (MIT) | PyMuPDF (AGPL) |
|---|---|---|
| Kommerzielles Produkt | Ja | Lizenz erforderlich |
| Closed-Source-SaaS | Ja | Lizenz erforderlich |
| Interne Tools | Ja | Ja |
| Open-Source-Projekt | Ja | Ja (sofern AGPL-kompatibel) |
| Docker-Verteilung | Ja | Lizenz erforderlich |
Preise für die kommerzielle PyMuPDF-Lizenz
Artifex (das Unternehmen hinter MuPDF und PyMuPDF) veröffentlicht keine Preise für kommerzielle Lizenzen öffentlich. Laut Branchenberichten:
- Kontaktaufnahme erforderlich — Sie müssen beim Vertrieb von Artifex ein Angebot anfordern
- Lizenzierung pro Anwendung — der Preis variiert je nach Bereitstellungsart und Umfang
- Jährliche Gebühren — kommerzielle Lizenzen werden in der Regel jährlich verlängert
- Keine kostenlose Stufe — es gibt keine „Community"- oder „Startup"-Ausnahme zur AGPL
Für Teams, die PyMuPDF für die kommerzielle Nutzung evaluieren, sind die Lizenzkosten eine laufende Betriebsausgabe zusätzlich zum Entwicklungsaufwand.
PDF Oxide ist MIT-lizenziert — kostenlos für alle Zwecke, für immer. Keine Verkaufsgespräche, keine Lizenz-Audits, kein Compliance-Risiko. Verwenden Sie es in SaaS, verteilen Sie es in Docker-Containern, betten Sie es in kommerzielle Produkte ein — ohne Einschränkungen.
Migrationsleitfaden
API-Zuordnung
| Aufgabe | PyMuPDF | PDF Oxide |
|---|---|---|
| PDF öffnen | fitz.open("f.pdf") |
PdfDocument("f.pdf") |
| Seitenanzahl | doc.page_count |
doc.page_count() |
| Text extrahieren | doc[0].get_text() |
doc.extract_text(0) |
| Zeichendaten | doc[0].get_text("dict") |
doc.extract_chars(0) |
| Bilder extrahieren | doc[0].get_images() + doc.extract_image(xref) |
doc.extract_images(0) |
| Text suchen | doc[0].search_for("query") |
doc.search_page(0, "query") |
| Verschlüsseltes PDF | doc.authenticate("pw") |
PdfDocument("f.pdf", password="pw") |
| In Markdown | pymupdf4llm (separat) | doc.to_markdown(0) |
| Aus Text erstellen | manuelles insert_text() |
Pdf.from_markdown("# Title") |
Schritt für Schritt
- Installieren:
pip install pdf_oxide - Imports ersetzen:
import fitz→from pdf_oxide import PdfDocument - Öffnen ersetzen:
fitz.open(path)→PdfDocument(path) - Extraktion ersetzen:
page.get_text()→doc.extract_text(page_index) - Bilder ersetzen: Mehrstufige xref-Suche →
doc.extract_images(page_index) - Passwortbehandlung aktualisieren: Verwenden Sie
PdfDocument(path, password="pw")oderdoc.authenticate("pw")nach dem Öffnen - Testen: Führen Sie Ihre Pipeline mit Ihren bestehenden Testdateien aus
Wann Sie bei PyMuPDF bleiben sollten
- Sie besitzen bereits eine kommerzielle MuPDF-Lizenz und sind auf das MuPDF-spezifische Rendering angewiesen
- Sie benötigen SVG-Export (PDF Oxide unterstützt keine SVG-Ausgabe)
- Ihr Projekt ist bereits AGPL-lizenziert
Verwandte Seiten
- Performance-Benchmarks — vollständige Korpus-Ergebnisse
- vs Python-PDF-Bibliotheken — alle Python-Bibliotheken im Vergleich
- Erste Schritte mit Python — Installation und erste Extraktion