Skip to content

Clojure-API-Referenz

PDF Oxide bietet idiomatische Clojure-Bindings als schlanken Wrapper über dem fyi.oxide:pdf-oxide-Java-Binding, das die einzige native JNI-Brücke besitzt (die pdf_oxide_jni-Crate). Der Wrapper fügt keinerlei nativen Code hinzu: Er ruft die Java-Klassen direkt per Interop auf und liefert Clojure-freundliche Werte zurück (java.util.List wird zu einem Vektor, java.util.Optional wird zu einem Wert oder nil). Die Handle-Typen (Pdf, PdfDocument, DocumentEditor, AutoExtractor) sind AutoCloseable, verwende daher with-open für eine deterministische Freigabe.

;; deps.edn
{:deps {fyi.oxide/pdf-oxide-clojure {:mvn/version "0.3.69"}}}
;; Leiningen
[fyi.oxide/pdf-oxide-clojure "0.3.69"]

Die native JNI-Bibliothek (libpdf_oxide_jni) wird nicht mitgeliefert — mache sie über System.loadLibrary("pdf_oxide_jni") auf deinem java.library.path ladbar, oder weise den Java-NativeLoader mit -Dfyi.oxide.pdf.lib.path=<path> darauf hin.

Jede Funktion liegt im Namespace pdf-oxide.core:

(require '[pdf-oxide.core :as pdf])

Für andere Sprachen siehe die Java-API-Referenz, die Python-API-Referenz, die Rust-API-Referenz und Typen & Enums.


Pdf — Erstellung

Funktionen, die ein neues, im Speicher gehaltenes Pdf aus Quellinhalten aufbauen, plus die Serialisierung in ein Byte-Array. Das zurückgegebene Pdf ist AutoCloseable.

Erstellung

(from-markdown ^Pdf [^String markdown])

Erstellt ein Pdf aus einem Markdown-String.

(from-html ^Pdf [^String html])

Erstellt ein Pdf aus einem HTML-String.

Speichern

(save ^bytes [^Pdf pdf])

Serialisiert ein erstelltes Pdf in ein Byte-Array (die rohen PDF-Bytes).

(with-open [p (pdf/from-markdown "# Hello\n\nbody\n")]
  (pdf/save p))                 ; => byte[]

PdfDocument — Öffnen, Extraktion & Rendering

Das primäre Lese-Handle für ein bestehendes PDF. Öffne es aus einem Byte-Array oder einem Dateisystempfad, extrahiere dann Text, konvertiere nach Markdown/HTML, rendere Seiten, durchsuche das Dokument und lies Metadaten sowie Formularfelder. AutoCloseable.

Öffnen

(open ^PdfDocument [source])
(open ^PdfDocument [source ^String password])

Öffnet ein Dokument aus einem Byte-Array oder einem Dateisystempfad-String. Die zweistellige Form übergibt ein Passwort für verschlüsselte PDFs.

(authenticate [^PdfDocument doc ^String password])

Authentifiziert ein verschlüsseltes Dokument nach dem Öffnen; liefert einen Boolean zurück.

Dokumentabfragen

(page-count [^PdfDocument doc])

Liefert die Anzahl der Seiten im Dokument zurück.

(producer [^PdfDocument doc])

Liefert den /Producer-Metadatenstring zurück, oder nil, falls nicht vorhanden.

(creator [^PdfDocument doc])

Liefert den /Creator-Metadatenstring zurück, oder nil, falls nicht vorhanden.

Textextraktion

(extract-text [^PdfDocument doc page])

Extrahiert reinen Text aus einer einzelnen, nullbasierten Seite.

(extract-structured [^PdfDocument doc page])

Extrahiert strukturierten Text (Spans/Blöcke mit Positionierung) für eine einzelne Seite.

Konvertierung

(to-markdown [^PdfDocument doc])
(to-markdown [^PdfDocument doc page])

Konvertiert das gesamte Dokument oder eine einzelne Seite nach Markdown.

(to-html [^PdfDocument doc])
(to-html [^PdfDocument doc page])

Konvertiert das gesamte Dokument oder eine einzelne Seite nach HTML.

Rendering

(render ^bytes [^PdfDocument doc page])
(render ^bytes [^PdfDocument doc page dpi])

Rendert eine Seite in PNG-Bildbytes, optional mit einer angegebenen DPI.

Suche

(search [^PdfDocument doc ^String query])

Durchsucht das Dokument nach Text; liefert einen Vektor von SearchMatch-Ergebnissen zurück.

Formulare

(form-fields [^PdfDocument doc])

Liefert einen Vektor der AcroForm-Formularfelder des Dokuments zurück.

Seitenzugriff

(page ^PdfPage [^PdfDocument doc idx])

Holt ein PdfPage-Handle für die nullbasierte Seite.

(pages [^PdfDocument doc])

Liefert einen Vektor aller PdfPage-Handles im Dokument zurück.


PdfPage — Extraktion von Seitenelementen

Ein Seiten-Handle, das über (pdf/page doc idx) oder (pdf/pages doc) beschafft wird. Jede Extraktionsfunktion wandelt das Java-List-Ergebnis in einen Clojure-Vektor um.

Elemente

(words [^PdfPage page])

Liefert einen Vektor der Wortelemente auf der Seite zurück.

(lines [^PdfPage page])

Liefert einen Vektor der Zeilenelemente auf der Seite zurück.

(chars [^PdfPage page])

Liefert einen Vektor der einzelnen Zeichen-Glyphen auf der Seite zurück. (Dieses pdf/chars überschattet absichtlich clojure.core/chars.)

(tables [^PdfPage page])

Liefert einen Vektor der erkannten Tabellen auf der Seite zurück.

(images [^PdfPage page])

Liefert einen Vektor der Bildelemente auf der Seite zurück.

(annotations [^PdfPage page])

Liefert einen Vektor der Annotationen auf der Seite zurück.

Seitentext

(page-text [^PdfPage page])
(page-text [^PdfPage page region])

Liefert den reinen Text der Seite zurück, optional auf einen BBox-Bereich beschränkt.

(with-open [d (pdf/open (pdf/save p))]
  (let [pg (pdf/page d 0)]
    (map #(.text %) (pdf/words pg))                          ; word strings
    (pdf/page-text pg (BBox. 0.0 0.0 1000.0 1000.0))))       ; region text

DocumentEditor — Bearbeitung & Schwärzung

Ein veränderbares Bearbeitungs-Handle, das unabhängig von PdfDocument geöffnet wird. Unterstützt das Bereinigen von Metadaten und destruktive Schwärzung und serialisiert das Ergebnis anschließend in Bytes. AutoCloseable.

(editor ^DocumentEditor [source])

Öffnet einen DocumentEditor aus einem Byte-Array oder einem Dateisystempfad-String.

(scrub-metadata [^DocumentEditor ed])

Entfernt Dokumentmetadaten (Info-Dictionary / XMP) an Ort und Stelle.

(add-redaction [^DocumentEditor ed page region])

Markiert einen rechteckigen BBox-Bereich auf einer nullbasierten Seite zur Schwärzung.

(apply-redactions [^DocumentEditor ed])

Wendet alle ausstehenden Schwärzungen destruktiv an und entfernt den zugrunde liegenden Inhalt.

(editor-save ^bytes [^DocumentEditor ed])

Serialisiert das bearbeitete Dokument in ein Byte-Array.

(with-open [ed (pdf/editor pdf-bytes)]
  (pdf/scrub-metadata ed)
  (pdf/add-redaction ed 0 (BBox. 10.0 10.0 50.0 20.0))
  (pdf/apply-redactions ed)
  (pdf/editor-save ed))

AutoExtractor — Automatische Extraktion

Ein Komfort-Extraktor, der automatisch eine Extraktionsstrategie für ein PdfDocument auswählt.

(auto-extractor ^AutoExtractor [^PdfDocument doc])

Erstellt einen AutoExtractor für das gegebene Dokument.

(auto-text [^AutoExtractor ax])

Extrahiert Text aus dem gesamten Dokument mit der automatisch gewählten Strategie.

(with-open [d (pdf/open pdf-bytes)]
  (pdf/auto-text (pdf/auto-extractor d)))

Lebenszyklus

Die Handle-Typen sind AutoCloseable; bevorzuge with-open für eine deterministische Freigabe. Diese Funktionen sind Notausstiege für die Verwendung ohne with-open.

(close [resource])

Schließt ein beliebiges Handle (Pdf, PdfDocument, PdfPage, DocumentEditor, AutoExtractor).

(open? [resource])

Liefert zurück, ob das Handle noch geöffnet ist.

(let [d (pdf/open pdf-bytes)]
  (pdf/open? d)        ; => true
  (pdf/close d)
  (pdf/open? d))       ; => false

Vollständiges Beispiel

(require '[pdf-oxide.core :as pdf])
(import '[fyi.oxide.pdf.geometry BBox])

;; --- Creation + Extraction ---
(with-open [p (pdf/from-markdown "# Report\n\nGenerated by PDF Oxide.\n")
            d (pdf/open (pdf/save p))]
  (println "Pages:" (pdf/page-count d))
  (println (pdf/extract-text d 0))
  (println (pdf/to-markdown d))
  (println (pdf/to-html d 0))

  ;; Page elements (List -> vector)
  (let [pg (pdf/page d 0)]
    (println "Words:" (count (pdf/words pg)))
    (doseq [w (pdf/words pg)] (print (.text w) "")))

  ;; Search
  (doseq [m (pdf/search d "Report")]
    (println "Match:" (.text m)))

  ;; Metadata (Optional -> nil)
  (println "Producer:" (or (pdf/producer d) "(none)"))

  ;; Render
  (spit "page0.png" (pdf/render d 0 150)))

;; --- Editing + Redaction ---
(with-open [ed (pdf/editor pdf-bytes)]
  (pdf/scrub-metadata ed)
  (pdf/add-redaction ed 0 (BBox. 10.0 10.0 50.0 20.0))
  (pdf/apply-redactions ed)
  (spit "redacted.pdf" (pdf/editor-save ed)))

Other Language Bindings

PDF Oxide bietet native Bindings für jedes wichtige Ökosystem: Rust, Python, Node.js, WASM, C#, Golang, Java, PHP, Ruby, C++, Swift, Kotlin, Dart, R, Julia, Zig, Scala, Objective-C und Elixir.

Nächste Schritte