扫描版 PDF 变可搜索文档:PdfCraft OCR 完整教程
扫描版 PDF 变可搜索文档:PdfCraft OCR 完整教程
【免费下载链接】pdfcraftPdfCraft: An open-source PDF reader and editor written by scratch in pure Rust项目地址: https://gitcode.com/gh_mirrors/pr/pdfcraft
扫描件里的字选不中、搜不到、复制不了,这是纸质档案数字化后最常见的糟心事。PdfCraft 的Scan & OCR(扫描与OCR)功能把扫描版 PDF 变成可搜索、可复制的文档,免费、离线运行,识别结果还能随时撤销。
功能速览
| 项目 | 说明 |
|---|---|
| 输入类型 | 扫描版、纯图片的 PDF 页面 |
| 输出方式 | Searchable Image (Exact):每个单词上方写入不可见文本层,原图一个像素都不动 |
| 运行环境 | 识别模型装在本地,全程在你的机器上完成,不上传任何文件 |
| 语言支持 | 目前仅拉丁字母(English / en)⚠️ |
| 撤销 | 识别结果是一步可撤销编辑,Ctrl+Z 整体回退 |
工作原理
可以把 PDF 页面看成两层:底下是图,上面是字。扫描件的“字”只是像素,所以选不出来。PdfCraft OCR 做的事情,相当于在图上盖一层看不见的字:模型找出每个单词的位置和内容,然后在每个单词上方写入一层不可见文本(PDF 渲染模式 3)。原图保持原样,页面从此能搜、能选、能被屏幕阅读器朗读。这套做法与 Acrobat 的 “Searchable Image (Exact)” 一致。
实现上,核心识别在 crates/ocr/src/lib.rs,页面渲染与文本层写入逻辑在 crates/engine/src/ocr.rs。
一次性准备
识别依赖两个本地模型:文字检测 + 文字识别,只需获取一次。
- 在仓库根目录运行
cargo xtask models,模型会下载到assets/models/; - 也可以把模型文件放到任意目录,再设置环境变量
PDFCRAFT_MODELS指向它。
模型文件名为text-detection.onnx与text-recognition.onnx(旧版.rten同样名文件也能被识别)。应用会自动找到完整的一对。
⚠️ 目前模型只读拉丁字母(英语等无重音拉丁文),中文、日文扫描件暂不适用。
单文件实操
开始识别与选页
打开 PdfCraft,载入你的扫描件。在左侧工具栏点进Scan & OCR,进入Recognize Text(识别文本)对话框,界面逻辑在 crates/ui-egui/src/workflows/ocr_ui.rs。
先选识别范围,共三个选项:
| 页码范围 | 含义 |
|---|---|
| All pages | 全部页面 |
| Current page | 仅当前页 |
| From X to Y | 指定页码范围 |
💡 小文档可以先只跑当前页,效果满意再跑全文。
参数与进度
参数一共三处,默认值就能用:
| 参数 | 说明 | 建议值 |
|---|---|---|
| Document language | 文档语言 | English(en) |
| Output | 输出方式 | Searchable Image (Exact),原图不变 |
| Downsample to | 页面渲染分辨率 | 默认 300 dpi;模糊扫描件可提到 600 dpi |
点Recognize text开始。识别在后台线程运行,界面提示“第 X 页 / 共 Y 页”的进度,中途可点Cancel取消,已识别的页面会保留。速度大约每秒一页。完成后提示“识别了 N 个单词 / M 页”,结果作为一步可撤销的编辑写入文档,Ctrl+Z 即可回退。
效果验证
打开顶部搜索框,输入刚才看过的某个关键词:原本搜不到的扫描件,现在能高亮定位每一处匹配位置。用鼠标在页面上拖一下,选中的是真正的文字,可以直接复制,而不是一张图。
整份文档的排版与图像质量保持不变,识别后照常加注释、导出都行。
批量与自动化
手头的扫描件不止一个?同一入口下还有“识别多个文件中的文本”功能:选好文件夹后,PdfCraft 逐个识别每个 PDF,以同名文件写出可搜索版本,最后汇总“在 N 个文件中识别了 M 个单词”。批量逻辑在 crates/ui-egui/src/workflows/ocr_ui.rs,底层单文件函数recognize_file位于 crates/engine/src/ocr.rs。
除了图形界面,PdfCraft 还向脚本和 Agent 暴露了三个 OCR 命令(工具定义在 crates/automation/src/tools.rs):
| 命令 | 作用 |
|---|---|
ocr.recognize | 对当前文档执行识别 |
ocr.recognize_batch | 多文件批量识别,输出到指定文件夹 |
ocr.status | 查询模型是否已安装、支持哪些语言 |
避坑清单
| 现象 | 原因 | 处理 |
|---|---|---|
| 提示 “Text recognition isn't installed” | 模型文件缺失 | 重装 PdfCraft,或设置PDFCRAFT_MODELS指向模型目录 |
| 完成后提示“N 页已有文字” | 默认跳过已含真实文字的页面,避免重复识别 | 正常行为;确需重扫可勾选 “Also recognize pages that already have text” |
| 识别结果不满意 | 误识别或参数不合适 | Ctrl+Z 整体撤销,或只选指定页码范围重跑 |
| 中文页面识别为空 | 当前模型只读拉丁字母 | 暂不支持,可留意 ROADMAP |
| 模糊扫描件识别率低 | 渲染分辨率偏低 | Downsample to 调到 600 dpi 再试 |
收尾
流程一句话:打开文档 → 进 Scan & OCR → 选页设参 → 点识别 → 搜索验证。整批档案建议直接走多文件批量识别,一次跑完。
【免费下载链接】pdfcraftPdfCraft: An open-source PDF reader and editor written by scratch in pure Rust项目地址: https://gitcode.com/gh_mirrors/pr/pdfcraft
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考