Skip to content

Referencia de la API de Clojure

PDF Oxide incluye bindings idiomáticos de Clojure como un wrapper ligero sobre el binding de Java fyi.oxide:pdf-oxide, que es el dueño del único puente nativo JNI (el crate pdf_oxide_jni). El wrapper no añade nada de código nativo: invoca las clases de Java directamente por interop y devuelve valores cómodos para Clojure (java.util.List se convierte en vector, java.util.Optional se convierte en un valor o en nil). Los tipos de handle (Pdf, PdfDocument, DocumentEditor, AutoExtractor) son AutoCloseable, así que usa with-open para una limpieza determinista.

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

La biblioteca nativa JNI (libpdf_oxide_jni) no se incluye empaquetada: haz que pueda cargarse mediante System.loadLibrary("pdf_oxide_jni") en tu java.library.path, o apunta el NativeLoader de Java hacia ella con -Dfyi.oxide.pdf.lib.path=<ruta>.

Todas las funciones viven en el namespace pdf-oxide.core:

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

Para otros lenguajes, consulta la Referencia de la API de Java, la Referencia de la API de Python, la Referencia de la API de Rust y Tipos y enumeraciones.


Pdf — Creación

Funciones que construyen un Pdf nuevo en memoria a partir de contenido fuente, además de la serialización a un array de bytes. El Pdf devuelto es AutoCloseable.

Creación

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

Crea un Pdf a partir de una cadena Markdown.

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

Crea un Pdf a partir de una cadena HTML.

Guardado

(save ^bytes [^Pdf pdf])

Serializa un Pdf ya construido a un array de bytes (los bytes crudos del PDF).

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

PdfDocument — Apertura, extracción y renderizado

El handle de lectura principal para un PDF existente. Ábrelo desde un array de bytes o una ruta del sistema de archivos, y luego extrae texto, convierte a Markdown/HTML, renderiza páginas, busca, y lee metadatos y campos de formulario. AutoCloseable.

Apertura

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

Abre un documento desde un array de bytes o una cadena con la ruta del sistema de archivos. La forma de dos argumentos proporciona una contraseña para PDFs cifrados.

(authenticate [^PdfDocument doc ^String password])

Autentica un documento cifrado después de abrirlo; devuelve un booleano.

Consultas del documento

(page-count [^PdfDocument doc])

Devuelve el número de páginas del documento.

(producer [^PdfDocument doc])

Devuelve la cadena de metadatos /Producer, o nil si no está presente.

(creator [^PdfDocument doc])

Devuelve la cadena de metadatos /Creator, o nil si no está presente.

Extracción de texto

(extract-text [^PdfDocument doc page])

Extrae texto plano de una sola página, indexada desde cero.

(extract-structured [^PdfDocument doc page])

Extrae texto estructurado (spans/bloques con posicionamiento) de una sola página.

Conversión

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

Convierte el documento entero, o una sola página, a Markdown.

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

Convierte el documento entero, o una sola página, a HTML.

Renderizado

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

Renderiza una página a bytes de imagen PNG, opcionalmente a un DPI dado.

Búsqueda

(search [^PdfDocument doc ^String query])

Busca texto en el documento; devuelve un vector de resultados SearchMatch.

Formularios

(form-fields [^PdfDocument doc])

Devuelve un vector con los campos de formulario AcroForm del documento.

Acceso a páginas

(page ^PdfPage [^PdfDocument doc idx])

Obtiene un handle PdfPage para la página indexada desde cero.

(pages [^PdfDocument doc])

Devuelve un vector con todos los handles PdfPage del documento.


PdfPage — Extracción de elementos de página

Un handle de página obtenido mediante (pdf/page doc idx) o (pdf/pages doc). Cada función de extracción convierte el resultado List de Java en un vector de Clojure.

Elementos

(words [^PdfPage page])

Devuelve un vector con los elementos de palabra de la página.

(lines [^PdfPage page])

Devuelve un vector con los elementos de línea de la página.

(chars [^PdfPage page])

Devuelve un vector con los glifos por carácter de la página. (Este pdf/chars ensombrece intencionadamente a clojure.core/chars.)

(tables [^PdfPage page])

Devuelve un vector con las tablas detectadas en la página.

(images [^PdfPage page])

Devuelve un vector con los elementos de imagen de la página.

(annotations [^PdfPage page])

Devuelve un vector con las anotaciones de la página.

Texto de página

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

Devuelve el texto plano de la página, opcionalmente restringido a una región 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 — Edición y redacción

Un handle de edición mutable que se abre de forma independiente a PdfDocument. Permite depurar metadatos y aplicar redacción destructiva, y luego serializa el resultado a bytes. AutoCloseable.

(editor ^DocumentEditor [source])

Abre un DocumentEditor desde un array de bytes o una cadena con la ruta del sistema de archivos.

(scrub-metadata [^DocumentEditor ed])

Elimina los metadatos del documento (diccionario de información / XMP) in situ.

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

Marca una región rectangular BBox en una página indexada desde cero para su redacción.

(apply-redactions [^DocumentEditor ed])

Aplica todas las redacciones pendientes de forma destructiva, eliminando el contenido subyacente.

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

Serializa el documento editado a un array de bytes.

(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 — Extracción automática

Un extractor de conveniencia que elige automáticamente una estrategia de extracción para un PdfDocument.

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

Crea un AutoExtractor para el documento dado.

(auto-text [^AutoExtractor ax])

Extrae texto del documento entero usando la estrategia seleccionada automáticamente.

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

Ciclo de vida

Los tipos de handle son AutoCloseable; se prefiere with-open para una limpieza determinista. Estas funciones son válvulas de escape para usos que no pasan por with-open.

(close [resource])

Cierra cualquier handle (Pdf, PdfDocument, PdfPage, DocumentEditor, AutoExtractor).

(open? [resource])

Devuelve si el handle sigue abierto.

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

Ejemplo completo

(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 ofrece bindings nativos para todos los ecosistemas principales: Rust, Python, Node.js, WASM, C#, Golang, Java, PHP, Ruby, C++, Swift, Kotlin, Dart, R, Julia, Zig, Scala, Objective-C y Elixir.

Próximos pasos