Python-PDF-Bibliothek: PDF Oxide in zehn Zeilen
PDF Oxide ist die schnellste PDF-Bibliothek für Python: 0,8 ms durchschnittliche Textextraktion, 5-mal schneller als PyMuPDF und 100 % Trefferquote bei 3.830 getesteten PDFs. Eine Bibliothek für Extraktion, Erstellung und Bearbeitung — MIT-Lizenz, Rust-Kern, keine Systemabhängigkeiten.
Installation
pip install pdf_oxide
Voraussetzungen: Python 3.8 oder neuer. Fertige Wheels stehen für Linux, macOS und Windows auf x86_64 und ARM64 bereit. Ein Compiler oder Systempakete sind nicht nötig.
Ein PDF öffnen
Mit PdfDocument öffnen und inspizieren Sie jede PDF-Datei.
from pdf_oxide import PdfDocument
doc = PdfDocument("research-paper.pdf")
print(f"Pages: {doc.page_count()}")
print(f"PDF version: {doc.version()}")
Page-API
Seit v0.3.34 ist PdfDocument iterierbar und indexierbar und liefert PdfPage-Objekte mit lazy Properties.
from pdf_oxide import PdfDocument
with PdfDocument("paper.pdf") as doc:
for page in doc: # len(doc), doc[i], doc[-1] funktionieren alle
text = page.text # lazy — wird beim Zugriff berechnet
md = page.markdown(detect_headings=True)
for table in page.tables:
for row in table["rows"]:
print([cell["text"] for cell in row["cells"]])
Seiten-Properties (alle lazy): text, chars, words, lines, spans, tables, images, paths, annotations, width, height, bbox. Methoden: markdown(), plain_text(), html(), render(), search(), region(x, y, w, h).
Die Editor-Seitenklasse wurde in v0.3.34 in
EditorPageumbenannt, um Kollisionen mitPdfPagezu vermeiden.
Textextraktion
Einzelne Seite
Klartext einer Seite über ihren nullbasierten Index extrahieren.
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)
Alle Seiten
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)
Zeichenweise Extraktion
extract_chars() liefert eine Liste von TextChar-Objekten mit exakter Position und Font-Metadaten für jedes Zeichen der Seite.
from pdf_oxide import PdfDocument
doc = PdfDocument("paper.pdf")
chars = doc.extract_chars(0)
for ch in chars[:10]:
print(f"'{ch.char}' at ({ch.x:.1f}, {ch.y:.1f}) "
f"size={ch.font_size:.1f} font={ch.font_name} "
f"bbox={ch.bbox}")
Jedes TextChar hat folgende Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
char |
str |
Das Unicode-Zeichen |
x |
float |
Horizontale Position in Punkt |
y |
float |
Vertikale Position in Punkt |
font_size |
float |
Schriftgröße in Punkt |
font_name |
str |
PostScript-Schriftname |
bbox |
tuple[float, 4] |
Umgebungsbox (x0, y0, x1, y1) |
Text-Spans
extract_spans() fasst aufeinanderfolgende Zeichen mit gleicher Schrift und Größe zu Spans zusammen und liefert strukturierten Text inklusive Font-Metadaten.
from pdf_oxide import PdfDocument
doc = PdfDocument("paper.pdf")
spans = doc.extract_spans(0)
for span in spans:
print(f"'{span.text}' font={span.font_name} size={span.font_size}")
Markdown-Konvertierung
Eine PDF-Seite mit optionaler Überschriftenerkennung in Markdown umwandeln.
from pdf_oxide import PdfDocument
doc = PdfDocument("paper.pdf")
md = doc.to_markdown(0, detect_headings=True)
print(md)
HTML-Konvertierung
Eine PDF-Seite nach HTML konvertieren.
from pdf_oxide import PdfDocument
doc = PdfDocument("paper.pdf")
html = doc.to_html(0)
print(html)
Bildextraktion
extract_images() liefert eine Liste von ImageInfo-Objekten für jedes eingebettete Bild einer Seite — inklusive Bildern aus Content Streams und verschachtelten Form-XObjects.
from pdf_oxide import PdfDocument
doc = PdfDocument("brochure.pdf")
images = doc.extract_image_bytes(0)
for i, img in enumerate(images):
print(f"Image {i}: {img['width']}x{img['height']} "
f"({len(img['data'])} bytes)")
with open(f"image_{i}.{img['format']}", "wb") as f:
f.write(img["data"])
Jedes Dict, das extract_image_bytes() zurückgibt, enthält folgende Schlüssel:
| Schlüssel | Typ | Beschreibung |
|---|---|---|
width |
int |
Bildbreite in Pixeln |
height |
int |
Bildhöhe in Pixeln |
data |
bytes |
Rohe Bilddaten |
format |
str |
Bildformat (z. B. png, jpeg) |
Aus Bytes öffnen
PDF aus In-Memory-Bytes öffnen — praktisch beim Download aus S3, HTTP oder Datenbanken:
from pdf_oxide import PdfDocument
doc = PdfDocument.from_bytes(pdf_bytes)
text = doc.extract_text(0)
# Passwort wird ebenfalls unterstützt:
doc = PdfDocument.from_bytes(pdf_bytes, password="secret")
Für die Builder-API:
from pdf_oxide import Pdf
pdf = Pdf.from_bytes(existing_pdf_bytes)
pdf.save("modified.pdf")
Passwortgeschützte PDFs
Übergeben Sie password= im Konstruktor, um verschlüsselte Dokumente zu öffnen.
from pdf_oxide import PdfDocument
doc = PdfDocument("confidential.pdf", password="secret")
text = doc.extract_text(0)
print(text)
Alternativ können Sie nach dem Öffnen doc.authenticate(password) aufrufen.
PDF-Erstellung
Die Klasse Pdf bietet Factory-Methoden, um PDFs aus verschiedenen Quellformaten zu erzeugen.
Aus Markdown
from pdf_oxide import Pdf
pdf = Pdf.from_markdown("# Hello World\n\nThis is a PDF.")
pdf.save("output.pdf")
Aus HTML
from pdf_oxide import Pdf
pdf = Pdf.from_html("<h1>Invoice</h1><p>Amount due: $42.00</p>")
pdf.save("invoice.pdf")
Aus Klartext
from pdf_oxide import Pdf
pdf = Pdf.from_text("Plain text document.\n\nSecond paragraph.")
pdf.save("notes.pdf")
Aus Bildern
from pdf_oxide import Pdf
pdf = Pdf.from_image("scan.jpg")
pdf.save("scan.pdf")
Suche
Suchen Sie im gesamten Dokument oder gezielt auf einer Seite.
from pdf_oxide import PdfDocument
doc = PdfDocument("manual.pdf")
# Alle Seiten durchsuchen
results = doc.search("configuration")
for r in results:
print(f"Page {r.page}: '{r.text}' at ({r.x:.0f}, {r.y:.0f})")
# Nur eine einzelne Seite durchsuchen
page_results = doc.search_page(0, "configuration")
Fehlerbehandlung
PDF Oxide löst PdfError bei PDF-spezifischen Fehlern aus und nutzt Standard-Python-Ausnahmen für I/O-Probleme.
from pdf_oxide import PdfDocument, PdfError
try:
doc = PdfDocument("document.pdf")
text = doc.extract_text(0)
except PdfError as e:
print(f"PDF error: {e}")
except FileNotFoundError:
print("File not found")
Nächste Schritte
- Rust-Schnellstart – PDF Oxide aus Rust verwenden
- Textextraktion – ausführliche Extraktionsoptionen und Rezepte
- PDF-Erstellung – erweiterte Erstellung mit PdfBuilder, Verschlüsselung und Metadaten
- Bearbeitung – bestehende PDFs, Anmerkungen und Formularfelder ändern
- API-Referenz – vollständige API-Dokumentation