Skip to content

vs. Python-PDF-Bibliotheken

PDF Oxide im Vergleich mit PyMuPDF (fitz), pypdfium2, pypdf, pdfplumber, pdfminer und weiteren. Diese Seite behandelt Leistung, Funktionsumfang, Lizenzierung und API-Unterschiede, damit Sie die richtige Python-PDF-Bibliothek für die Textextraktion auswählen können.

Überblick

PDF Oxide PyMuPDF pypdfium2 pypdf pdfplumber pdfminer
Mittlere Extraktionszeit 0.8ms 4.6ms 4.1ms 12.1ms 23.2ms 16.8ms
Erfolgsquote (3.830 PDFs) 100% 99.3% 99.2% 98.4% 98.8% 98.8%
Lizenz MIT AGPL-3.0 Apache-2.0 BSD-3 MIT MIT
Sprache Rust + PyO3 C (MuPDF) C (PDFium) Pure Python Pure Python Pure Python
Textextraktion Ja Ja Ja Ja Ja Ja
Zeichenpositionen Ja Ja Ja Teilweise Ja Ja
Bildextraktion Ja Ja Ja Ja Nein Nein
Formularfelder Lesen + Schreiben Lesen + Schreiben Nur Lesen Lesen + Schreiben Nur Lesen Nein
PDF-Erstellung Ja Ja Nein Eingeschränkt Nein Nein
PDF-Bearbeitung Ja Ja Nein Ja Nein Nein
Markdown-Ausgabe Ja Nein Nein Nein Nein Nein
HTML-Ausgabe Ja Nein Nein Nein Nein Nein
Verschlüsselung Lesen + Schreiben Lesen + Schreiben Nur Lesen Lesen + Schreiben Nein Nein
PDF/A-Validierung Ja Nein Nein Nein Nein Nein
Rendering Ja Ja Ja Nein Nein Nein
Suche Regex + räumlich Ja Ja Nein Nein Nein
Python-Versionen 3.8–3.14 3.8–3.12 3.8+ 3.6+ 3.8+ 3.6+
Installationsgröße ~5 MB Wheel ~20 MB Wheel ~3 MB Wheel ~1 MB ~1 MB ~1 MB

Leistungsvergleich

Mittlere Textextraktionszeit pro PDF, gemessen am vollständigen Korpus aus 3.830 PDFs – drei unabhängige, öffentlich verfügbare Testsuiten, die zusammen alle PDF-Spezifikationsversionen (1.0–2.0), verschlüsselte Dateien, fehlerhafte Dokumente, CJK-Kodierungen, komplexe Layouts und sicherheitsrelevante Grenzfälle abdecken. Was jede Suite testet und warum diese Ergebnisse reproduzierbar sind, finden Sie in den vollständigen Korpus-Details.

Bibliothek Mittelwert Relativ p99 Erfolgsquote
PDF Oxide 0.8ms 9ms 100%
PyMuPDF 4.6ms 5.8× 28ms 99.3%
pypdfium2 4.1ms 5.1× 42ms 99.2%
pymupdf4llm 55.5ms 69× 280ms 99.1%
pdftext 7.3ms 9.1× 82ms 99.0%
pdfminer 16.8ms 21× 124ms 98.8%
pdfplumber 23.2ms 29× 189ms 98.8%
markitdown 108.8ms 136× 378ms 98.6%
pypdf 12.1ms 15.1× 97ms 98.4%

PDF Oxide erreicht diese Geschwindigkeit durch einen nativen Rust-Kern, der über PyO3 zu einem Python-Erweiterungsmodul kompiliert wird. Es gibt keinen Subprozess-Overhead und keine Brücke zu C-Bibliotheken – der Rust-Code läuft direkt im Python-Prozess.

Zuverlässigkeit

PDF Oxide verarbeitet 3.823 von 3.823 gültigen PDFs ohne Fehler – eine Erfolgsquote von 100 %. Die 7 nicht bestandenen Dateien im Korpus aus 3.830 Dateien sind absichtlich beschädigte Test-Fixtures (fehlender PDF-Header, durch Fuzzing beschädigte Kataloge, ungültige xref-Streams).

Bibliothek Bestandene gültige PDFs Erfolgsquote
PDF Oxide 3,823 / 3,823 100%
PyMuPDF 3,796 / 3,823 99.3%
pypdfium2 3,792 / 3,823 99.2%
pymupdf4llm 3,787 / 3,823 99.1%
pdftext 3,784 / 3,823 99.0%
pdfminer 3,777 / 3,823 98.8%
pdfplumber 3,777 / 3,823 98.8%
markitdown 3,771 / 3,823 98.6%
pypdf 3,762 / 3,823 98.4%

Textqualität

PDF Oxide erreicht über den gesamten Korpus eine Textübereinstimmung von 99,5 % im Vergleich zu PyMuPDF und pypdfium2. Die Qualität wurde durch einen Zeichen-für-Zeichen-Vergleich der extrahierten Textausgabe gemessen. Der verbleibende Unterschied von 0,5 % betrifft die Normalisierung von Leerräumen und die Behandlung von Ligaturen, wo PDF Oxide eine sauberere Ausgabe erzeugt.

Lizenzvergleich

Bibliothek Lizenz Kommerzielle Nutzung Copyleft
PDF Oxide MIT Uneingeschränkt Nein
pypdfium2 Apache-2.0 Uneingeschränkt Nein
PyMuPDF AGPL-3.0 Erfordert kommerzielle Lizenz ($) Ja
pypdf BSD-3 Uneingeschränkt Nein
pdfplumber MIT Uneingeschränkt Nein
pdfminer MIT Uneingeschränkt Nein
pdftext GPL-3.0 Erfordert Open Source Ja

PyMuPDF verwendet MuPDF unter der AGPL-3.0-Lizenz. Wenn Sie Software vertreiben, die PyMuPDF nutzt, muss auch Ihre Software unter der AGPL-3.0 veröffentlicht werden – oder Sie müssen eine kommerzielle Lizenz von Artifex erwerben. Das gilt für SaaS-Produkte, Webanwendungen und alle vertriebenen Binärdateien.

PDF Oxide steht ohne Einschränkungen unter der MIT-Lizenz. Nutzen Sie es in proprietären Produkten, SaaS-Plattformen oder Closed-Source-Anwendungen ohne jegliche Lizenzverpflichtungen.

Anwendungsfall PDF Oxide (MIT) PyMuPDF (AGPL) pypdfium2 (Apache) pypdf (BSD) pdfplumber (MIT) pdfminer (MIT)
Kommerzielles Produkt Ja Lizenz erforderlich Ja Ja Ja Ja
Closed Source Ja Nein (außer mit Lizenz) Ja Ja Ja Ja
SaaS/Cloud Ja Lizenz erforderlich Ja Ja Ja Ja
Interne Werkzeuge Ja Ja Ja Ja Ja Ja

API-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)

pypdf:

from pypdf import PdfReader

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

pdfplumber:

import pdfplumber

with pdfplumber.open("report.pdf") as pdf:
    page = pdf.pages[0]
    text = page.extract_text()
    print(text)

pdfminer:

from pdfminer.high_level import extract_text

text = extract_text("report.pdf", page_numbers=[0])
print(text)

Extraktion auf Zeichenebene

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
chars = doc.extract_chars(0)
for ch in chars:
    print(f"'{ch.char}' at ({ch.bbox[0]:.1f}, {ch.bbox[1]:.1f}) "
          f"size={ch.font_size:.1f}")

PyMuPDF:

import fitz

doc = fitz.open("report.pdf")
page = doc[0]
blocks = page.get_text("dict")["blocks"]
for block in blocks:
    if "lines" in block:
        for line in block["lines"]:
            for span in line["spans"]:
                print(f"'{span['text']}' size={span['size']:.1f}")

pdfplumber:

import pdfplumber

with pdfplumber.open("report.pdf") as pdf:
    page = pdf.pages[0]
    for char in page.chars:
        print(f"'{char['text']}' at ({char['x0']:.1f}, {char['top']:.1f}) "
              f"size={char['size']:.1f}")

pdfminer:

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTChar

for page_layout in extract_pages("report.pdf"):
    for element in page_layout:
        if hasattr(element, '__iter__'):
            for text_line in element:
                if hasattr(text_line, '__iter__'):
                    for char in text_line:
                        if isinstance(char, LTChar):
                            print(f"'{char.get_text()}' at ({char.x0:.1f}, {char.y0:.1f}) "
                                  f"size={char.size:.1f}")

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"])

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-Erstellung

PDF Oxide:

from pdf_oxide import Pdf

pdf = Pdf.from_markdown("# Hello World\n\nThis is a PDF.")
pdf.save("output.pdf")

# Also supports HTML
pdf = Pdf.from_html("<h1>Hello</h1><p>World</p>")
pdf.save("output.pdf")

PyMuPDF:

import fitz

doc = fitz.open()
page = doc.new_page()
text_point = fitz.Point(72, 72)
page.insert_text(text_point, "Hello World", fontsize=24)
doc.save("output.pdf")

pypdf:

# pypdf can merge/modify PDFs but cannot create from scratch with text content.
# Use reportlab or fpdf2 for creation, then merge with pypdf.

Verschlüsselte PDFs

PDF Oxide:

from pdf_oxide import PdfDocument

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

PyMuPDF:

import fitz

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

pypdf:

from pypdf import PdfReader

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

Markdown- und HTML-Ausgabe

PDF Oxide (Alleinstellungsmerkmal):

from pdf_oxide import PdfDocument

doc = PdfDocument("paper.pdf")

# Convert to Markdown with heading detection
md = doc.to_markdown(0, detect_headings=True)
print(md)

# Convert to HTML
html = doc.to_html(0)
print(html)

Keine andere Python-PDF-Bibliothek bietet eine integrierte Konvertierung nach Markdown oder HTML.

Bibliotheksprofile

PDF Oxide

Stärken:

  • Schnellste Textextraktion in den Benchmarks dank Rust-Kern – 5,8× schneller als PyMuPDF
  • 100 % Erfolgsquote beim Korpus aus 3.830 PDFs – die höchste Zuverlässigkeit aller getesteten Bibliotheken
  • Einheitliche API für Extraktion, Erstellung und Bearbeitung in einer einzigen Bibliothek
  • Integrierter Markdown- und HTML-Export mit Überschriftenerkennung
  • MIT-Lizenz ohne Copyleft-Einschränkungen
  • Native Konformitätsprüfung (PDF/A, PDF/UA, PDF/X)
  • Vorgefertigte Wheels für alle gängigen Plattformen und Python 3.8–3.14
  • Keine Systemabhängigkeiten – das Wheel enthält alles

Einschränkungen:

  • Neuere Bibliothek mit kleinerer Community
  • Die Tabellenextraktion ist im Vergleich zu den Algorithmen von pdfplumber grundlegend
  • Die Rendering-Engine ist weniger ausgereift als MuPDF

PyMuPDF (fitz)

Stärken:

  • Ausgereift und praxiserprobt (basiert auf MuPDF, in Entwicklung seit 2005)
  • Hervorragende Rendering-Qualität bei komplexen PDFs
  • Integrierte OCR-Anbindung (Tesseract)
  • Umfangreicher Funktionsumfang: SVG-Export, Seitenmanipulation, Tabellenerkennung

Einschränkungen:

  • Die AGPL-3.0-Lizenz erfordert, dass Sie Ihre Anwendung als Open Source veröffentlichen oder eine kommerzielle Lizenz erwerben
  • Große Wheel-Größe (~20 MB) wegen des gebündelten MuPDF
  • Kein integrierter Markdown-Export
  • Keine Konformitätsprüfung

pypdfium2

Stärken:

  • Schnell (basiert auf Googles PDFium-Engine)
  • Apache-2.0-Lizenz – freizügig für kommerzielle Nutzung
  • Gute Rendering-Qualität

Einschränkungen:

  • Eingeschränkte Textextraktions-API im Vergleich zu PDF Oxide oder PyMuPDF
  • Keine PDF-Erstellung oder -Bearbeitung
  • Keine Formularfeldunterstützung über reines Lesen hinaus

pypdf

Stärken:

  • Pure Python – überall installierbar, keine kompilierten Abhängigkeiten
  • Leichtgewichtig und gut gepflegt
  • Gut für PDF-Manipulation (Zusammenführen, Aufteilen, Drehen, Verschlüsseln)
  • Große Community und umfangreiche Dokumentation

Einschränkungen:

  • 15× langsamer als PDF Oxide bei der Textextraktion
  • Die Textextraktionsqualität kämpft mit komplexen Layouts
  • Kein Rendering, kein Markdown-/HTML-Export, keine Tabellenextraktion

pdfplumber

Stärken:

  • Beste Tabellenextraktion aller Python-PDF-Bibliotheken
  • Hervorragende Positionsdaten auf Zeichenebene
  • Visuelle Debugging-Werkzeuge (annotierte Seitenbilder)
  • MIT-Lizenz

Einschränkungen:

  • Pure Python – 29× langsamer als PDF Oxide
  • Nur Lesen – keine PDF-Erstellung oder -Bearbeitung
  • Keine Verschlüsselung oder Rendering

pdfminer

Stärken:

  • Detaillierte Zeichen- und Layoutanalyse
  • Gute Unterstützung für CJK-Text
  • Grundlage für pdfplumber und andere Werkzeuge
  • MIT-Lizenz

Einschränkungen:

  • 21× langsamer als PDF Oxide (Pure Python, nicht optimiert)
  • Nur Lesen, keine Erstellung oder Bearbeitung
  • Ausführliche API für gängige Aufgaben
  • Weniger aktiv gepflegt

Wann was verwenden

Anwendungsfall Empfohlene Bibliothek
Schnelle Textextraktion PDF Oxide
Kommerzielles / proprietäres Produkt PDF Oxide, pypdfium2, pypdf, pdfplumber oder pdfminer
PyMuPDF-Alternative (MIT-lizenziert) PDF Oxide
PDF-Erstellung aus Markdown/HTML PDF Oxide
Konformitätsprüfung (PDF/A, PDF/X) PDF Oxide
Tabellenextraktion aus Rechnungen pdfplumber
Visuelles Debugging der Extraktion pdfplumber
Bestehende MuPDF-Investition PyMuPDF (sofern AGPL-kompatibel)
Minimale Abhängigkeiten pypdf (Pure Python)
Detaillierte Layoutanalyse pdfminer
OCR für gescannte Dokumente PyMuPDF

Installation

# PDF Oxide
pip install pdf_oxide

# PyMuPDF
pip install pymupdf

# pypdfium2
pip install pypdfium2

# pypdf
pip install pypdf

# pdfplumber
pip install pdfplumber

# pdfminer
pip install pdfminer.six

PDF Oxide liefert vorgefertigte Wheels für Linux (x86_64, aarch64), macOS (x86_64, arm64) und Windows (x86_64). Es werden weder ein Compiler noch Systembibliotheken benötigt.

Verwandte Seiten