可搜索 OCR 文本层
HotPDF 可以为应用程序提供的 OCR 引擎渲染选定的已加载页面,并原子地添加与每个识别单词对齐的可搜索不可见 Unicode 文本
引擎集成
使用应用程序可用的任何同步 OCR 提供程序实现 IHPDFOCREngine
引擎通过 THPDFOCRRequest 接收借用的 TBitmap、请求的 DPI、规范化页面旋转、媒体框坐标、剩余单词和 UTF-16 预算以及有效的取消令牌
单词框和可选基线使用左上位图像素坐标,引擎在 Recognize 返回后不得保留或释放借用的位图
可选的本地 Tesseract
从 v2.754.0 起,HPDFTesseractRecognition 提供显式选择的适配器,内置模板识别仍只覆盖原有字符集;库不会自动安装识别程序或下载语言模型
function HPDFCreateTesseractOCREngine(
const ExecutablePath, TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;
Engine := HPDFCreateTesseractOCREngine(
'C:\OCR\tesseract.exe', 'C:\OCR\tessdata', 'chi_sim');
Options := THPDFOCRTextLayerOptions.Default;
PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info);
可执行文件和语言模型必须由应用程序配置,chi_sim 对应简体中文模型;超时范围为 1 至 3,600,000 ms,默认 60 秒
适配器以隐藏子进程运行,读取 UTF-8 TSV 单词与像素坐标,过滤纯空白行,并限制输出文件为 64 MiB、错误输出为 1 MiB;失败时返回空单词数组,取消会由文本层管线报告为 otlsCancelled
可选的本地 RapidOCR
HPDFRapidOCRRecognition 可使用已安装 RapidOCR 与 ONNX Runtime 的 Python 环境,模型目录需包含 PP-OCRv4 的中文检测、识别及方向分类模型;应用程序另行部署仓库提供的 tools/OCR/rapidocr_tsv.py 桥接脚本
桥接脚本还需本机的 %WINDIR%/Fonts/arial.ttf 供 RapidOCR 结果容器使用;模型、Python 包与字体均需预先安装,缺失时返回错误
Engine := HPDFCreateRapidOCREngine(
'C:\Python\python.exe', 'C:\OCR\rapidocr_tsv.py', 'C:\OCR\models');
此工厂的第四个参数同样为超时毫秒数,默认 60 秒。桥接脚本显式读取本地模型并禁用自动下载,保留识别结果的汉字、数字及标点宽度,检查字符坐标与识别文本一致后输出 TSV;失败、超时与取消沿用同一事务和输出预算
质量取决于扫描分辨率、语言模型和内容。当前简体中文专项以字符错误率不超过 5%、漏字率不超过 2% 为目标,全角、半角标点逐字计错;已测试的 RapidOCR 配置在两段清晰正文与三段压力语料的三次重复中均通过自动验证,人工真值确认仍待完成,此结果不代表任意扫描件都能达到同等准确率
几何与搜索文本
HotPDF 反转渲染器页面变换,使单词基线在按 0、90、180 或 270 度旋转的页面上保持对齐
每个接受的单词以文本渲染模式 3 Tr、适配的水平文本缩放和感知旋转的文本矩阵写入,使页面栅格保持不变,同时保留可选择的文本顺序
共享的 Type 0 Identity-H 字体将有界的文档本地 CID 分配给 Unicode 标量,并写入完整的 ToUnicode 映射,包括补充字符的 UTF-16 代理目标
边界、取消与原子性
THPDFOCRTextLayerOptions.Default 启用 300 DPI 识别,跳过已公开文本的页面,并限制页数、像素、单词、UTF-16 单元和生成的内容字节
HotPDF 验证每个引擎结果并在开始一个写时复制图事务之前构建所有页面内容,因此引擎失败、无效几何、预算耗尽、取消或提交错误使已加载对象图保持不变
空的页面索引数组选择每个已加载页面,而重复的页面索引按首次出现顺序只识别一次
可选内容分组
设置 UseOptionalContentGroup 通过每个页面的 Resources/Properties 字典将所有生成的文本绑定到一个命名图层
此选项需要 PDF 1.5 并遵循 StrictVersionLock;默认将不可见文本保留在可选内容组之外以获得最广泛的兼容性
一致性说明
生成的搜索层有意使用未嵌入的合成字体,因为渲染模式 3 从不绘制字形
此 API 本身不产生 PDF/A 一致的 OCR 输出,因此 PDF/A 工作流应使用嵌入字体文本层路径,并在发布前运行请求的一致性验证