PDF Oxide vs pypdf
PDF Oxide ist 15× schneller als pypdf, hat eine höhere Trefferquote und bringt Rendering, Markdown-/HTML-Export, OCR und Formularbearbeitung direkt mit. Was bei pypdf nur mit einem Stapel zusätzlicher Pakete zusammenspielt, erledigt PDF Oxide in einer einzigen Bibliothek.
Warum PDF Oxide statt pypdf
Tempo. pypdf ist reines Python. PDF Oxide hat einen Rust-Kern, der per PyO3 angebunden ist und direkt im Python-Prozess läuft. Mittlere Textextraktion: 0,8 ms gegenüber 12,1 ms — Faktor 15.
Zuverlässigkeit. PDF Oxide besteht alle 3.830 Test-PDFs zu 100 %. pypdf kommt auf 98,4 % und scheitert an 61 gültigen Dateien.
Funktionsumfang. pypdf ist in erster Linie eine Manipulations-Bibliothek (mergen, splitten, drehen, verschlüsseln). Für Textextraktion, Rendering, Markdown-Ausgabe oder Formularerstellung brauchen Sie Zusatzpakete. PDF Oxide deckt all das mit einer Installation ab.
Vergleich auf einen Blick
| PDF Oxide | pypdf | |
|---|---|---|
| Mittlere Extraktionszeit | 0,8 ms | 12,1 ms |
| Trefferquote (3.830 PDFs) | 100 % | 98,4 % |
| Lizenz | MIT | BSD-3 |
| Sprache | Rust + PyO3 | reines Python |
| Textextraktion | Ja | Ja |
| Zeichenpositionen | Ja | teilweise |
| Bildextraktion | Ja | Ja |
| Markdown-Ausgabe | Ja | Nein |
| HTML-Ausgabe | Ja | Nein |
| PDF-Erzeugung | Ja (Markdown/HTML/Bilder) | begrenzt (nur Zusammenführen) |
| Formularfelder | Lesen + Schreiben | Lesen + Schreiben |
| Verschlüsselung | Lesen + Schreiben | Lesen + Schreiben |
| Rendering | Ja | Nein |
| OCR | eingebaut | Nein |
| Suche | Regex + räumlich | Nein |
| Installationsgröße | ~5 MB | ~1 MB |
Code im direkten Vergleich
Textextraktion
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)
pypdf:
from pypdf import PdfReader
reader = PdfReader("report.pdf")
text = reader.pages[0].extract_text()
print(text)
Alle Seiten durchgehen
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("book.pdf")
for i in range(doc.page_count()):
text = doc.extract_text(i)
print(f"--- Page {i + 1} ---")
print(text)
pypdf:
from pypdf import PdfReader
reader = PdfReader("book.pdf")
for page in reader.pages:
text = page.extract_text()
print(text)
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"])
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)
Verschlüsselte PDFs
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("encrypted.pdf", password="secret")
text = doc.extract_text(0)
pypdf:
from pypdf import PdfReader
reader = PdfReader("encrypted.pdf")
reader.decrypt("secret")
text = reader.pages[0].extract_text()
Markdown-Konvertierung
PDF Oxide (eingebaut):
from pdf_oxide import PdfDocument
doc = PdfDocument("paper.pdf")
md = doc.to_markdown(0, detect_headings=True)
print(md)
pypdf:
# pypdf konvertiert nicht nach Markdown.
# Dafür brauchen Sie eine separate Toolchain.
Details zum Benchmark
| Metrik | PDF Oxide | pypdf |
|---|---|---|
| Mittlere Extraktionszeit | 0,8 ms | 12,1 ms |
| Extraktionszeit p99 | 9 ms | 97 ms |
| Trefferquote (gültige PDFs) | 100 % (3.823/3.823) | 98,4 % (3.762/3.823) |
Weil pypdf durchweg in Python läuft, wandert jede Operation durch den Interpreter. Der Rust-Kern von PDF Oxide erledigt Parsing, Schriftdekodierung und Textaufbau nativ; nur das fertige Ergebnis überschreitet die Python-Grenze.
Zum Korpus siehe die vollständige Benchmark-Methodik.
Funktionslücke
pypdf ist stark bei der PDF-Manipulation — mergen, splitten, drehen, verschlüsseln. Dafür fehlt:
| Funktion | PDF Oxide | pypdf |
|---|---|---|
| Markdown-Konvertierung | doc.to_markdown(0) |
nicht verfügbar |
| HTML-Konvertierung | doc.to_html(0) |
nicht verfügbar |
| PDF aus Inhalt erzeugen | Pdf.from_markdown(), Pdf.from_html() |
nicht verfügbar |
| Rendering zu Bildern | Ja | nicht verfügbar |
| OCR für gescannte PDFs | eingebautes PaddleOCR | nicht verfügbar |
| Textsuche | doc.search("query") |
nicht verfügbar |
| Bounding-Boxes pro Zeichen | doc.extract_chars(0) |
teilweise |
| PDF/A-Validierung | Ja | nicht verfügbar |
Wenn Ihre Pipeline ausschließlich mergen/splitten/drehen umfasst, ist pypdf mit seinem schlanken Pure-Python-Ansatz eine vernünftige Wahl. Sobald Qualität der Textextraktion, Erzeugung oder Konvertierung dazukommen, ist PDF Oxide die vollständigere Option.
Wann pypdf weiterhin sinnvoll ist
- Sie brauchen eine reine Python-Abhängigkeit ohne kompilierte Erweiterungen
- Ihr Szenario ist strikt mergen/splitten/drehen/verschlüsseln ohne Textextraktion
- Sie benötigen spezifische pypdf-Methoden für eine Legacy-Integration
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