Erste Schritte mit PDF Oxide (Julia)
PDF Oxide ist die schnellste PDF-Bibliothek für Julia — 0,8 ms mittlere Textextraktion, 100 % Erfolgsquote bei 3.830 PDFs. Das Paket PdfOxide.jl umschließt den Rust-Kern direkt über das C-ABI, sodass du native Geschwindigkeit mit einer idiomatischen Julia-API erhältst. Seitenindizes sind 0-basiert.
Installation
Füge das Paket über den Paketmanager der Julia-REPL hinzu:
using Pkg
Pkg.add("PdfOxide")
Die native Bibliothek (libpdf_oxide) wird zur Laufzeit geladen. Liegt sie nicht im Suchpfad des System-Loaders, weist du PdfOxide.jl über eine der folgenden Umgebungsvariablen darauf hin, die in dieser Reihenfolge geprüft werden: PDF_OXIDE_LIB_PATH (vollständiger Pfad zur Datei), PDF_OXIDE_LIB_DIR (Verzeichnis) und schließlich das lokale Build-Verzeichnis target/release.
export PDF_OXIDE_LIB_DIR=/path/to/pdf_oxide/target/release
Schnelleinstieg
Öffne ein PDF und extrahiere den Text der ersten Seite. extract_text erwartet einen 0-basierten Seitenindex.
using PdfOxide
doc = open_document("report.pdf")
println("pages: ", page_count(doc))
v = version(doc)
println("version: ", v.major, ".", v.minor)
# Reiner Text der ersten Seite (0-basierter Index)
println(extract_text(doc, 0))
Du kannst ein Dokument auch im Speicher aufbauen und aus Bytes öffnen — praktisch für Tests und Pipelines, die nie die Festplatte berühren:
using PdfOxide
pdf = from_markdown("# Hello pdf_oxide\n\nThis is the **Julia** binding.\n")
doc = open_from_bytes(to_bytes(pdf))
println("pages: ", page_count(doc))
println(extract_text(doc, 0))
Dokument inspizieren
Ein paar günstige Aufrufe verraten dir, womit du es zu tun hast, bevor du extrahierst:
using PdfOxide
doc = open_document("report.pdf")
@show page_count(doc) # Anzahl der Seiten
@show version(doc).major # PDF-Spezifikationsversion
@show is_encrypted(doc) # true, wenn die Datei passwortgeschützt ist
Konvertierung nach Markdown und HTML
Konvertiere eine einzelne Seite oder das gesamte Dokument auf einmal. Markdown bewahrt Überschriften, Listen und Hervorhebungen; die _all-Varianten verketten jede Seite.
using PdfOxide
doc = open_document("paper.pdf")
# Eine Seite (0-basiert)
md = to_markdown(doc, 0)
println(md)
# Gesamtes Dokument
println(to_markdown_all(doc))
# HTML für eine einzelne Seite
html = to_html(doc, 0)
println(html)
# Reiner Text ohne jegliche Auszeichnung
println(to_plain_text(doc, 0))
Extraktion auf Wortebene
extract_words liefert einen Vektor von Word-Werten zurück, von denen jeder seinen Text, seine Bounding-Box, seine Schriftgröße und ein Fettschrift-Flag trägt. Die Bounding-Box ist eine Bbox mit den Feldern width, height sowie Positionsfeldern.
using PdfOxide
doc = open_document("paper.pdf")
words = extract_words(doc, 0)
for w in first(words, 10)
println(rpad(w.text, 20),
" size=", w.font_size,
" bold=", w.bold,
" width=", round(w.bbox.width; digits = 1))
end
Für ein zeilenorientiertes Layout liefert extract_text_lines TextLine-Werte zurück, jeweils mit ihrem Text, einem word_count und einer bbox:
using PdfOxide
doc = open_document("paper.pdf")
lines = extract_text_lines(doc, 0)
for line in lines
println(line.word_count, " words: ", line.text)
end
Suche
Durchsuche eine einzelne Seite oder das gesamte Dokument. Das dritte Argument ist das Flag für die Groß-/Kleinschreibung (false für die Unterscheidung ohne Beachtung der Groß-/Kleinschreibung). Jeder Treffer meldet seinen text, die page, auf der er gefunden wurde, und eine bbox.
using PdfOxide
doc = open_document("manual.pdf")
# Eine Seite durchsuchen (ohne Beachtung der Groß-/Kleinschreibung)
hits = search(doc, 0, "configuration", false)
for h in hits
println("page ", h.page, ": ", h.text)
end
# Jede Seite durchsuchen
all_hits = search_all(doc, "configuration", false)
println(length(all_hits), " total matches")
for h in all_hits
println("page ", h.page, " at (",
round(h.bbox.x; digits = 0), ", ",
round(h.bbox.y; digits = 0), ")")
end
Ein PDF erstellen
Die from_*-Factory-Funktionen bauen ein Pdf aus Markdown, HTML oder reinem Text. Rufe to_bytes auf, um die Rohbytes zu erhalten, oder save, um direkt in eine Datei zu schreiben.
using PdfOxide
# Aus Markdown
pdf = from_markdown("# Invoice\n\nAmount due: **\$42**\n")
save(pdf, "invoice.pdf")
# Aus HTML
html_pdf = from_html("<h1>Report</h1><p>Quarterly results.</p>")
save(html_pdf, "report.pdf")
# Aus reinem Text — die Bytes holen, statt eine Datei zu schreiben
text_pdf = from_text("Plain text body.")
bytes = to_bytes(text_pdf)
println("generated ", length(bytes), " bytes")
Fehlerbehandlung
Fehlgeschlagene Operationen lösen einen PdfOxideError aus. Umschließe Aufrufe, die mit nicht vertrauenswürdigen Eingaben arbeiten, mit einem try/catch:
using PdfOxide
try
doc = open_document("missing.pdf")
println(extract_text(doc, 0))
catch e
e isa PdfOxideError || rethrow()
println("PDF error: ", e)
end
Nächste Schritte
- Erste Schritte mit Rust — der native Kern, auf dem PDF Oxide aufbaut
- Erste Schritte mit Python — PDF Oxide aus Python nutzen
- Textextraktion — detaillierte Extraktionsoptionen und Rezepte
- PDF-Erstellung — fortgeschrittene Erstellung mit Metadaten und Styling