PDF OCR — 让扫描件可以搜索
一份扫描 PDF 是一本假装是文档的相册:看着没问题,却什么都搜不到。这个工具补上缺失的文本层——把隐形的文字精确摆在扫描出来的词上面——这样搜索、选中、复制都能用,而扫描件本身分毫不动。
🔒 你的扫描件不会离开浏览器。OCR 引擎(Tesseract)以 WebAssembly 的形式在你的机器上运行;合同与对账单正是那种不该为了这种事上传到服务器的文件。
把一份扫描 PDF 拖到这里
英文文本 · 引擎约 6 MB,仅首次使用时加载 · 每页预计几秒钟
是叠加,不是重写
识别出的词会以隐形文本层(PDF 文本渲染模式 3)的形式,写在每一页扫描件上面,尺寸与位置按识别器给出的词框来定。页面图像逐字节保持原样——OCR 引擎猜错了,顶多让一次搜索落空,但绝不会损坏你看到的内容。已经有文本的页面会被整页跳过,因为再叠一层只会让每一次搜索命中都翻倍。
用诚实的数字,而不是变魔术
OCR 的质量跟着扫描件的质量走,所以结果如实报出实际发生的事:多少页拿到了文本层、识别出多少个词、平均置信度是多少。置信度低的词依然会保留——一个不太靠谱但能让文档搜得到的匹配,好过干干净净的一片空白——这个数字会告诉你该有多信任它。目前识别只支持英文;别的语言只差一个模型文件,等它们真正上线时,这一页会如实说明。
用这个工具前后的区别
加密的扫描件需要先解锁(同样在本地完成)。大的扫描文件做完 OCR 之后依然很大——文本层几乎不增加体积——所以如果这份文件要用邮件发出去,先让它变得可搜索,再压缩它。OCR 目前还没有面向 agent 的接口(MCP):在浏览器之外渲染 PDF 页面需要一个我们不打算强制要求的原生画布——这项工作的真实进度是写明的,不是藏起来的。
这个工具承诺的每一项行为(共 4 条)
OCR-001 已经有文本层的页面不会被动
一页如果已经有文本层,它本来就是可搜索的。在上面再叠一层 OCR 文字,会让每一次搜索命中都翻倍,所以这样的页面会被跳过并报出来——不会重新识别。
来源: yaktool 为这层 OCR 文字层定的工程规则;识别引擎是 Tesseract(tessdata_fast 英文模型)。
OCR-002 置信度低的词也会被写进去
叠加层保留每一个识别出的词,包括不确定的那些——一个不太靠谱但能让文档搜得到的匹配,好过干干净净的一片空白。平均置信度会报出来,让你知道有多不靠谱。
来源: yaktool 为这层 OCR 文字层定的工程规则;识别引擎是 Tesseract(tessdata_fast 英文模型)。
OCR-003 失败的页面会被列出来,不会被悄悄跳过
一页如果没能被渲染或识别出来,会在结果里被点名。输出文件依然包含这一页——只是没有它的文本层。
来源: yaktool 为这层 OCR 文字层定的工程规则;识别引擎是 Tesseract(tessdata_fast 英文模型)。
OCR-004 目前只有英文识别模型
识别用的是英文 tessdata_fast 模型。加别的语言只差一个数据文件,不用改代码——但老老实实做好一种语言,好过糊弄十二种。
来源: yaktool 为这层 OCR 文字层定的工程规则;识别引擎是 Tesseract(tessdata_fast 英文模型)。
引擎:通过 tesseract-wasm(BSD-2-Clause)调用的 Tesseract,英文 tessdata_fast 模型(Apache-2.0),两者都在首次使用时才加载。识别质量随扫描质量而变化;置信度数字是引擎自己给出的,原样报出。
关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →