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;