Referencia de la API de Java
PDF Oxide ofrece bindings nativos de Java mediante una capa JNI sobre el núcleo en Rust. La librería nativa incorporada se carga automáticamente al cargar la clase; se distribuyen binarios nativos precompilados para Linux, macOS y Windows (x86_64 y ARM64).
<dependency>
<groupId>fyi.oxide</groupId>
<artifactId>pdf-oxide</artifactId>
<version>0.3.69</version>
</dependency>
Todas las clases viven en el paquete fyi.oxide.pdf y sus subpaquetes (fyi.oxide.pdf.geometry, fyi.oxide.pdf.text, fyi.oxide.pdf.form, etc.).
import fyi.oxide.pdf.PdfDocument;
import fyi.oxide.pdf.DocumentEditor;
import fyi.oxide.pdf.Pdf;
Ciclo de vida.
PdfDocument,DocumentEditoryAutoCloseable. Usa siempre try-with-resources.close()es idempotente; un mecanismo de respaldo conCleanerlibera los handles filtrados, pero no debe usarse como garantía de una limpieza puntual.Seguridad entre hilos. Las instancias de documento no son seguras entre hilos: abre una por worker. Los helpers estáticos sin estado (
MarkdownConverter,PdfValidator,PdfPolicy) sí son seguros entre hilos.
Para la API de Rust, consulta la Referencia de la API de Rust. Para la API de Python, consulta la Referencia de la API de Python.
PdfDocument
El punto de entrada principal de solo lectura a un PDF: abrir, extraer, renderizar y convertir. Implementa AutoCloseable.
import fyi.oxide.pdf.PdfDocument;
import java.nio.file.Paths;
try (PdfDocument doc = PdfDocument.open(Paths.get("invoice.pdf"))) {
System.out.println(doc.extractText(0));
}
Apertura (métodos de fábrica estáticos)
static PdfDocument open(Path path)
Abre un PDF desde una ruta del sistema de archivos.
static PdfDocument open(String path)
Abre un PDF desde una ruta en forma de cadena.
static PdfDocument open(byte[] bytes)
Abre un PDF desde bytes en memoria (por ejemplo, descargado de S3 o HTTP).
static PdfDocument open(Path path, String password)
Abre un PDF cifrado desde una ruta con una contraseña de usuario o de propietario.
static PdfDocument open(String path, String password)
Abre un PDF cifrado desde una ruta en forma de cadena con una contraseña.
static PdfDocument open(byte[] bytes, String password)
Abre un PDF cifrado desde bytes con una contraseña.
static PdfDocument open(InputStream stream)
Abre un PDF leyendo todos los bytes de un InputStream.
Helpers estáticos de un solo uso
static String extractText(String path)
Abre, extrae todo el texto y cierra en una sola llamada (ruta en forma de cadena).
static String extractText(Path path)
Abre, extrae todo el texto y cierra en una sola llamada (Path).
Autenticación
boolean authenticate(String password)
Autentica un PDF cifrado tras abrirlo; devuelve true si tiene éxito.
boolean authenticate(byte[] password)
Autentica con una contraseña en bytes sin procesar.
Información del documento
int pageCount()
Devuelve el número de páginas del documento.
boolean isOpen()
Devuelve true si el handle del documento sigue abierto.
Extracción de texto
String extractText(int pageIndex)
Extrae texto plano de una sola página con índice de base cero.
String extractTextAuto(int pageIndex)
Extrae texto de una página, recurriendo automáticamente a OCR para páginas escaneadas.
String extractStructured(int page)
Extrae el contenido estructurado de la página (spans, líneas, layout) como una cadena JSON.
Conversión
String toMarkdown()
Convierte todo el documento a Markdown.
String toMarkdown(int pageIndex)
Convierte una sola página a Markdown.
String toHtml()
Convierte todo el documento a HTML.
String toHtml(int pageIndex)
Convierte una sola página a HTML.
Acceso al DOM
PdfPage page(int index)
Devuelve un handle perezoso de PdfPage para el índice de base cero indicado.
Renderizado
byte[] render(int pageIndex)
Renderiza una página a bytes PNG con el DPI predeterminado.
byte[] render(int pageIndex, int dpi)
Renderiza una página a bytes PNG con el DPI indicado.
Ciclo de vida
void close()
Libera el handle nativo subyacente. Idempotente.
DocumentEditor
Sesión de edición mutable sobre un PDF: relleno de formularios, redacción, limpieza de metadatos y guardado. Los mutadores devuelven this para encadenar de forma fluida. Implementa AutoCloseable.
import fyi.oxide.pdf.DocumentEditor;
try (DocumentEditor editor = DocumentEditor.open("form.pdf")) {
editor.setFormField("name", "Jane Doe")
.setFormField("subscribe", true)
.saveTo(Paths.get("filled.pdf"));
}
Apertura (métodos de fábrica estáticos)
static DocumentEditor open(Path path)
Abre un PDF para edición desde un Path.
static DocumentEditor open(String path)
Abre un PDF para edición desde una ruta en forma de cadena.
static DocumentEditor open(byte[] bytes)
Abre un PDF para edición desde bytes en memoria.
Campos de formulario
DocumentEditor setFormField(String name, String value)
Establece el valor de un campo de formulario de texto o de elección por su nombre; devuelve this.
DocumentEditor setFormField(String name, boolean checked)
Establece un campo de formulario de casilla / radio por su nombre; devuelve this.
Redacción
DocumentEditor addRedaction(int pageIndex, BBox region)
Pone en cola una redacción sobre una región rectangular de una página; devuelve this.
int redactionCount(int pageIndex)
Devuelve el número de redacciones pendientes en una página.
int redactionCount()
Devuelve el número total de redacciones pendientes en todo el documento.
RedactResult applyRedactionsDestructive()
Aplica todas las redacciones en cola, eliminando de forma permanente el contenido cubierto; devuelve un RedactResult.
Metadatos
DocumentEditor scrubMetadata()
Elimina la información del documento y los metadatos XMP; devuelve this.
Guardado
byte[] save()
Serializa el documento editado a un nuevo array de bytes (reescritura completa).
void saveTo(Path out)
Escribe el documento editado en un archivo (reescritura completa).
byte[] saveIncremental()
Serializa mediante una actualización incremental, conservando los bytes originales.
void saveIncrementalTo(Path out)
Escribe una actualización incremental en un archivo.
Ciclo de vida
boolean isOpen()
void close()
Comprueba si el editor está abierto y libera su handle nativo.
Crea nuevos PDF a partir de Markdown, HTML o imágenes, y divide PDF existentes. Implementa AutoCloseable.
import fyi.oxide.pdf.Pdf;
try (Pdf pdf = Pdf.fromMarkdown("# Report\n\nGenerated by PDF Oxide.")) {
pdf.saveTo(Paths.get("report.pdf"));
}
Creación (métodos de fábrica estáticos)
static Pdf fromMarkdown(String markdown)
Crea un PDF a partir de contenido Markdown.
static Pdf fromHtml(String html)
Crea un PDF a partir de contenido HTML.
static Pdf fromImages(List<byte[]> images)
Crea un PDF de varias páginas, una página por imagen (bytes JPEG/PNG).
División
List<BookmarkSegment> planSplitByBookmarks(SplitByBookmarksOptions opts)
Calcula el plan de BookmarkSegment para dividir a un nivel de marcador sin escribir la salida.
List<byte[]> splitByBookmarks(SplitByBookmarksOptions opts)
Divide el PDF al nivel de marcador configurado, devolviendo un array de bytes por segmento.
static int planSplitByBookmarksCount(byte[] sourcePdf, int level)
Devuelve cuántos segmentos produciría una división a nivel de marcador, sin abrir un Pdf.
static byte[][] splitByBookmarksFromBytes(byte[] sourcePdf, int level)
Divide los bytes del PDF de origen al nivel de marcador indicado en una sola llamada estática.
Guardado y ciclo de vida
byte[] save()
Serializa el PDF a un array de bytes.
void saveTo(Path out)
Escribe el PDF en un archivo.
boolean isOpen()
void close()
Comprueba si el handle está abierto y libera los recursos nativos.
AutoExtractor
Extracción adaptativa que clasifica cada página (capa de texto vs. escaneada) y aplica OCR donde es necesario. Se construye a partir de un PdfDocument abierto.
import fyi.oxide.pdf.AutoExtractor;
try (PdfDocument doc = PdfDocument.open("scan.pdf")) {
AutoExtractor extractor = AutoExtractor.balanced(doc);
AutoResult result = extractor.extractDocument();
System.out.println(result.text());
}
Construcción (métodos de fábrica estáticos)
static AutoExtractor of(PdfDocument doc)
Crea un extractor con la configuración predeterminada.
static AutoExtractor of(PdfDocument doc, AutoExtractConfig config)
Crea un extractor con una AutoExtractConfig explícita.
static AutoExtractor fast(PdfDocument doc)
Crea un extractor optimizado para la velocidad (capa de texto primero).
static AutoExtractor balanced(PdfDocument doc)
Crea un extractor con un preset equilibrado de velocidad/fidelidad.
static AutoExtractor highFidelity(PdfDocument doc)
Crea un extractor optimizado para la máxima fidelidad (OCR agresivo).
Extracción
String extractText()
Extrae texto plano de todo el documento.
String extractTextForPage(int pageIndex)
Extrae texto plano de una sola página.
AutoResult extractDocument()
Ejecuta la extracción adaptativa completa sobre el documento; devuelve un AutoResult.
AutoResult extractAutoDocument()
Alias de extractDocument() que devuelve el resultado completo del documento.
AutoResult extractPage(int pageIndex)
Ejecuta la extracción adaptativa de una sola página.
AutoResult extractAutoPage(int pageIndex)
Alias de extractPage() para una sola página.
Clasificación
ClassifyResult classifyDocument()
Clasifica todas las páginas sin extraer; devuelve un ClassifyResult.
ClassifyResult classifyPage(int pageIndex)
Clasifica una sola página.
Salida JSON
String extractDocumentJson()
Extrae todo el documento y serializa el resultado a JSON.
String extractPageJson(int pageIndex)
Extrae una página y serializa el resultado a JSON.
Accesores
PdfDocument document()
Devuelve el PdfDocument subyacente.
AutoExtractConfig config()
Devuelve la configuración activa.
MarkdownConverter
Helpers estáticos sin estado y seguros entre hilos para la conversión a Markdown y HTML.
static String toMarkdown(PdfDocument doc, int pageIndex)
Convierte una sola página a Markdown.
static String toMarkdown(PdfDocument doc)
Convierte todo el documento a Markdown.
static String toHtml(PdfDocument doc, int pageIndex)
Convierte una sola página a HTML.
static String toHtml(PdfDocument doc)
Convierte todo el documento a HTML.
PdfSigner
Firma y verificación digital usando un keystore PKCS#12.
import fyi.oxide.pdf.PdfSigner;
import fyi.oxide.pdf.signature.SignOptions;
PdfSigner signer = PdfSigner.fromPkcs12(Paths.get("cert.p12"), "keystore-pw");
byte[] signed = signer.sign(pdfBytes, SignOptions.builder().withReason("Approved").build());
static PdfSigner fromPkcs12(Path keystore, String password)
Carga un firmante desde un archivo de keystore PKCS#12.
static PdfSigner fromPkcs12(byte[] keystoreBytes, String password)
Carga un firmante desde bytes de keystore PKCS#12 en memoria.
byte[] sign(byte[] pdf, SignOptions opts)
Firma los bytes de un PDF con el certificado configurado y las SignOptions; devuelve el PDF firmado.
boolean verify(byte[] pdf)
Verifica las firmas incrustadas en un PDF; devuelve true si son válidas.
static SignatureLevel classifyLevel(byte[] pdf)
Clasifica el nivel de firma PAdES de un PDF firmado; devuelve un SignatureLevel.
PdfValidator
Validación de cumplimiento de PDF/A, PDF/X y PDF/UA, sin estado y segura entre hilos.
static boolean isPdfA(PdfDocument doc, PdfALevel level)
Comprobación booleana rápida de conformidad con PDF/A en un nivel dado.
static boolean isPdfUa(PdfDocument doc, PdfUaLevel level)
Comprobación booleana rápida de conformidad con PDF/UA en un nivel dado.
static ValidationResult validatePdfA(PdfDocument doc, PdfALevel level)
Valida frente a un nivel de PDF/A; devuelve un ValidationResult con las infracciones.
static ValidationResult validatePdfX(PdfDocument doc, PdfXLevel level)
Valida frente a un nivel de PDF/X.
static ValidationResult validatePdfUa(PdfDocument doc, PdfUaLevel level)
Valida frente a un nivel de PDF/UA.
PdfPolicy
Política de seguridad a nivel de proceso que controla qué algoritmos criptográficos están permitidos. Accesores estáticos seguros entre hilos.
static PolicyMode current()
Devuelve el modo de política actualmente activo.
static void set(PolicyMode mode)
Establece el modo de política a nivel de proceso.
static PolicyMode compat()
Devuelve la constante del modo de compatibilidad permisivo.
static PolicyMode strict()
Devuelve la constante del modo estricto.
static PolicyMode fipsStrict()
Devuelve la constante del modo FIPS estricto.
PdfPage
Un handle de página perezoso devuelto por PdfDocument.page(int). Las propiedades se delegan al documento padre en el momento del acceso.
PdfDocument parent()
Devuelve el documento propietario.
int index()
Devuelve el índice de base cero de la página.
BBox mediaBox()
Devuelve el MediaBox de la página como un BBox.
BBox cropBox()
Devuelve el CropBox de la página.
double width()
double height()
Devuelve el ancho y el alto de la página en puntos PDF.
int rotation()
Devuelve la rotación de la página en grados (0, 90, 180, 270).
String text()
Extrae todo el texto plano de la página.
String text(BBox region)
Extrae el texto dentro de una región rectangular.
List<TextWord> words()
Devuelve el texto por palabra con sus bounding boxes (TextWord).
List<TextLine> lines()
Devuelve el texto por línea (TextLine).
List<TextChar> chars()
Devuelve los datos por carácter (TextChar).
Tipos de geometría
BBox
Bounding box inmutable y alineado con los ejes en coordenadas PDF.
BBox(double x0, double y0, double x1, double y1)
double x0()
double y0()
double x1()
double y1()
double width()
double height()
Rect
Rectángulo de posición y tamaño (origen + ancho/alto).
Rect(double x, double y, double width, double height)
double x()
double y()
double width()
double height()
BBox toBBox()
Point
Un punto 2D.
Point(double x, double y)
double x()
double y()
Color
Color RGBA de 8 bits.
Color(int r, int g, int b, int a)
Color(int r, int g, int b)
int r()
int g()
int b()
int a()
Tipos de texto
TextChar
Un único carácter decodificado con posición y confianza de OCR.
TextChar(int codepoint, BBox bbox, float confidence)
int codepoint()
BBox bbox()
float confidence()
String asString()
TextWord
Una palabra delimitada por espacios en blanco, con sus límites y su confianza.
TextWord(String text, BBox bbox, float confidence)
String text()
BBox bbox()
float confidence()
TextLine
Una línea de texto compuesta por palabras.
TextLine(String text, BBox bbox, List<TextWord> words)
String text()
BBox bbox()
List<TextWord> words()
TextSpan
Un fragmento de texto con un estilo idéntico.
TextSpan(String text, BBox bbox, TextStyle style)
String text()
BBox bbox()
TextStyle style()
TextStyle
Metadatos de fuente y estilo de un span.
TextStyle(String font, double size, Color color, boolean bold, boolean italic)
double size()
Color color()
boolean bold()
boolean italic()
Tipos de tabla
Table
Una tabla detectada con su rejilla de celdas.
Table(BBox bbox, int rows, int cols, List<TableCell> cells)
BBox bbox()
int rows()
int cols()
List<TableCell> cells()
TableCell
Una sola celda, incluyendo la información de span.
TableCell(String text, BBox bbox, int row, int col, int rowSpan, int colSpan)
String text()
BBox bbox()
int row()
int col()
int rowSpan()
int colSpan()
Tipos de imagen
ExtractedImage
Una imagen ráster extraída de una página.
ExtractedImage(byte[] bytes, ImageFormat format, BBox bbox, int width, int height)
byte[] bytes()
ImageFormat format()
BBox bbox()
int width()
int height()
ImageFormat (enum)
JPEG, PNG, CCITT, RAW.
Tipos de búsqueda
SearchOptions
Parámetros de búsqueda configurados mediante builder.
boolean caseSensitive()
boolean wholeWord()
boolean regex()
Optional<Integer> maxResults()
static SearchOptions.Builder builder()
Builder: withCaseSensitive(boolean), withWholeWord(boolean), withRegex(boolean), withMaxResults(Integer), withMaxResults(int), build().
SearchResult
El resultado completo de una consulta.
SearchResult(String query, List<SearchMatch> matches)
String query()
List<SearchMatch> matches()
int count()
boolean isEmpty()
SearchMatch
Una sola coincidencia con su página y ubicación.
SearchMatch(int pageIndex, BBox bbox, String text)
int pageIndex()
BBox bbox()
String text()
Tipos de formulario
FormField
Un campo de AcroForm.
FormField(String name, FormFieldType type, String value, BBox bbox, int pageIndex)
String name()
FormFieldType type()
Optional<String> value()
Optional<BBox> bbox()
int pageIndex()
FormFieldType (enum)
TEXT, CHECKBOX, RADIO, CHOICE.
Tipos de anotación
Annotation
Una anotación de página.
Annotation(AnnotationType type, int pageIndex, BBox bbox, String contents, String uri)
AnnotationType type()
int pageIndex()
BBox bbox()
Optional<String> contents()
Optional<String> uri()
AnnotationType (enum)
HIGHLIGHT, TEXT, LINK, STAMP, UNDERLINE, STRIKEOUT, SQUIGGLY, FREE_TEXT, LINE, SQUARE, CIRCLE, FILE_ATTACHMENT.
Tipos de metadatos
DocumentInfo
Campos estándar del diccionario de información del documento.
Optional<String> title()
Optional<String> author()
Optional<String> subject()
Optional<String> keywords()
Optional<String> creator()
Optional<String> producer()
Optional<String> creationDate()
Optional<String> modificationDate()
XmpMetadata
Paquete de metadatos XMP sin procesar.
XmpMetadata(String xml)
String xml()
boolean isEmpty()
Tipos de extracción automática
AutoExtractConfig
Configuración inmutable y construida mediante builder para AutoExtractor.
Optional<ExtractMode> mode()
Optional<List<Integer>> forceOcrPages()
Optional<Double> minOcrConfidence()
Optional<List<String>> ocrLanguages()
Optional<List<String>> passwords()
Optional<Double> topMarginFraction()
Optional<Double> bottomMarginFraction()
Optional<Boolean> allowSingleColumnTables()
Optional<Boolean> ocrInlineImages()
Optional<String> cancelToken()
static AutoExtractConfig.Builder builder()
AutoExtractConfig.Builder toBuilder()
Métodos del Builder: withMode(ExtractMode), withForceOcrPages(List<Integer>), withMinOcrConfidence(Double), withOcrLanguages(List<String>), withOcrLanguages(String...), withPasswords(List<String>), withPasswords(String...), withTopMarginFraction(Double), withTopMarginFraction(double), withBottomMarginFraction(Double), withBottomMarginFraction(double), withAllowSingleColumnTables(Boolean), withAllowSingleColumnTables(boolean), withOcrInlineImages(Boolean), withOcrInlineImages(boolean), withCancelToken(String), build().
AutoResult
Resultado de una extracción adaptativa.
String text()
Optional<String> markdown()
Optional<String> html()
ExtractReason reason()
double confidence()
boolean ocrUsed()
List<RegionResult> regions()
List<Integer> pagesNeedingOcr()
RegionResult
Resultado de extracción por región.
int pageIndex()
BBox bbox()
String text()
ExtractReason reason()
double confidence()
boolean ocrUsed()
Optional<Table> table()
ClassifyResult
Resultado de la clasificación de páginas.
List<PageClass> pages()
List<Integer> pagesNeedingOcr()
List<Integer> pagesWithChart()
List<Integer> pagesEncrypted()
ExtractMode (enum)
TEXT_ONLY, AUTO.
PageClass (enum)
TEXT_LAYER, SCANNED, MIXED.
ExtractReason (enum)
OK, SCANNED_NO_TEXT_LAYER, GLYPH_MAPPING_MISSING, ENCRYPTED_NO_EXTRACT_PERMISSION, IMAGE_TABLE_NO_STRUCTURE, CHART_NOT_TRANSCRIBED, OCR_REQUESTED_BUT_UNAVAILABLE, OCR_LOW_CONFIDENCE, EMPTY.
Tipos de firma
SignOptions
Parámetros de firma construidos mediante builder para PdfSigner.
SignatureLevel level()
Optional<String> reason()
Optional<String> location()
Optional<String> contactInfo()
Optional<String> tsaUrl()
static SignOptions.Builder builder()
Builder: withLevel(SignatureLevel), withReason(String), withLocation(String), withContactInfo(String), withTsaUrl(String), build().
SignatureLevel (enum)
Niveles de base PAdES: B_B (básico), B_T (con marca de tiempo de confianza).
Tipos de división
SplitByBookmarksOptions
Opciones construidas mediante builder para la división basada en marcadores.
int level()
Optional<String> filenamePrefix()
static SplitByBookmarksOptions.Builder builder()
Builder: withLevel(int), withFilenamePrefix(String), build().
BookmarkSegment
Un segmento de salida planificado a partir de una división por marcadores.
BookmarkSegment(String title, int firstPage, int lastPage, String filename)
String title()
int firstPage()
int lastPage()
String filename()
Tipos de redacción
RedactResult
Resultado de DocumentEditor.applyRedactionsDestructive().
RedactResult(int regionsApplied, boolean oracleVerified)
int regionsApplied()
boolean oracleVerified()
Tipos de cumplimiento normativo
ValidationResult
Resultado de una comprobación de PdfValidator.
ValidationResult(boolean valid, List<ValidationViolation> violations)
boolean valid()
List<ValidationViolation> violations()
ValidationViolation
Una sola infracción de conformidad.
ValidationViolation(String ruleId, String description, Integer pageIndex)
String ruleId()
String description()
Optional<Integer> pageIndex()
PdfALevel (enum)
A_1B, A_1A, A_2B, A_2A, A_2U, A_3B, A_3A, A_3U, A_4, A_4E.
PdfXLevel (enum)
X_1A_2001, X_1A_2003, X_3_2002, X_3_2003, X_4, X_4P, X_5G, X_5N, X_5PG, X_6, X_6P.
PdfUaLevel (enum)
UA_1, UA_2: cada uno expone int code().
Tipos de política
PolicyMode (enum)
COMPAT, STRICT.
SecurityPolicy
Política de seguridad por operación construida mediante builder.
PolicyMode mode()
List<String> additionalAllow()
List<String> additionalDeny()
static SecurityPolicy.Builder builder()
Builder: withMode(PolicyMode), allow(String algId), deny(String algId), build().
Tipos de renderizado
PixelFormat (enum)
RGBA_8888, RGB_888, GRAY_8.
Manejo de errores
Todos los fallos específicos de PDF lanzan PdfException (una RuntimeException no comprobada) o alguna de sus subclases. Cada excepción lleva un PdfErrorKind kind().
import fyi.oxide.pdf.PdfDocument;
import fyi.oxide.pdf.exception.PdfException;
try (PdfDocument doc = PdfDocument.open("file.pdf")) {
String text = doc.extractText(0);
} catch (PdfException e) {
System.err.println(e.kind() + ": " + e.getMessage());
}
PdfException
PdfException(String message)
PdfException(PdfErrorKind kind, String message)
PdfException(PdfErrorKind kind, String message, Throwable cause)
PdfErrorKind kind()
Subclases
| Excepción | Se lanza cuando |
|---|---|
PdfParseException |
El archivo está malformado o no es un PDF válido |
PdfEncryptedException |
El PDF está cifrado y no se proporcionó contraseña o era inválida |
PdfPermissionException |
La operación solicitada está denegada por los permisos del documento |
PdfIoException |
Se produjo un error de E/S subyacente |
PdfOcrUnavailableException |
Se solicitó OCR pero el backend de OCR no está disponible |
PdfSignatureException |
Falló una operación de firma o verificación |
PdfInvalidStateException |
Se llamó a una operación sobre un handle cerrado o inválido |
PdfUnsupportedException |
La función solicitada no está soportada |
PdfErrorKind (enum)
PARSE, ENCRYPTED, PERMISSION, IO, OCR_UNAVAILABLE, SIGNATURE, INVALID_STATE, UNSUPPORTED.
Ejemplo completo
import fyi.oxide.pdf.PdfDocument;
import fyi.oxide.pdf.DocumentEditor;
import fyi.oxide.pdf.Pdf;
import fyi.oxide.pdf.AutoExtractor;
import fyi.oxide.pdf.auto.AutoResult;
import java.nio.file.Paths;
public class Example {
public static void main(String[] args) throws Exception {
// --- Extraction ---
try (PdfDocument doc = PdfDocument.open(Paths.get("input.pdf"))) {
System.out.println("Pages: " + doc.pageCount());
for (int i = 0; i < doc.pageCount(); i++) {
System.out.println(doc.extractText(i));
}
String markdown = doc.toMarkdown();
// Adaptive extraction with OCR fallback
AutoResult auto = AutoExtractor.balanced(doc).extractDocument();
System.out.println("OCR used: " + auto.ocrUsed());
}
// --- Creation ---
try (Pdf pdf = Pdf.fromMarkdown("# Report\n\nGenerated by PDF Oxide.")) {
pdf.saveTo(Paths.get("report.pdf"));
}
// --- Editing ---
try (DocumentEditor editor = DocumentEditor.open("form.pdf")) {
editor.setFormField("name", "Jane Doe")
.setFormField("subscribe", true)
.scrubMetadata()
.saveTo(Paths.get("filled.pdf"));
}
}
}
Other Language Bindings
PDF Oxide ofrece bindings nativos para todos los ecosistemas principales: Rust, Python, Node.js, WASM, C#, Golang, PHP, Ruby, C++, Swift, Kotlin, Dart, R, Julia, Zig, Scala, Clojure, Objective-C y Elixir.
Siguientes pasos
- Tipos y enums — todos los tipos y enums compartidos
- Referencia de la API Page — iteración de página consistente entre bindings
- Primeros pasos con Java — tutorial