PDF Oxide vs pypdfium2
PDF Oxide und pypdfium2 sind beide schnelle, nativ kompilierte Python-PDF-Bibliotheken. pypdfium2 umschließt Googles PDFium-Engine; PDF Oxide steht auf einem Rust-Kern. Der entscheidende Unterschied ist der Umfang: pypdfium2 ist vor allem Reader und Renderer, PDF Oxide deckt den gesamten PDF-Lebenszyklus ab — vom Erstellen über Extrahieren, OCR und Formularbearbeitung bis zu Verschlüsselung und Compliance.
Wesentliche Unterschiede
Geschwindigkeit. Beide sind schnell. PDF Oxide ist etwas schneller: 0,8ms Durchschnitt gegenüber 4,1ms (5,1-facher Unterschied). Beide sind dramatisch schneller als reine Python-Bibliotheken.
Funktionsumfang. pypdfium2 ist schreibgeschützt mit Rendering. PDF Oxide bietet zusätzlich Erstellung, Bearbeitung, Formularschreiben, Verschlüsselung, Markdown-/HTML-Ausgabe und OCR.
Zuverlässigkeit. PDF Oxide besteht 100% der gültigen PDFs. pypdfium2 besteht 99,2% — 31 Fehler.
Lizenz. Beide sind permissiv. PDF Oxide ist MIT; pypdfium2 ist Apache-2.0. Keine AGPL-Bedenken bei beiden.
Schnellvergleich
| PDF Oxide | pypdfium2 | |
|---|---|---|
| Durchschn. Extraktionszeit | 0,8ms | 4,1ms |
| Erfolgsrate (3.830 PDFs) | 100% | 99,2% |
| Lizenz | MIT | Apache-2.0 |
| Sprache | Rust + PyO3 | C (PDFium) |
| Textextraktion | Ja | Ja |
| Zeichenpositionen | Ja | Ja |
| Bildextraktion | Ja | Ja |
| Markdown-Ausgabe | Ja | Nein |
| HTML-Ausgabe | Ja | Nein |
| PDF-Erstellung | Ja | Nein |
| PDF-Bearbeitung | Ja | Nein |
| Formularfelder | Lesen + Schreiben | Nur Lesen |
| Verschlüsselung | Lesen + Schreiben | Nur Lesen |
| Rendering | Ja | Ja |
| OCR | Integriert | Nein |
| Suche | Regex + räumlich | Ja |
Code-Vergleich
Textextraktion
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)
pypdfium2:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
textpage = page.get_textpage()
text = textpage.get_text_range()
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"])
pypdfium2:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
for i, obj in enumerate(page.get_objects()):
if obj.type == pdfium.FPDF_PAGEOBJ_IMAGE:
bitmap = obj.get_bitmap()
bitmap.to_pil().save(f"image_{i}.png")
PDF-Erstellung
PDF Oxide:
from pdf_oxide import Pdf
pdf = Pdf.from_markdown("# Report\n\nQuarterly results are in.")
pdf.save("report.pdf")
pypdfium2:
# pypdfium2 kann keine PDFs erstellen.
# Es ist eine schreibgeschützte Bibliothek mit Rendering-Fähigkeiten.
Rendering
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
image = doc.render_page(0, dpi=150)
image.save("page.png")
pypdfium2:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
bitmap = page.render(scale=150/72)
bitmap.to_pil().save("page.png")
Benchmark-Details
| Metrik | PDF Oxide | pypdfium2 |
|---|---|---|
| Durchschn. Extraktionszeit | 0,8ms | 4,1ms |
| p99-Extraktionszeit | 9ms | 42ms |
| Erfolgsrate (gültige PDFs) | 100% (3.823/3.823) | 99,2% (3.792/3.823) |
Beide Bibliotheken verwenden nativen Code (Rust bzw. C), aber die Textextraktionspipeline von PDF Oxide ist speziell für diese Aufgabe optimiert — Einzeldurchlauf-Extraktion mit vorab allokierten Puffern und gecachten Seitenbäumen.
Siehe vollständige Benchmark-Methodik für Korpusdetails.
Funktionsvollständigkeit
Der größte Unterschied zwischen diesen Bibliotheken ist der Umfang. pypdfium2 ist ein Reader mit Rendering; PDF Oxide deckt den gesamten PDF-Lebenszyklus ab:
| Fähigkeit | PDF Oxide | pypdfium2 |
|---|---|---|
| Lesen und extrahieren | Ja | Ja |
| Seiten rendern | Ja | Ja |
| PDFs erstellen | Ja (Markdown, HTML, Bilder) | Nein |
| Bestehende PDFs bearbeiten | Ja (Text, Bilder, Annotationen) | Nein |
| Formularfelder ausfüllen | Ja | Nein |
| Verschlüsselung schreiben | Ja (AES-256) | Nein |
| Markdown-/HTML-Ausgabe | Ja | Nein |
| Gescannte Seiten per OCR | Ja (PaddleOCR via ONNX) | Nein |
| PDF/A-Validierung | Ja | Nein |
Wenn Sie nur PDFs lesen und rendern müssen, ist pypdfium2 eine solide Wahl. Wenn Sie irgendeine Schreibfähigkeit benötigen — Erstellung, Bearbeitung, Formularausfüllung oder Verschlüsselung — ist PDF Oxide die Einzelbibliothekslösung.
pypdfium2-Lizenz (Apache-2.0)
pypdfium2 ist unter Apache-2.0 lizenziert, was kommerzielle Nutzung erlaubt. Es nutzt jedoch Googles PDFium (die Chromium-PDF-Engine), die eine eigene BSD-artige Lizenz hat. Beide sind permissiv.
Wichtige Überlegungen:
- Apache-2.0 — permissiv, erlaubt kommerzielle Nutzung, erfordert Namensnennung
- PDFium-Abhängigkeit — Binärdatei enthält Chromiums PDFium-Engine (~15 MB)
- Googles Release-Zyklus — pypdfium2 hängt von PDFium-Releases des Chromium-Projekts ab
- Keine Python-API-Stabilitätsgarantie — die API folgt eng der C-API von PDFium
PDF Oxide ist MIT-lizenziert — noch permissiver als Apache-2.0, ohne Namensnennungsanforderungen für Binärdistributionen.
Wann welches verwenden
Wählen Sie PDF Oxide, wenn:
- Sie mehr als Lesen/Rendern benötigen (Erstellung, Bearbeitung, Formulare, Verschlüsselung)
- Sie Markdown- oder HTML-Konvertierung wünschen
- Sie integriertes OCR für gescannte Dokumente wünschen
- Sie die höchste Zuverlässigkeit benötigen (100% gegenüber 99,2%)
- Geschwindigkeit entscheidend ist und der 5-fache Unterschied im Maßstab relevant wird
Wählen Sie pypdfium2, wenn:
- Sie nur PDFs lesen und rendern müssen
- Sie die spezifische Rendering-Ausgabe von PDFium bevorzugen
- Sie einen kleineren Abhängigkeits-Footprint wünschen
Verwandte Seiten
- Leistungsbenchmarks — vollständige Korpus-Ergebnisse
- vs Python-PDF-Bibliotheken — alle Python-Bibliotheken im Vergleich
- Erste Schritte mit Python — Installation und erste Extraktion