Довідник 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.
Наступні кроки
- Типи та переліки — усі спільні типи та переліки
- Довідник API сторінки — узгоджена ітерація по сторінках для всіх прив’язок
- Початок роботи з Clojure — посібник