Skip to content

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