PDFium Delphi Component Docs

オプションの Tesseract OCR プロバイダー

CreatePdfTesseractOcrProvider は ApplyOcrSearchLayer 向けの IPdfOcrProvider を提供します。Tesseract と traineddata は任意の外部依存です

ライブラリの絶対パス、tessdata ディレクトリ、eng など要求する言語識別子を指定します。DLL のアーキテクチャはプロセスと一致させてください

TryCreatePdfTesseractOcrProvider は依存関係の失敗を ErrorMessage に返し、Provider を nil にします。プロセスの検索パスは変更しません

認識の呼び出しごとに別のネイティブ API インスタンスを所有し、BGRA の alpha を白に合成して UTF-8 テキストをデコードします。単語の四角形は画像左上原点で返し、confidence は 0–1 に正規化します

Default はページ分割モード 3、エンジンモード 3、期限 60,000 ms、16,777,216 ピクセル、100,000 単語、1,048,576 文字を選びます

認識中はキャンセルと期限を監視します。モデルの初期化にはネイティブのキャンセル Callback がないので、初期化直前と直後に上限を確認します

失敗した呼び出しは部分結果を破棄し、キャンセルは EPdfOperationCancelled を維持します。不完全な検索用テキストを黙って追加することはありません

Delphi と FPC の Win32/Win64 で ABI 検証を済ませています。実際の Tesseract 5.5 認識、検索レイヤーの保存/再読み込み、描画が変わらないことは、両コンパイラの Win64 で検証済みです

ProviderOptions := TPdfTesseractOptions.Default;
Provider := CreatePdfTesseractOcrProvider(
  LibraryPath, TessdataDirectory, 'eng', ProviderOptions);
OcrOptions := TPdfOcrOptions.Default;
Pdf.ApplyOcrSearchLayer(Provider, OcrOptions, Report, CancellationToken);

公開宣言

type
  EPdfTesseractError = class(Exception);

  TPdfTesseractOptions = record
    // Tesseract PSM ordinals: 3 = automatic, 6 = block, 7 = single line
    PageSegmentationMode: Integer;
    // Tesseract OEM ordinals: 1 = LSTM, 3 = default
    EngineMode: Integer;
    TimeoutMilliseconds: Cardinal;
    MaxPixels: Int64;
    MaxWords: Integer;
    MaxTextCharacters: Integer;
    class function Default: TPdfTesseractOptions; static;
  end;

// Each recognition call owns a separate API instance; providers can be shared
// Libraries and traineddata remain optional, explicitly configured dependencies
function CreatePdfTesseractOcrProvider(const LibraryPath, TessdataDirectory,
  Languages: string; const Options: TPdfTesseractOptions): IPdfOcrProvider;

// Dependency errors are returned without changing the process search path
function TryCreatePdfTesseractOcrProvider(const LibraryPath, TessdataDirectory,
  Languages: string; const Options: TPdfTesseractOptions;
  out Provider: IPdfOcrProvider; out ErrorMessage: string): Boolean;