Skip to content

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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