CreatePdfTesseractOcrProvider 为 ApplyOcrSearchLayer 提供 IPdfOcrProvider;Tesseract 和 traineddata 是可选的外部依赖
明确指定库绝对路径、tessdata 目录和所需语言标识,例如 eng;DLL 架构必须匹配进程
TryCreatePdfTesseractOcrProvider 在 ErrorMessage 中返回依赖失败原因,Provider 保持 nil,不修改进程搜索路径
每次识别独立拥有原生 API 实例,将 BGRA alpha 合成到白色背景,解码 UTF-8 文本,并返回以图像左上角为原点的单词四边形,置信度归一化到 0–1
Default 选择页面分割模式 3 和引擎模式 3,时限为 60,000 ms,预算为 16,777,216 像素、100,000 个单词和 1,048,576 个文本字符
识别过程监控取消和时限;模型初始化没有原生取消 Callback,因此初始化前后会立即检查预算
失败调用丢弃部分输出,取消操作保留 EPdfOperationCancelled;API 不会悄悄添加不完整的可搜索文本
已验证 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;