Skip to content

Beste Python-PDF-Bibliothek 2026

PDF Oxide im direkten Vergleich mit PyMuPDF (fitz), pypdfium2, pypdf, pdfplumber, pdfminer und weiteren. Diese Seite stellt Performance, Funktionsabdeckung, Lizenzierung und API-Unterschiede nebeneinander — damit Sie für die Textextraktion in Python die richtige PDF-Bibliothek auswählen.

Zusammenfassung

PDF Oxide PyMuPDF pypdfium2 pypdf pdfplumber pdfminer
Durchschn. Extraktionszeit 0,8ms 4,6ms 4,1ms 12,1ms 23,2ms 16,8ms
Erfolgsrate (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) Reines Python Reines Python Reines 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

Performance-Vergleich

Durchschnittliche Textextraktionszeit pro PDF, gemessen auf dem vollständigen Korpus mit 3.830 PDFs — drei unabhängige, öffentlich verfügbare Testsuiten, die zusammen jede PDF-Spezifikationsversion (1.0–2.0), verschlüsselte Dateien, fehlerhafte Dokumente, CJK-Kodierungen, komplexe Layouts und Sicherheitsgrenzfälle abdecken. In den Details zum Korpus lesen Sie, was jede Suite prüft und warum die Ergebnisse reproduzierbar sind.

Bibliothek Durchschnitt Relativ p99 Erfolgsrate
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%

Die Geschwindigkeit von PDF Oxide stammt aus einem nativen Rust-Kern, der über PyO3 als Python-Erweiterungsmodul kompiliert ist. Es gibt keinen Subprozess-Overhead und keine Brücke zu einer C-Bibliothek — der Rust-Code läuft direkt im Python-Prozess.

Zuverlässigkeit

PDF Oxide verarbeitet 3.823 von 3.823 gültigen PDFs fehlerfrei — eine Erfolgsrate von 100 %. Die 7 nicht erfolgreichen Dateien im 3.830-Dateien-Korpus sind absichtlich beschädigte Test-Fixtures (fehlender PDF-Header, fuzz-korrumpierte Kataloge, ungültige xref-Streams).

Bibliothek Gültige PDFs bestanden Erfolgsrate
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 das gesamte Korpus 99,5 % Textübereinstimmung gegenüber PyMuPDF und pypdfium2. Die Qualität wurde zeichenweise zwischen den Extraktionsergebnissen verglichen. Die verbleibenden 0,5 % Unterschied betreffen die Normalisierung von Leerzeichen und die Behandlung von Ligaturen, wobei PDF Oxide eine sauberere Ausgabe liefert.

Lizenzvergleich

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

PyMuPDF setzt auf MuPDF unter AGPL-3.0. Wenn Sie Software verteilen, die PyMuPDF nutzt, muss Ihre Software ebenfalls unter AGPL-3.0 veröffentlicht werden — oder Sie erwerben eine kommerzielle Lizenz bei Artifex. Das betrifft SaaS-Produkte, Webanwendungen und jede verteilte Binärdatei.

PDF Oxide steht unter MIT ohne Einschränkungen. Setzen Sie die Bibliothek in proprietären Produkten, SaaS-Plattformen oder Closed-Source-Anwendungen ein — ohne 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 (ohne Lizenz) Ja Ja Ja Ja
SaaS/Cloud Ja Lizenz erforderlich Ja Ja Ja Ja
Interne Tools 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")

# Unterstützt auch 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 kann PDFs zusammenführen und ändern, aber keine mit Textinhalt neu erstellen.
# Nutzen Sie reportlab oder fpdf2 zum Erzeugen und danach pypdf zum Zusammenführen.

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

# In Markdown konvertieren mit Überschriftserkennung
md = doc.to_markdown(0, detect_headings=True)
print(md)

# In HTML konvertieren
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 im Benchmark dank Rust-Kern — 5,8× schneller als PyMuPDF
  • 100 % Erfolgsrate auf dem 3.830-PDF-Korpus — höchste Zuverlässigkeit aller getesteten Bibliotheken
  • Einheitliche API für Extraktion, Erstellung und Bearbeitung in einer Bibliothek
  • Integrierter Markdown- und HTML-Export mit Überschriftserkennung
  • 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:

  • Jüngere Bibliothek mit kleinerer Community
  • Tabellenerkennung ist einfacher als die Algorithmen von pdfplumber
  • Die Rendering-Engine ist weniger ausgereift als MuPDF

PyMuPDF (fitz)

Stärken:

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

Einschränkungen:

  • AGPL-3.0-Lizenz verlangt, dass Sie Ihre Anwendung quelloffen veröffentlichen oder eine Kommerzlizenz kaufen
  • Große Wheel-Größe (~20 MB) durch das gebündelte MuPDF
  • Kein integrierter Markdown-Export
  • Keine Konformitätsprüfung

pypdfium2

Stärken:

  • Schnell (basiert auf Googles PDFium-Engine)
  • Apache-2.0-Lizenz — permissiv 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 Formularfeld-Unterstützung über reines Lesen hinaus

pypdf

Stärken:

  • Reines Python — installiert sich überall, keine kompilierten Abhängigkeiten
  • Leichtgewichtig und aktiv gepflegt
  • Gut geeignet für PDF-Manipulation (zusammenführen, teilen, drehen, verschlüsseln)
  • Große Community und umfangreiche Dokumentation

Einschränkungen:

  • 15× langsamer als PDF Oxide bei der Textextraktion
  • Textextraktion stößt bei komplexen Layouts an Grenzen
  • Kein Rendering, kein Markdown-/HTML-Export, keine Tabellenerkennung

pdfplumber

Stärken:

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

Einschränkungen:

  • Reines Python — 29× langsamer als PDF Oxide
  • Nur-Lesen — keine PDF-Erstellung oder -Bearbeitung
  • Keine Verschlüsselung und kein Rendering

pdfminer

Stärken:

  • Detaillierte Zeichen- und Layoutanalyse
  • Gute CJK-Textunterstützung
  • Grundlage für pdfplumber und andere Werkzeuge
  • MIT-lizenziert

Einschränkungen:

  • 21× langsamer als PDF Oxide (reines Python, nicht optimiert)
  • Nur-Lesen, keine Erstellung oder Bearbeitung
  • Umständliche API für übliche Aufgaben
  • Weniger aktiv gepflegt

Wann welche Bibliothek einsetzen

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
Tabellenerkennung aus Rechnungen pdfplumber
Visuelles Debugging der Extraktion pdfplumber
Bestehende MuPDF-Investition PyMuPDF (bei AGPL-Verträglichkeit)
Minimale Abhängigkeiten pypdf (reines 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). Kein Compiler, keine Systembibliotheken erforderlich.

Verwandte Seiten