Skip to content

Kotlin API リファレンス

PDF Oxide は、慣用的な Kotlin/JVM バインディング(Android 対応)を、成熟した fyi.oxide:pdf-oxide Java バインディングの薄いファサードとして提供します。この Java バインディングが唯一の JNI ネイティブブリッジ(pdf_oxide_jni クレート)を所有します。Kotlin モジュールが追加するネイティブコードはゼロです。Java の型(PdfDocumentPdfPdfPageDocumentEditorPdfSignerPdfValidatorAutoExtractor、およびジオメトリ / テキスト / テーブル / 検索の値型)を再エクスポートし、Kotlin らしい糖衣構文 — Optional<T> から T? への拡張関数と、AutoCloseable ハンドルに対する use { } — を重ねています。

// build.gradle.kts
dependencies {
    implementation("fyi.oxide:pdf-oxide-kotlin:0.3.69")
}

JNI ネイティブライブラリ(libpdf_oxide_jni)は同梱されていません。System.loadLibrary("pdf_oxide_jni") で読み込むか(.so/.dylibjava.library.path 上に、または Android では jniLibs/<abi>/ に配置)、-Dfyi.oxide.pdf.lib.path=<path> で Java の NativeLoader にパスを指定してください。

Java API については Java API リファレンス を参照してください。Rust API については Rust API リファレンス を参照してください。型の詳細については 型と列挙型 を参照してください。

import fyi.oxide.pdf.Pdf
import fyi.oxide.pdf.PdfDocument
import fyi.oxide.pdf.producerOrNull

Pdf.fromMarkdown("# Hello\n\nbody\n").use { pdf ->
    PdfDocument.open(pdf.save()).use { doc ->
        println(doc.pageCount())
        println(doc.extractText(0))
        println(doc.toMarkdown())
        println(doc.page(0).words().map { it.text() })
        println(doc.producerOrNull() ?: "(no producer)")   // Optional -> nullable
    }
}

すべてのハンドル(PdfDocumentPdfDocumentEditor)は AutoCloseable を実装しているため、Kotlin の use { } ブロックがネイティブメモリを確定的にクローズします。エラーは PdfException(およびそのサブクラス)として送出されます。例外 を参照してください。


PdfDocument

PDF への主要な読み取り専用エントリポイント — オープン、抽出、変換、レンダリング、検索、フォームフィールドの調査を行います。インスタンスはネイティブメモリを所有するため、必ずクローズする必要があります。use { } を利用してください。

import fyi.oxide.pdf.PdfDocument

ファクトリメソッド

PdfDocument.open(path: Path): PdfDocument

ファイルシステムのパスから PDF を開きます。

PdfDocument.open(path: String): PdfDocument

パス文字列から PDF を開きます。

PdfDocument.open(bytes: ByteArray): PdfDocument

メモリ上のバイト列(S3 からダウンロードした、HTTP で受信したなど)から PDF を開きます。

PdfDocument.open(path: Path, password: String): PdfDocument

暗号化された PDF を、ユーザーパスワードまたはオーナーパスワードを使ってパスから開きます。

PdfDocument.open(path: String, password: String): PdfDocument

暗号化された PDF を、パスワードを使ってパス文字列から開きます。

PdfDocument.open(bytes: ByteArray, password: String): PdfDocument

暗号化された PDF を、パスワードを使ってバイト列から開きます。

PdfDocument.open(stream: InputStream): PdfDocument

InputStream から全バイトを読み取って PDF を開きます。

静的ワンショット

PdfDocument.extractText(path: String): String
PdfDocument.extractText(path: Path): String

オープン・全テキスト抽出・クローズを 1 回の呼び出しで実行します — ライブハンドルが不要な単純なケース向けです。

認証

doc.authenticate(password: String): Boolean
doc.authenticate(password: ByteArray): Boolean

オープン後に暗号化されたドキュメントを認証します。パスワードが一致した場合は true を返します。

ドキュメント情報

doc.pageCount(): Int

ドキュメントのページ数です。

doc.producer(): Optional<String>
doc.creator(): Optional<String>

ドキュメントの /Producer および /Creator メタデータです。null ベースのアクセスには Kotlin の producerOrNull() / creatorOrNull() 拡張関数を使用してください。

val doc.isOpen: Boolean

ネイティブハンドルがまだ開いているかどうか(Java の isOpen() ゲッターをラップした Kotlin プロパティ)。

テキスト抽出

doc.extractText(pageIndex: Int): String

0 始まりの単一ページからプレーンテキストを抽出します。

doc.extractTextAuto(pageIndex: Int): String

戦略を自動選択してテキストを抽出します(OCR 機能が利用可能な場合、スキャンページに対しては OCR にフォールバックします)。

doc.extractStructured(page: Int): String

ページのテキストとレイアウトの構造化(JSON)表現を抽出します。

変換

doc.toMarkdown(): String
doc.toMarkdown(pageIndex: Int): String

ドキュメント全体または単一ページを Markdown に変換します。

doc.toHtml(): String
doc.toHtml(pageIndex: Int): String

ドキュメント全体または単一ページを HTML に変換します。

検索

doc.search(query: String): List<SearchMatch>

ドキュメントをリテラル文字列で検索します。境界ボックス付きのページごとのマッチを返します。

doc.search(query: String, caseInsensitive: Boolean, regex: Boolean, maxResults: Int): List<SearchMatch>

大文字小文字の区別、正規表現、結果数の上限(maxResults = 0 は上限なしを意味します)を指定して検索します。

フォーム

doc.formFields(): List<FormField>

すべての AcroForm フィールドを、その種類・値・ウィジェットの境界・ページインデックスとともに取得します。FormField を参照してください。

レンダリング

doc.render(pageIndex: Int): ByteArray
doc.render(pageIndex: Int, dpi: Int): ByteArray

ページをデフォルト DPI または指定 DPI で PNG 画像バイト列にレンダリングします。

ページアクセス

doc.page(index: Int): PdfPage

指定した 0 始まりインデックスに対する遅延評価の PdfPage ハンドルを取得します。

doc.pages(): List<PdfPage>

全ページをリストとして取得します。

doc.pagesStream(): Stream<PdfPage>

全ページを、流暢な処理のための Java Stream として取得します。

ライフサイクル

doc.close()

ネイティブメモリを解放します。冪等で、2 回目の呼び出しは何もしません。use { } の利用を推奨します。


PdfPage

PdfDocument.page()pages()pagesStream() から返される遅延評価のページハンドルです。すべてのアクセサはアクセス時に親ドキュメントへディスパッチします。

PdfDocument.open(bytes).use { doc ->
    val page = doc.page(0)
    val words = page.words()
    val tables = page.tables()
}

ジオメトリ

page.parent(): PdfDocument
page.index(): Int
page.mediaBox(): BBox
page.cropBox(): BBox
page.width(): Double
page.height(): Double
page.rotation(): Int

親ドキュメント、0 始まりインデックス、MediaBox / CropBox の矩形、PDF ポイント単位の寸法、および度単位のページ回転です。

コンテンツ抽出

page.text(): String

ページ上の全テキストを抽出します。

page.text(region: BBox): String

境界ボックス領域内のテキストを抽出します。

page.words(): List<TextWord>
page.lines(): List<TextLine>
page.chars(): List<TextChar>

単語・行・文字の粒度の構造化テキストです。

page.images(): List<ExtractedImage>
page.tables(): List<Table>
page.annotations(): List<Annotation>

抽出された画像、検出されたテーブル、ページの注釈です。


Pdf

ソース形式から PDF を作成し、ブックマークで分割し、シリアライズします。AutoCloseable を実装します。

import fyi.oxide.pdf.Pdf

ファクトリメソッド

Pdf.fromMarkdown(markdown: String): Pdf

Markdown コンテンツから PDF を作成します。

Pdf.fromHtml(html: String): Pdf

HTML コンテンツから PDF を作成します。

Pdf.fromImages(images: List<ByteArray>): Pdf

画像バイト配列のリストから複数ページの PDF を作成します(画像 1 枚につき 1 ページ)。

分割

pdf.planSplitByBookmarks(opts: SplitByBookmarksOptions): List<BookmarkSegment>

出力を生成せずにアウトラインのブックマークによる分割を計画します — 作成されるであろうセグメント(タイトル、ページ範囲、ファイル名)を返します。

pdf.splitByBookmarks(opts: SplitByBookmarksOptions): List<ByteArray>

ブックマークのレベルで複数の PDF に分割します。セグメントごとに 1 つのバイト配列を返します。

Pdf.planSplitByBookmarksCount(sourcePdf: ByteArray, level: Int): Int

静的ヘルパー: 指定レベルでのブックマーク分割が生成するセグメント数をカウントします。

Pdf.splitByBookmarksFromBytes(sourcePdf: ByteArray, level: Int): Array<ByteArray>

静的ヘルパー: ソース PDF のバイト列をブックマークのレベルで直接分割します。

保存

pdf.save(): ByteArray

PDF をバイト列にシリアライズします。

pdf.saveTo(out: Path)

PDF をファイルに書き出します。

val pdf.isOpen: Boolean
pdf.close()

ライフサイクル(Kotlin の isOpen プロパティと close())です。use { } の利用を推奨します。


DocumentEditor

墨消し、フォーム入力、メタデータの除去、増分保存を行う変更用エディタです。AutoCloseable を実装します。セッターメソッドは流暢なチェーンのために this を返します。

import fyi.oxide.pdf.DocumentEditor

ファクトリメソッド

DocumentEditor.open(path: Path): DocumentEditor
DocumentEditor.open(path: String): DocumentEditor
DocumentEditor.open(bytes: ByteArray): DocumentEditor

パスまたはメモリ上のバイト列から、編集用にドキュメントを開きます。

フォーム入力

editor.setFormField(name: String, value: String): DocumentEditor

完全修飾名でテキスト / 選択フィールドの値を設定します。

editor.setFormField(name: String, checked: Boolean): DocumentEditor

名前でチェックボックス / ラジオフィールドの状態を設定します。

墨消し

editor.addRedaction(pageIndex: Int, region: BBox): DocumentEditor

ページ上の矩形領域に対する墨消しをキューに追加します。

editor.redactionCount(pageIndex: Int): Int
editor.redactionCount(): Int

ページ単位、またはドキュメント全体でキューに入っている墨消しの数です。

editor.applyRedactionsDestructive(): RedactResult

キューに入っているすべての墨消しを恒久的に適用し、下層のコンテンツを除去します。適用件数とオラクル検証ステータスを持つ RedactResult を返します。

メタデータ

editor.scrubMetadata(): DocumentEditor

プライバシー保護のため、ドキュメントのメタデータ(Info 辞書、XMP)を除去します。

保存

editor.save(): ByteArray
editor.saveTo(out: Path)

編集済みドキュメントを完全な再書き込みでシリアライズします。

editor.saveIncremental(): ByteArray
editor.saveIncrementalTo(out: Path)

増分更新を使ってシリアライズします(変更を追記し、元のバイト列を保持します)。

val editor.isOpen: Boolean
editor.close()

ライフサイクルです。use { } の利用を推奨します。


AutoExtractor

ページを分類し(テキストレイヤー対スキャン)、必要に応じて OCR を適用し、信頼度スコア付きでテキスト / Markdown / HTML を出力する適応型抽出パイプラインです。

import fyi.oxide.pdf.AutoExtractor

ファクトリメソッド

AutoExtractor.of(doc: PdfDocument): AutoExtractor
AutoExtractor.of(doc: PdfDocument, config: AutoExtractConfig): AutoExtractor

ドキュメントに対する抽出器を作成します。必要に応じてカスタムの AutoExtractConfig を指定できます。

AutoExtractor.fast(doc: PdfDocument): AutoExtractor
AutoExtractor.balanced(doc: PdfDocument): AutoExtractor
AutoExtractor.highFidelity(doc: PdfDocument): AutoExtractor

速度と忠実度をトレードオフするプリセット構成です。

抽出

extractor.extractText(): String
extractor.extractTextForPage(pageIndex: Int): String

ドキュメント全体または単一ページのプレーンテキスト抽出です。

extractor.extractDocument(): AutoResult
extractor.extractPage(pageIndex: Int): AutoResult

AutoResult(テキスト、任意の Markdown/HTML、理由、信頼度、OCR フラグ、領域)を返す完全な適応型抽出です。

extractor.extractAutoDocument(): AutoResult
extractor.extractAutoPage(pageIndex: Int): AutoResult

ドキュメントレベルおよびページレベルの抽出の auto モード版です。

extractor.extractDocumentJson(): String
extractor.extractPageJson(pageIndex: Int): String

JSON 文字列としてシリアライズされた抽出結果です。

分類

extractor.classifyDocument(): ClassifyResult
extractor.classifyPage(pageIndex: Int): ClassifyResult

ドキュメントまたはページを分類し、ClassifyResult(ページごとのクラスに加えて、OCR が必要なページ・チャートを含むページ・暗号化されたページのリスト)を返します。

extractor.classifyPageKind(pageIndex: Int): PageClass
extractor.classifyDocumentKinds(): List<PageClass>

ページまたは全ページの PageClass(TEXT_LAYER / SCANNED / MIXED)を取得します。

アクセサ

extractor.document(): PdfDocument
extractor.config(): AutoExtractConfig

ラップされたドキュメントとアクティブな構成です。


MarkdownConverter

PdfDocument から Markdown または HTML への、ステートレスでスレッドセーフなコンバータです。

import fyi.oxide.pdf.MarkdownConverter

MarkdownConverter.toMarkdown(doc: PdfDocument): String
MarkdownConverter.toMarkdown(doc: PdfDocument, pageIndex: Int): String
MarkdownConverter.toHtml(doc: PdfDocument): String
MarkdownConverter.toHtml(doc: PdfDocument, pageIndex: Int): String

ドキュメント全体または単一ページを Markdown / HTML に変換します。


PdfSigner

PKCS#12 キーストアを使って PDF にデジタル署名し、検証します(PAdES B-B / B-T / B-LT レベル)。

import fyi.oxide.pdf.PdfSigner
PdfSigner.fromPkcs12(keystore: Path, password: String): PdfSigner
PdfSigner.fromPkcs12(keystoreBytes: ByteArray, password: String): PdfSigner

ディスク上またはメモリ上の PKCS#12 キーストアから署名者を読み込みます。

signer.sign(pdf: ByteArray, opts: SignOptions): ByteArray

指定した SignOptions(レベル、理由、場所、連絡先、TSA URL)で PDF バイト列に署名します。署名済みの PDF を返します。

signer.verify(pdf: ByteArray): Boolean

PDF 内のすべての署名を検証します。すべての署名が暗号学的に有効な場合は true を返します。

PdfSigner.classifyLevel(pdf: ByteArray): SignatureLevel

静的ヘルパー: 既存の署名済み PDF の PAdES 準拠レベルを検出します。


PdfValidator

PDF/A、PDF/X、PDF/UA の準拠レベルに対する、ステートレスでスレッドセーフな検証を行います。

import fyi.oxide.pdf.PdfValidator

PdfValidator.isPdfA(doc: PdfDocument, level: PdfALevel): Boolean
PdfValidator.isPdfUa(doc: PdfDocument, level: PdfUaLevel): Boolean

ブール値による簡易な準拠チェックです。

PdfValidator.validatePdfA(doc: PdfDocument, level: PdfALevel): ValidationResult
PdfValidator.validatePdfX(doc: PdfDocument, level: PdfXLevel): ValidationResult
PdfValidator.validatePdfUa(doc: PdfDocument, level: PdfUaLevel): ValidationResult

違反のリストを持つ ValidationResult を返す完全な検証です。


PdfPolicy

どの暗号アルゴリズムを許可するかを管理する、グローバルなセキュリティポリシー制御です。

import fyi.oxide.pdf.PdfPolicy

PdfPolicy.current(): PolicyMode
PdfPolicy.set(mode: PolicyMode)
PdfPolicy.compat(): PolicyMode
PdfPolicy.strict(): PolicyMode
PdfPolicy.fipsStrict(): PolicyMode

アクティブな PolicyMode を読み取りまたは設定し、組み込みの compat / strict / FIPS-strict モードを取得します。


Kotlin 拡張関数

Kotlin ファサードが追加する唯一の機能面: Optional<T> から T? へのコンバータと、汎用の orNull() ヘルパーです。fyi.oxide.pdf からインポートします。

fun <T : Any> Optional<T>.orNull(): T?

汎用: 空の Optionalnull になります。

fun PdfDocument.producerOrNull(): String?
fun PdfDocument.creatorOrNull(): String?

ドキュメントの /Producer および /Creator、または存在しない場合は null です。

fun FormField.valueOrNull(): String?
fun FormField.bboxOrNull(): BBox?

フォームフィールドの値とウィジェットの境界ボックス、または null です。

fun Annotation.contentsOrNull(): String?
fun Annotation.uriOrNull(): String?

注釈の /Contents とリンク先 URI、または null です。

fun AutoResult.markdownOrNull(): String?
fun AutoResult.htmlOrNull(): String?

自動抽出の Markdown / HTML レンダリング、または生成されなかった場合は null です。

fun ValidationViolation.pageIndexOrNull(): Int?

違反が適用されるページインデックス、またはドキュメントレベルのルールの場合は null です。


ジオメトリ型

BBox

PDF ポイント単位の軸並行境界ボックスです。

BBox(x0: Double, y0: Double, x1: Double, y1: Double)
アクセサ 説明
x0(), y0(), x1(), y1() Double 角の座標
width() Double x1 - x0
height() Double y1 - y0

Color

名前付き定数 Color.BLACKColor.WHITEColor.TRANSPARENT を持つ 8 ビット RGBA カラーです。

Color(r: Int, g: Int, b: Int, a: Int)
Color(r: Int, g: Int, b: Int)            // a = 255

アクセサ: r(): Intg(): Intb(): Inta(): Int

Point

Point(x: Double, y: Double)

アクセサ: x(): Doubley(): Double

Rect

位置とサイズで表す矩形です。

Rect(x: Double, y: Double, width: Double, height: Double)

アクセサ: x()y()width()height()(すべて Double)、および toBBox(): BBox


テキスト型

TextChar

抽出された 1 文字です。

TextChar(codepoint: Int, bbox: BBox, confidence: Float)

アクセサ: codepoint(): Intbbox(): BBoxconfidence(): FloatasString(): String

TextWord

TextWord(text: String, bbox: BBox, confidence: Float)

アクセサ: text(): Stringbbox(): BBoxconfidence(): Float

TextLine

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

アクセサ: text(): Stringbbox(): BBoxwords(): List<TextWord>

TextSpan

同一スタイルのテキストの連なりです。

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

アクセサ: text(): Stringbbox(): BBoxstyle(): TextStyle

TextStyle

TextStyle(font: String?, size: Double, color: Color, bold: Boolean, italic: Boolean)

アクセサ: font(): String?size(): Doublecolor(): Colorbold(): Booleanitalic(): Boolean


テーブル型

Table

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

アクセサ: bbox(): BBoxrows(): Intcols(): Intcells(): List<TableCell>

TableCell

TableCell(text: String, bbox: BBox, row: Int, col: Int, rowSpan: Int, colSpan: Int)

アクセサ: text(): Stringbbox(): BBoxrow(): Intcol(): IntrowSpan(): IntcolSpan(): Int


検索型

SearchMatch

SearchMatch(pageIndex: Int, bbox: BBox, text: String)

アクセサ: pageIndex(): Intbbox(): BBoxtext(): String

SearchResult

SearchResult(query: String, matches: List<SearchMatch>)

アクセサ: query(): Stringmatches(): List<SearchMatch>count(): IntisEmpty(): Boolean

SearchOptions

流暢なビルダーで構築する不変のオプションです。SearchOptions.DEFAULT がデフォルトのインスタンスです。

SearchOptions.builder()
    .withCaseSensitive(true)
    .withWholeWord(true)
    .withRegex(false)
    .withMaxResults(50)
    .build()

アクセサ: caseSensitive(): BooleanwholeWord(): Booleanregex(): BooleanmaxResults(): Optional<Int>。ビルダーメソッド: withCaseSensitive(Boolean)withWholeWord(Boolean)withRegex(Boolean)withMaxResults(Int) / withMaxResults(Int?)build()

注: 現時点では PdfDocument.search() には接続されていません。代わりに上記の caseInsensitive/regex/maxResults を取るオーバーロードを使用してください。


フォーム型

FormField

FormField(name: String, type: FormFieldType, value: String?, bbox: BBox?, pageIndex: Int)

アクセサ: name(): Stringtype(): FormFieldTypevalue(): Optional<String>bbox(): Optional<BBox>pageIndex(): Intnull ベースのアクセスには valueOrNull() / bboxOrNull() を使用してください。


注釈型

Annotation

Annotation(type: AnnotationType, pageIndex: Int, bbox: BBox, contents: String?, uri: String?)

アクセサ: type(): AnnotationTypepageIndex(): Intbbox(): BBoxcontents(): Optional<String>uri(): Optional<String>null ベースのアクセスには contentsOrNull() / uriOrNull() を使用してください。


画像型

ExtractedImage

ExtractedImage(bytes: ByteArray, format: ImageFormat, bbox: BBox, width: Int, height: Int)

アクセサ: bytes(): ByteArrayformat(): ImageFormatbbox(): BBoxwidth(): Intheight(): Int


自動抽出型

AutoResult

適応型抽出の結果です。

result.text(): String
result.markdown(): Optional<String>
result.html(): Optional<String>
result.reason(): ExtractReason
result.confidence(): Double
result.ocrUsed(): Boolean
result.regions(): List<RegionResult>
result.pagesNeedingOcr(): List<Int>

レンダリングされた出力への null ベースのアクセスには markdownOrNull() / htmlOrNull() を使用してください。

RegionResult

AutoResult 内の領域ごとの抽出詳細です。

region.pageIndex(): Int
region.bbox(): BBox
region.text(): String
region.reason(): ExtractReason
region.confidence(): Double
region.ocrUsed(): Boolean
region.table(): Optional<Table>

ClassifyResult

result.pages(): List<PageClass>
result.pagesNeedingOcr(): List<Int>
result.pagesWithChart(): List<Int>
result.pagesEncrypted(): List<Int>

AutoExtractConfig

流暢なビルダーで構築する不変の構成です。AutoExtractConfig.DEFAULT がデフォルトです。既存の構成を toBuilder() でビルダーに戻せます。

AutoExtractConfig.builder()
    .withMode(ExtractMode.AUTO)
    .withForceOcrPages(listOf(2, 5))
    .withMinOcrConfidence(0.6)
    .withOcrLanguages("eng", "deu")
    .withPasswords("secret")
    .withTopMarginFraction(0.05)
    .withBottomMarginFraction(0.05)
    .withAllowSingleColumnTables(true)
    .withOcrInlineImages(false)
    .withCancelToken("token-id")
    .build()

アクセサは各フィールドに対して Optional<...> を返します: mode()forceOcrPages()minOcrConfidence()ocrLanguages()passwords()topMarginFraction()bottomMarginFraction()allowSingleColumnTables()ocrInlineImages()cancelToken()。ビルダーのセッターはボックス化された null 許容版とプリミティブ版の両方のオーバーロードを受け付けます(例: withMinOcrConfidence(Double?)withTopMarginFraction(double))。加えて withOcrLanguages(vararg String) / withPasswords(vararg String) の可変長引数形式も用意されています。


コンプライアンス型

ValidationResult

ValidationResult(valid: Boolean, violations: List<ValidationViolation>)

アクセサ: valid(): Booleanviolations(): List<ValidationViolation>

ValidationViolation

ValidationViolation(ruleId: String, description: String, pageIndex: Int?)

アクセサ: ruleId(): Stringdescription(): StringpageIndex(): Optional<Int>null ベースのアクセスには pageIndexOrNull() を使用してください。


メタデータ型

DocumentInfo

DocumentInfo(/* title, author, subject, keywords, creator, producer, creationDate, modificationDate */)

アクセサはすべて Optional<String> を返します: title()author()subject()keywords()creator()producer()creationDate()modificationDate()

XmpMetadata

生の XMP パケットです。XmpMetadata.EMPTY が空のインスタンスです。

XmpMetadata(xml: String)

アクセサ: xml(): StringisEmpty(): Boolean


セキュリティ・墨消し型

SecurityPolicy

流暢なビルダーで構築する不変のポリシーです。

SecurityPolicy.builder()
    .withMode(PolicyMode.STRICT)
    .allow("algorithm-id")
    .deny("algorithm-id")
    .build()

アクセサ: mode(): PolicyModeadditionalAllow(): List<String>additionalDeny(): List<String>。ビルダーメソッド: withMode(PolicyMode)allow(String)deny(String)build()

RedactResult

RedactResult(regionsApplied: Int, oracleVerified: Boolean)

アクセサ: regionsApplied(): IntoracleVerified(): Boolean


署名型

SignOptions

流暢なビルダーで構築する不変の署名オプションです。

SignOptions.builder()
    .withLevel(SignatureLevel.B_T)
    .withReason("Approved")
    .withLocation("HQ")
    .withContactInfo("ops@example.com")
    .withTsaUrl("https://freetsa.org/tsr")
    .build()

アクセサ: level(): SignatureLevelreason(): Optional<String>location(): Optional<String>contactInfo(): Optional<String>tsaUrl(): Optional<String>。ビルダーメソッド: withLevelwithReasonwithLocationwithContactInfowithTsaUrlbuild()


分割型

BookmarkSegment

BookmarkSegment(title: String, firstPage: Int, lastPage: Int, filename: String)

アクセサ: title(): StringfirstPage(): IntlastPage(): Intfilename(): String

SplitByBookmarksOptions

流暢なビルダーで構築する不変のオプションです。

SplitByBookmarksOptions.builder()
    .withLevel(1)
    .withFilenamePrefix("chapter-")
    .build()

アクセサ: level(): IntfilenamePrefix(): Optional<String>。ビルダーメソッド: withLevel(Int)withFilenamePrefix(String?)build()


列挙型

列挙型
FormFieldType TEXT, CHECKBOX, RADIO, CHOICE
AnnotationType HIGHLIGHT, TEXT, LINK, STAMP, UNDERLINE, STRIKEOUT, SQUIGGLY, FREE_TEXT, LINE, SQUARE, CIRCLE, FILE_ATTACHMENT
ImageFormat JPEG, PNG, CCITT, RAW
ExtractMode TEXT_ONLY, AUTO
ExtractReason 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
PageClass TEXT_LAYER, SCANNED, MIXED
PixelFormat RGBA_8888, RGB_888, GRAY_8, PNG
PolicyMode COMPAT, STRICT
SignatureLevel B_B, B_T, B_LT
PdfALevel A_1B, A_1A, A_2B, A_2A, A_2U, A_3B, A_3A, A_3U, A_4, A_4E, A_4F
PdfXLevel 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, X_6N
PdfUaLevel UA_1, UA_2(各値は code(): Int を公開)
PdfErrorKind PARSE, ENCRYPTED, PERMISSION, IO, OCR_UNAVAILABLE, SIGNATURE, INVALID_STATE, UNSUPPORTED, OTHER

例外

すべての失敗は PdfException(非チェック例外)またはその種類別のサブクラスを送出します。kind() アクセサは PdfErrorKind を返します。

import fyi.oxide.pdf.exception.PdfException

try {
    PdfDocument.open(bytes).use { doc ->
        println(doc.extractText(0))
    }
} catch (e: PdfException) {
    println("PDF error [${e.kind()}]: ${e.message}")
}
PdfException(message: String)
PdfException(kind: PdfErrorKind, message: String)
PdfException(kind: PdfErrorKind, message: String, cause: Throwable)

e.kind(): PdfErrorKind
例外 原因
PdfParseException 不正または破損した PDF
PdfEncryptedException 有効なパスワードなしで開かれた暗号化ドキュメント
PdfPermissionException ドキュメントの権限によってブロックされた操作
PdfIoException 下層の I/O 障害
PdfOcrUnavailableException OCR が要求されたが ocr 機能が組み込まれていない
PdfSignatureException 署名または署名検証の失敗
PdfInvalidStateException 現在のハンドル状態では無効な操作
PdfUnsupportedException サポートされていない機能または形式

完全な例

import fyi.oxide.pdf.AutoExtractor
import fyi.oxide.pdf.DocumentEditor
import fyi.oxide.pdf.Pdf
import fyi.oxide.pdf.PdfDocument
import fyi.oxide.pdf.geometry.BBox
import fyi.oxide.pdf.producerOrNull

// --- Creation ---
val bytes = Pdf.fromMarkdown("# Report\n\nGenerated by PDF Oxide.").use { it.save() }

// --- Extraction ---
PdfDocument.open(bytes).use { doc ->
    println("Pages: ${doc.pageCount()}")
    println("Producer: ${doc.producerOrNull() ?: "(none)"}")

    val page = doc.page(0)
    println("Words: ${page.words().map { it.text() }}")
    println("Tables: ${page.tables().size}")

    // Search with options
    val matches = doc.search("Report", caseInsensitive = true, regex = false, maxResults = 0)
    matches.forEach { m -> println("p${m.pageIndex()} '${m.text()}' @ ${m.bbox()}") }

    // Adaptive extraction
    val result = AutoExtractor.balanced(doc).extractDocument()
    println("confidence=${result.confidence()} ocr=${result.ocrUsed()}")
}

// --- Editing: redact + fill forms ---
DocumentEditor.open(bytes).use { editor ->
    editor.setFormField("name", "Jane Doe")
        .addRedaction(0, BBox(72.0, 700.0, 272.0, 720.0))
        .scrubMetadata()
    val redaction = editor.applyRedactionsDestructive()
    println("Redacted ${redaction.regionsApplied()} regions")
    val out: ByteArray = editor.save()
}

他の言語のバインディング

PDF Oxide はあらゆる主要なエコシステム向けにネイティブバインディングを提供しています: Rust, Python, Node.js, WASM, C#, Golang, Java, PHP, Ruby, C++, Swift, Dart, R, Julia, Zig, Scala, Clojure, Objective-C, Elixir

次のステップ