PDF Oxide vs pypdfium2
Sowohl PDF Oxide als auch pypdfium2 sind schnelle, nativ kompilierte PDF-Bibliotheken für Python. pypdfium2 umhüllt Googles PDFium-Engine; PDF Oxide baut auf einem Rust-Kern auf. Der entscheidende Unterschied ist der Umfang: pypdfium2 ist in erster Linie ein Leser und Renderer, während PDF Oxide den gesamten PDF-Lebenszyklus abdeckt.
Wesentliche Unterschiede
Geschwindigkeit. Beide sind schnell. PDF Oxide ist etwas schneller: 0,8 ms im Mittel gegenüber 4,1 ms (Faktor 5,1). Beide sind drastisch schneller als reine Python-Bibliotheken.
Funktionen. pypdfium2 ist schreibgeschützt mit Rendering. PDF Oxide ergänzt Erstellung, Bearbeitung, Formularbeschreibung, Verschlüsselung, Markdown-/HTML-Ausgabe und OCR.
Zuverlässigkeit. PDF Oxide verarbeitet 100 % der gültigen PDFs erfolgreich. pypdfium2 erreicht 99,2 % — 31 Fehlschläge.
Lizenz. Beide sind permissiv. PDF Oxide steht unter MIT; pypdfium2 unter Apache-2.0. Bei keiner gibt es AGPL-Bedenken.
Schnellvergleich
| PDF Oxide | pypdfium2 | |
|---|---|---|
| Mittlere Extraktionszeit | 0,8 ms | 4,1 ms |
| Erfolgsquote (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 im direkten 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 cannot create PDFs.
# It is a read-only library with rendering capabilities.
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
| Kennzahl | PDF Oxide | pypdfium2 |
|---|---|---|
| Mittlere Extraktionszeit | 0,8 ms | 4,1 ms |
| p99-Extraktionszeit | 9 ms | 42 ms |
| Erfolgsquote (gültige PDFs) | 100 % (3.823/3.823) | 99,2 % (3.792/3.823) |
Beide Bibliotheken verwenden nativen Code (Rust bzw. C), doch die Textextraktions-Pipeline von PDF Oxide ist speziell für diese Aufgabe optimiert — Extraktion in einem Durchgang mit vorab zugewiesenen Puffern und zwischengespeicherten Seitenbäumen.
Details zum Korpus finden Sie in der vollständigen Benchmark-Methodik.
Funktionsvollständigkeit
Der größte Unterschied zwischen diesen Bibliotheken ist der Umfang. pypdfium2 ist ein Leser 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 |
| Vorhandene PDFs bearbeiten | Ja (Text, Bilder, Anmerkungen) | Nein |
| Formularfelder ausfüllen | Ja | Nein |
| Verschlüsselung schreiben | Ja (AES-256) | Nein |
| Markdown-/HTML-Ausgabe | Ja | Nein |
| OCR gescannter Seiten | Ja (PaddleOCR über ONNX) | Nein |
| PDF/A-Validierung | Ja | Nein |
Wenn Sie PDFs nur lesen und rendern müssen, ist pypdfium2 eine solide Wahl. Brauchen Sie jedoch irgendeine Schreibfunktion — Erstellung, Bearbeitung, Formularausfüllung oder Verschlüsselung —, ist PDF Oxide die Einzelbibliothekslösung.
pypdfium2-Lizenz (Apache-2.0)
pypdfium2 steht unter der Apache-2.0-Lizenz, die kommerzielle Nutzung erlaubt. Sie umhüllt jedoch Googles PDFium (die PDF-Engine von Chromium), die ihre eigene BSD-artige Lizenz hat. Beide sind permissiv.
Wichtige Aspekte:
- Apache-2.0 — permissiv, erlaubt kommerzielle Nutzung, erfordert Namensnennung
- PDFium-Abhängigkeit — das Binärpaket enthält die PDFium-Engine von Chromium (~15 MB)
- Googles Release-Zyklus — pypdfium2 hängt von den PDFium-Releases des Chromium-Projekts ab
- Keine Garantie für die Stabilität der Python-API — die API folgt eng der C-API von PDFium
PDF Oxide steht unter der MIT-Lizenz — noch permissiver als Apache-2.0, ohne Anforderungen zur Namensnennung bei der Verteilung von Binärdateien.
Wann welche Bibliothek
Wählen Sie PDF Oxide, wenn:
- Sie mehr als Lesen/Rendern benötigen (Erstellung, Bearbeitung, Formulare, Verschlüsselung)
- Sie eine Markdown- oder HTML-Konvertierung möchten
- Sie integriertes OCR für gescannte Dokumente möchten
- Sie höchste Zuverlässigkeit benötigen (100 % gegenüber 99,2 %)
- Geschwindigkeit entscheidend ist und der Faktor 5 im großen Maßstab ins Gewicht fällt
Wählen Sie pypdfium2, wenn:
- Sie PDFs nur lesen und rendern müssen
- Sie die spezifische Rendering-Ausgabe von PDFium bevorzugen
- Sie einen geringeren Abhängigkeitsfußabdruck möchten
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