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
- Typen & Enums — alle gemeinsamen Typen und Enums
- Page-API-Referenz — konsistente Iteration pro Seite über alle Bindings hinweg
- Erste Schritte mit Clojure — Tutorial