Skip to content

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

  1. Installieren: pip install pdf_oxide
  2. Imports ersetzen: import fitzfrom pdf_oxide import PdfDocument
  3. Öffnen ersetzen: fitz.open(path)PdfDocument(path)
  4. Extraktion ersetzen: page.get_text()doc.extract_text(page_index)
  5. Bilder ersetzen: Mehrstufige xref-Suche → doc.extract_images(page_index)
  6. Passwortbehandlung aktualisieren: Verwenden Sie PdfDocument(path, password="pw") oder doc.authenticate("pw") nach dem Öffnen
  7. 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