Справочник 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и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: заполнение форм, редактирование (redaction), очистка метаданных и сохранение. Мутаторы возвращают 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.
Редактирование (redaction)
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 из 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
Параметры поиска, настраиваемые через 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
Полный результат запроса.
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, создаваемая через builder.
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, создаваемые через builder.
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 (базовый), B_T (с доверенной меткой времени).
Типы разбиения
SplitByBookmarksOptions
Параметры разбиения по закладкам, создаваемые через builder.
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()
Типы редактирования (redaction)
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
Политика безопасности для отдельной операции, создаваемая через builder.
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.
Дальнейшие шаги
- Типы и перечисления — все общие типы и перечисления
- Справочник Page API — единообразная постраничная итерация для всех привязок
- Начало работы с Java — учебное руководство