Von pypdf zu PDF Oxide migrieren
Eine vollständige Anleitung für den Umstieg von pypdf auf PDF Oxide. Alle APIs, die Sie derzeit verwenden, und deren Ersatz werden behandelt.
Warum von pypdf wechseln?
Vier überzeugende Gründe für die Migration:
- 15-mal schneller — PDF Oxide verarbeitet durchschnittlich 0,8 ms pro Seite, pypdf 12,1 ms. Die Verarbeitung eines 500-seitigen Dokuments sinkt von 6 Sekunden auf 0,4 Sekunden.
- 100 % Zuverlässigkeit — PDF Oxide besteht 100 % der PDF-Testsuite. pypdf scheitert bei 1,6 % der Dateien (98,4 % Erfolgsrate), was bei etwa jedem 60. Dokument zu fehlerhafter Ausgabe führt.
- Integriertes Markdown und HTML — pypdf kann nur Reintext extrahieren. PDF Oxide konvertiert Seiten in Markdown (mit Tabellen und Struktur) und HTML — unverzichtbar für LLM- und RAG-Pipelines.
- Integriertes OCR und Rendering — pypdf bietet kein OCR und kein Seitenrendering. PDF Oxide beinhaltet PaddleOCR für gescannte Dokumente und kann Seiten als Bilder rendern, ohne externe Abhängigkeiten.
Schritt 1: Installation
pip install pdf_oxide
pip uninstall pypdf # optional
Schritt 2: Imports ersetzen
# Vorher
from pypdf import PdfReader, PdfWriter, PdfMerger
# Nachher
from pdf_oxide import PdfDocument, Pdf
Schritt 3: API-Zuordnungstabelle
| Aufgabe | pypdf | PDF Oxide |
|---|---|---|
| PDF öffnen | PdfReader("file.pdf") |
PdfDocument("file.pdf") |
| Seitenanzahl | len(reader.pages) |
doc.page_count() |
| Text extrahieren | reader.pages[0].extract_text() |
doc.extract_text(0) |
| Bilder extrahieren | reader.pages[0].images |
doc.extract_image_bytes(0) |
| Formularfelder | reader.get_fields() |
doc.get_form_fields() |
| Metadaten | reader.metadata |
doc.metadata() |
| Verschlüsseltes PDF | reader.decrypt("pw") |
PdfDocument("file.pdf", password="pw") |
| PDFs zusammenführen | PdfMerger() + .append() |
doc.merge_from("doc2.pdf") |
| Seiten teilen | PdfWriter() + .add_page() |
doc.extract_pages([0,1,2,3,4], "out.pdf") |
| In Markdown | Nicht verfügbar | doc.to_markdown(0) |
| Rendern | Nicht verfügbar | doc.render_page(0) |
| OCR | Nicht verfügbar | doc.extract_text_ocr(0) |
Schritt 4: Gängige Musteränderungen
Textextraktion
# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for page in reader.pages:
print(page.extract_text())
# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
print(doc.extract_text(i))
PDFs zusammenführen
pypdf erfordert die Erstellung eines Merger-Objekts und das einzelne Hinzufügen von Dateien. PDF Oxide erledigt es in einem Aufruf:
# pypdf
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("doc1.pdf")
merger.append("doc2.pdf")
merger.write("merged.pdf")
# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("doc1.pdf")
doc.merge_from("doc2.pdf")
doc.save("merged.pdf")
Seiten teilen / extrahieren
# pypdf — manuelles seitenweises Kopieren
from pypdf import PdfReader, PdfWriter
reader = PdfReader("report.pdf")
writer = PdfWriter()
for page in reader.pages[0:5]:
writer.add_page(page)
writer.write("first_5_pages.pdf")
# PDF Oxide — ein Aufruf
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
doc.extract_pages([0, 1, 2, 3, 4], "first_5_pages.pdf")
Verschlüsselte PDFs
# pypdf — zwei Schritte: open + decrypt
from pypdf import PdfReader
reader = PdfReader("encrypted.pdf")
reader.decrypt("password")
text = reader.pages[0].extract_text()
# PDF Oxide — Passwort im Konstruktor
from pdf_oxide import PdfDocument
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)
Markdown-Konvertierung (neue Funktion)
pypdf unterstützt kein Markdown. PDF Oxide ermöglicht die einfache Einbindung von PDFs in LLM-Pipelines:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
md = doc.to_markdown(i)
print(md)
Bildextraktion
# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for image in reader.pages[0].images:
with open(image.name, "wb") as f:
f.write(image.data)
# 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"])
Schritt 5: Migration testen
Führen Sie Ihre vorhandenen Testdateien mit beiden Bibliotheken aus und vergleichen Sie die Ausgaben:
from pdf_oxide import PdfDocument
doc = PdfDocument("your-test-file.pdf")
# Textextraktion überprüfen
text = doc.extract_text(0)
print(text[:500])
# Seitenanzahl überprüfen
print(f"Pages: {doc.page_count()}")
# Formularfelder überprüfen (falls zutreffend)
fields = doc.get_form_fields()
for f in fields:
print(f"{f.name}: {f.value}")
Weitere Migrationsanleitungen
Verwandte Seiten
- PDF Oxide vs pypdf — detaillierter Vergleich
- Erste Schritte mit Python — Installationsanleitung
- Text aus PDF extrahieren — Anleitung zur Textextraktion