Skip to content

Довідник Java API

PDF Oxide надає нативні біндинги для Java через шар JNI поверх ядра на Rust. Вбудована нативна бібліотека завантажується автоматично під час завантаження класу; готові нативні збірки постачаються для Linux, macOS і Windows (x86_64 та ARM64).

<dependency>
  <groupId>fyi.oxide</groupId>
  <artifactId>pdf-oxide</artifactId>
  <version>0.3.69</version>
</dependency>

Усі класи розташовані в пакеті fyi.oxide.pdf та його підпакетах (fyi.oxide.pdf.geometry, fyi.oxide.pdf.text, fyi.oxide.pdf.form тощо).

import fyi.oxide.pdf.PdfDocument;
import fyi.oxide.pdf.DocumentEditor;
import fyi.oxide.pdf.Pdf;

Життєвий цикл. PdfDocument, DocumentEditor і Pdf володіють нативною пам’яттю та реалізують AutoCloseable. Завжди використовуйте try-with-resources. Метод close() ідемпотентний; запасний механізм Cleaner звільняє витеклі дескриптори, але покладатися на нього для своєчасного очищення не можна.

Потокобезпека. Екземпляри документів не є потокобезпечними — відкривайте по одному на кожен робочий потік. Статичні помічники без стану (MarkdownConverter, PdfValidator, PdfPolicy) потокобезпечні.

Про Rust API див. Довідник Rust API. Про Python API див. Довідник Python API.


PdfDocument

Основна точка входу для читання PDF — відкриття, витягання, рендеринг і конвертація. Реалізує 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));
}

Відкриття (статичні фабричні методи)

static PdfDocument open(Path path)

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

static PdfDocument open(String path)

Відкрити PDF із рядка зі шляхом.

static PdfDocument open(byte[] bytes)

Відкрити PDF із байтів у пам’яті (наприклад, завантажених з S3 чи HTTP).

static PdfDocument open(Path path, String password)

Відкрити зашифрований PDF зі шляху, використовуючи пароль користувача або власника.

static PdfDocument open(String path, String password)

Відкрити зашифрований PDF із рядка зі шляхом, використовуючи пароль.

static PdfDocument open(byte[] bytes, String password)

Відкрити зашифрований PDF із байтів, використовуючи пароль.

static PdfDocument open(InputStream stream)

Відкрити PDF, прочитавши всі байти з InputStream.

Одноразові статичні помічники

static String extractText(String path)

Відкрити, витягти весь текст і закрити одним викликом (рядок зі шляхом).

static String extractText(Path path)

Відкрити, витягти весь текст і закрити одним викликом (Path).

Автентифікація

boolean authenticate(String password)

Автентифікувати зашифрований PDF після відкриття; повертає true в разі успіху.

boolean authenticate(byte[] password)

Автентифікувати за допомогою сирого байтового пароля.

Інформація про документ

int pageCount()

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

boolean isOpen()

Повернути true, якщо дескриптор документа все ще відкритий.

Витягання тексту

String extractText(int pageIndex)

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

String extractTextAuto(int pageIndex)

Витягти текст зі сторінки, автоматично переходячи до OCR для сканованих сторінок.

String extractStructured(int page)

Витягти структурований вміст сторінки (спани, рядки, макет) у вигляді рядка JSON.

Конвертація

String toMarkdown()

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

String toMarkdown(int pageIndex)

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

String toHtml()

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

String toHtml(int pageIndex)

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

Доступ до DOM

PdfPage page(int index)

Повернути лінивий дескриптор PdfPage для заданого індексу, що починається з нуля.

Рендеринг

byte[] render(int pageIndex)

Відрендерити сторінку в байти PNG зі стандартним DPI.

byte[] render(int pageIndex, int dpi)

Відрендерити сторінку в байти PNG із заданим DPI.

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

void close()

Звільнити базовий нативний дескриптор. Ідемпотентний.


DocumentEditor

Сесія редагування PDF із можливістю зміни: заповнення форм, редагування з вилученням (редакція), очищення метаданих і збереження. Мутатори повертають this для плавного ланцюжкового виклику. Реалізує 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"));
}

Відкриття (статичні фабричні методи)

static DocumentEditor open(Path path)

Відкрити PDF для редагування з Path.

static DocumentEditor open(String path)

Відкрити PDF для редагування з рядка зі шляхом.

static DocumentEditor open(byte[] bytes)

Відкрити PDF для редагування з байтів у пам’яті.

Поля форм

DocumentEditor setFormField(String name, String value)

Встановити значення текстового поля чи поля вибору за іменем; повертає this.

DocumentEditor setFormField(String name, boolean checked)

Встановити поле прапорця / перемикача за іменем; повертає this.

Редакція (вилучення вмісту)

DocumentEditor addRedaction(int pageIndex, BBox region)

Поставити в чергу редакцію прямокутної області на сторінці; повертає this.

int redactionCount(int pageIndex)

Повернути кількість редакцій, що очікують застосування, на сторінці.

int redactionCount()

Повернути загальну кількість редакцій, що очікують застосування, по всьому документу.

RedactResult applyRedactionsDestructive()

Застосувати всі поставлені в чергу редакції, остаточно видаливши закритий вміст; повертає RedactResult.

Метадані

DocumentEditor scrubMetadata()

Видалити інформацію про документ і XMP-метадані; повертає this.

Збереження

byte[] save()

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

void saveTo(Path out)

Записати відредагований документ у файл (повний перезапис).

byte[] saveIncremental()

Серіалізувати з використанням інкрементного оновлення, зберігаючи оригінальні байти.

void saveIncrementalTo(Path out)

Записати інкрементне оновлення у файл.

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

boolean isOpen()
void close()

Перевірити, чи відкритий редактор, і звільнити його нативний дескриптор.


Pdf

Створення нових PDF з Markdown, HTML або зображень, а також розбиття наявних PDF. Реалізує AutoCloseable.

import fyi.oxide.pdf.Pdf;

try (Pdf pdf = Pdf.fromMarkdown("# Report\n\nGenerated by PDF Oxide.")) {
    pdf.saveTo(Paths.get("report.pdf"));
}

Створення (статичні фабричні методи)

static Pdf fromMarkdown(String markdown)

Створити PDF із вмісту Markdown.

static Pdf fromHtml(String html)

Створити PDF із вмісту HTML.

static Pdf fromImages(List<byte[]> images)

Створити багатосторінковий PDF, по одній сторінці на кожне зображення (байти JPEG/PNG).

Розбиття

List<BookmarkSegment> planSplitByBookmarks(SplitByBookmarksOptions opts)

Обчислити план BookmarkSegment для розбиття на рівні закладок без запису результату.

List<byte[]> splitByBookmarks(SplitByBookmarksOptions opts)

Розбити PDF на налаштованому рівні закладок, повертаючи по одному масиву байтів на кожен сегмент.

static int planSplitByBookmarksCount(byte[] sourcePdf, int level)

Повернути, скільки сегментів дасть розбиття на рівні закладок, без відкриття Pdf.

static byte[][] splitByBookmarksFromBytes(byte[] sourcePdf, int level)

Розбити байти вихідного PDF на заданому рівні закладок одним статичним викликом.

Збереження та життєвий цикл

byte[] save()

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

void saveTo(Path out)

Записати PDF у файл.

boolean isOpen()
void close()

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


AutoExtractor

Адаптивне витягання, що класифікує кожну сторінку (текстовий шар чи скан) і застосовує OCR там, де це потрібно. Будується з відкритого PdfDocument.

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());
}

Створення (статичні фабричні методи)

static AutoExtractor of(PdfDocument doc)

Створити екстрактор зі стандартною конфігурацією.

static AutoExtractor of(PdfDocument doc, AutoExtractConfig config)

Створити екстрактор із явною AutoExtractConfig.

static AutoExtractor fast(PdfDocument doc)

Створити екстрактор, налаштований на швидкість (спочатку текстовий шар).

static AutoExtractor balanced(PdfDocument doc)

Створити екстрактор зі збалансованим пресетом швидкості/точності.

static AutoExtractor highFidelity(PdfDocument doc)

Створити екстрактор, налаштований на максимальну точність (агресивне OCR).

Витягання

String extractText()

Витягти звичайний текст по всьому документу.

String extractTextForPage(int pageIndex)

Витягти звичайний текст для однієї сторінки.

AutoResult extractDocument()

Виконати повне адаптивне витягання по документу; повертає AutoResult.

AutoResult extractAutoDocument()

Псевдонім extractDocument(), що повертає повний результат по документу.

AutoResult extractPage(int pageIndex)

Виконати адаптивне витягання для однієї сторінки.

AutoResult extractAutoPage(int pageIndex)

Псевдонім extractPage() для однієї сторінки.

Класифікація

ClassifyResult classifyDocument()

Класифікувати кожну сторінку без витягання; повертає ClassifyResult.

ClassifyResult classifyPage(int pageIndex)

Класифікувати одну сторінку.

Виведення JSON

String extractDocumentJson()

Витягти весь документ і серіалізувати результат у JSON.

String extractPageJson(int pageIndex)

Витягти сторінку і серіалізувати результат у JSON.

Аксесори

PdfDocument document()

Повернути базовий PdfDocument.

AutoExtractConfig config()

Повернути активну конфігурацію.


MarkdownConverter

Статичні помічники без стану, потокобезпечні, для конвертації в Markdown і HTML.

static String toMarkdown(PdfDocument doc, int pageIndex)

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

static String toMarkdown(PdfDocument doc)

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

static String toHtml(PdfDocument doc, int pageIndex)

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

static String toHtml(PdfDocument doc)

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


PdfSigner

Цифрове підписання та перевірка з використанням сховища ключів 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)

Завантажити підписувача з файлу сховища ключів PKCS#12.

static PdfSigner fromPkcs12(byte[] keystoreBytes, String password)

Завантажити підписувача з байтів сховища ключів PKCS#12 у пам’яті.

byte[] sign(byte[] pdf, SignOptions opts)

Підписати байти PDF налаштованим сертифікатом і SignOptions; повертає підписаний PDF.

boolean verify(byte[] pdf)

Перевірити підписи, вбудовані в PDF; повертає true, якщо вони дійсні.

static SignatureLevel classifyLevel(byte[] pdf)

Класифікувати рівень підпису PAdES у підписаному PDF; повертає SignatureLevel.


PdfValidator

Перевірка відповідності стандартам PDF/A, PDF/X і PDF/UA без стану, потокобезпечна.

static boolean isPdfA(PdfDocument doc, PdfALevel level)

Швидка булева перевірка відповідності PDF/A на заданому рівні.

static boolean isPdfUa(PdfDocument doc, PdfUaLevel level)

Швидка булева перевірка відповідності PDF/UA на заданому рівні.

static ValidationResult validatePdfA(PdfDocument doc, PdfALevel level)

Перевірити відповідність рівню PDF/A; повертає ValidationResult з порушеннями.

static ValidationResult validatePdfX(PdfDocument doc, PdfXLevel level)

Перевірити відповідність рівню PDF/X.

static ValidationResult validatePdfUa(PdfDocument doc, PdfUaLevel level)

Перевірити відповідність рівню PDF/UA.


PdfPolicy

Загальносистемна політика безпеки, що контролює, які криптографічні алгоритми дозволені. Потокобезпечні статичні аксесори.

static PolicyMode current()

Повернути поточний активний режим політики.

static void set(PolicyMode mode)

Встановити загальносистемний режим політики.

static PolicyMode compat()

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

static PolicyMode strict()

Повернути константу суворого режиму.

static PolicyMode fipsStrict()

Повернути константу суворого режиму FIPS.


PdfPage

Лінивий дескриптор сторінки, що повертається PdfDocument.page(int). Властивості звертаються до батьківського документа під час доступу.

PdfDocument parent()

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

int index()

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

BBox mediaBox()

Повернути MediaBox сторінки як BBox.

BBox cropBox()

Повернути CropBox сторінки.

double width()
double height()

Повернути ширину й висоту сторінки в пунктах PDF.

int rotation()

Повернути поворот сторінки в градусах (0, 90, 180, 270).

String text()

Витягти весь звичайний текст на сторінці.

String text(BBox region)

Витягти текст у межах прямокутної області.

List<TextWord> words()

Повернути текст по словах із обмежувальними рамками (TextWord).

List<TextLine> lines()

Повернути текст по рядках (TextLine).

List<TextChar> chars()

Повернути дані по символах (TextChar).


Типи геометрії

BBox

Незмінна осесиметрична обмежувальна рамка в координатах PDF.

BBox(double x0, double y0, double x1, double y1)
double x0()
double y0()
double x1()
double y1()
double width()
double height()

Rect

Прямокутник «позиція й розмір» (початок + ширина/висота).

Rect(double x, double y, double width, double height)
double x()
double y()
double width()
double height()
BBox toBBox()

Point

Двовимірна точка.

Point(double x, double y)
double x()
double y()

Color

8-бітовий колір RGBA.

Color(int r, int g, int b, int a)
Color(int r, int g, int b)
int r()
int g()
int b()
int a()

Типи тексту

TextChar

Один декодований символ із позицією та впевненістю OCR.

TextChar(int codepoint, BBox bbox, float confidence)
int codepoint()
BBox bbox()
float confidence()
String asString()

TextWord

Слово, розділене пробілами, з межами та впевненістю.

TextWord(String text, BBox bbox, float confidence)
String text()
BBox bbox()
float confidence()

TextLine

Рядок тексту, складений зі слів.

TextLine(String text, BBox bbox, List<TextWord> words)
String text()
BBox bbox()
List<TextWord> words()

TextSpan

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

TextSpan(String text, BBox bbox, TextStyle style)
String text()
BBox bbox()
TextStyle style()

TextStyle

Метадані шрифту та стилю для спана.

TextStyle(String font, double size, Color color, boolean bold, boolean italic)
double size()
Color color()
boolean bold()
boolean italic()

Типи таблиць

Table

Виявлена таблиця із сіткою клітинок.

Table(BBox bbox, int rows, int cols, List<TableCell> cells)
BBox bbox()
int rows()
int cols()
List<TableCell> cells()

TableCell

Окрема клітинка, включно з інформацією про об’єднання.

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()

Типи зображень

ExtractedImage

Растрове зображення, витягнуте зі сторінки.

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.


Типи пошуку

SearchOptions

Параметри пошуку, налаштовані через білдер.

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

Повний результат запиту.

SearchResult(String query, List<SearchMatch> matches)
String query()
List<SearchMatch> matches()
int count()
boolean isEmpty()

SearchMatch

Одне знайдене збігання зі сторінкою та розташуванням.

SearchMatch(int pageIndex, BBox bbox, String text)
int pageIndex()
BBox bbox()
String text()

Типи форм

FormField

Поле 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.


Типи анотацій

Annotation

Анотація сторінки.

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.


Типи метаданих

DocumentInfo

Стандартні поля словника інформації про документ.

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

Сирий пакет XMP-метаданих.

XmpMetadata(String xml)
String xml()
boolean isEmpty()

Типи автовитягання

AutoExtractConfig

Незмінна конфігурація для 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()

Методи 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

Результат адаптивного витягання.

String text()
Optional<String> markdown()
Optional<String> html()
ExtractReason reason()
double confidence()
boolean ocrUsed()
List<RegionResult> regions()
List<Integer> pagesNeedingOcr()

RegionResult

Результат витягання для окремої області.

int pageIndex()
BBox bbox()
String text()
ExtractReason reason()
double confidence()
boolean ocrUsed()
Optional<Table> table()

ClassifyResult

Результат класифікації сторінок.

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.


Типи підписів

SignOptions

Параметри підписання для 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)

Базові рівні PAdES: B_B (basic), B_T (з довіреною позначкою часу).


Типи розбиття

SplitByBookmarksOptions

Параметри розбиття на основі закладок, побудовані через білдер.

int level()
Optional<String> filenamePrefix()
static SplitByBookmarksOptions.Builder builder()

Builder: withLevel(int), withFilenamePrefix(String), build().

BookmarkSegment

Запланований вихідний сегмент розбиття за закладками.

BookmarkSegment(String title, int firstPage, int lastPage, String filename)
String title()
int firstPage()
int lastPage()
String filename()

Типи редакції

RedactResult

Результат DocumentEditor.applyRedactionsDestructive().

RedactResult(int regionsApplied, boolean oracleVerified)
int regionsApplied()
boolean oracleVerified()

Типи відповідності стандартам

ValidationResult

Результат перевірки PdfValidator.

ValidationResult(boolean valid, List<ValidationViolation> violations)
boolean valid()
List<ValidationViolation> violations()

ValidationViolation

Одне порушення відповідності.

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 — кожен надає int code().


Типи політики

PolicyMode (enum)

COMPAT, STRICT.

SecurityPolicy

Політика безпеки на рівні операції, побудована через білдер.

PolicyMode mode()
List<String> additionalAllow()
List<String> additionalDeny()
static SecurityPolicy.Builder builder()

Builder: withMode(PolicyMode), allow(String algId), deny(String algId), build().


Типи рендерингу

PixelFormat (enum)

RGBA_8888, RGB_888, GRAY_8.


Обробка помилок

Усі специфічні для PDF збої викидають PdfException (неперевірюваний RuntimeException) або один з його підкласів. Кожне виключення несе 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()

Підкласи

Виключення Викидається, коли
PdfParseException Файл некоректний або не є дійсним PDF
PdfEncryptedException PDF зашифрований, а пароль не надано чи він недійсний
PdfPermissionException Запитувана операція заборонена правами доступу до документа
PdfIoException Сталася базова помилка вводу-виводу
PdfOcrUnavailableException Запитувано OCR, але бекенд OCR недоступний
PdfSignatureException Операція підписання чи перевірки завершилася невдало
PdfInvalidStateException Операцію викликано на закритому чи недійсному дескрипторі
PdfUnsupportedException Запитувана функція не підтримується

PdfErrorKind (enum)

PARSE, ENCRYPTED, PERMISSION, IO, OCR_UNAVAILABLE, SIGNATURE, INVALID_STATE, UNSUPPORTED.


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

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

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