Skip to content

Довідник Clojure API

PDF Oxide постачає ідіоматичну прив’язку Clojure як тонку обгортку над Java-прив’язкою fyi.oxide:pdf-oxide, якій належить єдиний нативний міст JNI (крейт pdf_oxide_jni). Обгортка не додає жодного нативного коду: вона викликає Java-класи напряму через interop і повертає зручні для Clojure значення (java.util.List стає вектором, java.util.Optional стає значенням-або-nil). Типи дескрипторів (Pdf, PdfDocument, DocumentEditor, AutoExtractor) реалізують AutoCloseable, тож використовуйте with-open для детермінованого очищення ресурсів.

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

Нативна бібліотека JNI (libpdf_oxide_jni) не постачається у складі — зробіть її доступною для завантаження через System.loadLibrary("pdf_oxide_jni") у вашому java.library.path, або вкажіть Java-класу NativeLoader шлях до неї за допомогою -Dfyi.oxide.pdf.lib.path=<path>.

Кожна функція живе у просторі імен pdf-oxide.core:

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

Для інших мов див. Довідник Java API, Довідник Python API, Довідник Rust API і Типи й переліки.


Pdf — Створення

Функції, що будують новий Pdf у пам’яті з вихідного вмісту, а також серіалізація в масив байтів. Повернений Pdf реалізує AutoCloseable.

Створення

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

Створити Pdf із рядка Markdown.

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

Створити Pdf із рядка HTML.

Збереження

(save ^bytes [^Pdf pdf])

Серіалізувати зібраний Pdf у масив байтів (сирі байти PDF).

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

PdfDocument — Відкриття, видобування й рендеринг

Основний дескриптор читання для наявного PDF. Відкривайте з масиву байтів або шляху у файловій системі, потім видобувайте текст, конвертуйте у Markdown/HTML, рендерте сторінки, виконуйте пошук і читайте метадані та поля форм. Реалізує AutoCloseable.

Відкриття

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

Відкрити документ із масиву байтів або рядка зі шляхом у файловій системі. Форма з двома аргументами передає пароль для зашифрованих PDF.

(authenticate [^PdfDocument doc ^String password])

Автентифікувати зашифрований документ уже після відкриття; повертає булеве значення.

Запити до документа

(page-count [^PdfDocument doc])

Повернути кількість сторінок у документі.

(producer [^PdfDocument doc])

Повернути рядок метаданих /Producer або nil, якщо він відсутній.

(creator [^PdfDocument doc])

Повернути рядок метаданих /Creator або nil, якщо він відсутній.

Видобування тексту

(extract-text [^PdfDocument doc page])

Видобути звичайний текст з однієї сторінки за індексом, що починається з нуля.

(extract-structured [^PdfDocument doc page])

Видобути структурований текст (фрагменти/блоки з координатами) для однієї сторінки.

Конвертація

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

Конвертувати весь документ або окрему сторінку в Markdown.

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

Конвертувати весь документ або окрему сторінку в HTML.

Рендеринг

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

Відрендерити сторінку в байти зображення PNG, за бажанням із заданою роздільною здатністю (DPI).

Пошук

(search [^PdfDocument doc ^String query])

Виконати пошук тексту в документі; повертає вектор результатів SearchMatch.

Форми

(form-fields [^PdfDocument doc])

Повернути вектор полів форми AcroForm документа.

Доступ до сторінок

(page ^PdfPage [^PdfDocument doc idx])

Отримати дескриптор PdfPage для сторінки за індексом, що починається з нуля.

(pages [^PdfDocument doc])

Повернути вектор усіх дескрипторів PdfPage у документі.


PdfPage — Видобування елементів сторінки

Дескриптор сторінки, отриманий через (pdf/page doc idx) або (pdf/pages doc). Кожна функція видобування перетворює результат типу Java List на вектор Clojure.

Елементи

(words [^PdfPage page])

Повернути вектор елементів-слів на сторінці.

(lines [^PdfPage page])

Повернути вектор елементів-рядків на сторінці.

(chars [^PdfPage page])

Повернути вектор окремих символів-гліфів на сторінці. (Ця pdf/chars навмисно затінює clojure.core/chars.)

(tables [^PdfPage page])

Повернути вектор виявлених таблиць на сторінці.

(images [^PdfPage page])

Повернути вектор елементів-зображень на сторінці.

(annotations [^PdfPage page])

Повернути вектор анотацій на сторінці.

Текст сторінки

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

Повернути звичайний текст сторінки, за бажанням обмежений областю BBox.

(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 — Редагування й вилучення даних

Змінюваний дескриптор редагування, що відкривається незалежно від PdfDocument. Підтримує очищення метаданих і безповоротне вилучення даних (redaction), після чого серіалізує результат у байти. Реалізує AutoCloseable.

(editor ^DocumentEditor [source])

Відкрити DocumentEditor із масиву байтів або рядка зі шляхом у файловій системі.

(scrub-metadata [^DocumentEditor ed])

Видалити метадані документа (словник info / XMP) на місці.

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

Позначити прямокутну область BBox на сторінці за індексом, що починається з нуля, для вилучення даних.

(apply-redactions [^DocumentEditor ed])

Безповоротно застосувати всі заплановані вилучення даних, видаляючи базовий вміст.

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

Серіалізувати відредагований документ у масив байтів.

(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 — Автоматичне видобування

Зручний екстрактор, який автоматично обирає стратегію видобування для PdfDocument.

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

Створити AutoExtractor для заданого документа.

(auto-text [^AutoExtractor ax])

Видобути текст з усього документа, використовуючи автоматично обрану стратегію.

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

Життєвий цикл

Типи дескрипторів реалізують AutoCloseable; надавайте перевагу with-open для детермінованого очищення ресурсів. Ці функції — запасні механізми для використання без with-open.

(close [resource])

Закрити будь-який дескриптор (Pdf, PdfDocument, PdfPage, DocumentEditor, AutoExtractor).

(open? [resource])

Повернути, чи дескриптор досі відкритий.

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

Повний приклад

(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 надає нативні прив’язки для всіх основних екосистем: Rust, Python, Node.js, WASM, C#, Golang, Java, PHP, Ruby, C++, Swift, Kotlin, Dart, R, Julia, Zig, Scala, Objective-C та Elixir.

Наступні кроки