Windows PDF OCR 教程:用 Docker 把扫描件变成可搜索文档

本篇目录 6 节
  1. 一、确认镜像和语言支持
  2. 二、缺少中文包时建立自己的镜像
  3. 三、通过二进制管道生成新文件
  4. 四、验收 Windows PDF OCR 结果
  5. 五、交给 AI 阅读前再做一次检查
  6. 六、常见问题与排错

Windows PDF OCR 可以先在本机给扫描件补上文字层,再交给检索或 AI 阅读工具。本文使用 OCRmyPDF 的 Docker 镜像,避免在 Windows 手工安装一长串依赖。需要已运行的 Docker Desktop、Python,以及一份你有权处理的扫描 PDF。先用两页样本验证,不直接处理唯一原件或加密档案。

资料与学习系列主题示意图
系列主题示意图;操作步骤以正文与官方界面为准。

一、确认镜像和语言支持

打开 PowerShell,检查 Docker 并下载官方文档推荐的 Alpine 镜像。镜像版本会更新,长期使用时记录实际版本,不把默认标签当作永远不变的环境。

docker version
docker pull jbarlow83/ocrmypdf-alpine
docker run --rm jbarlow83/ocrmypdf-alpine --version
docker run --rm --entrypoint tesseract jbarlow83/ocrmypdf-alpine --list-langs

在语言列表中查找 eng 和 chi_sim。中文扫描件不能只选英语字库。镜像提供的语言包以实际检查结果为准,不要只因容器能运行就认定中文识别已准备好。

二、缺少中文包时建立自己的镜像

在空文件夹新建 Dockerfile。下面适用于上述 Alpine 基础镜像;如果基础镜像改为其他发行版,不能照搬 apk 命令。

FROM jbarlow83/ocrmypdf-alpine
USER root
RUN apk add --no-cache tesseract-ocr-data-chi_sim
USER app

构建后重新检查语言列表:

docker build -t xl-ocr-chinese .
docker run --rm --entrypoint tesseract xl-ocr-chinese --list-langs

若原镜像已经含中文字库,可以直接使用它,并把下一段脚本里的镜像名改回原镜像。语言数据包只是识别条件,不意味着复杂手写字和低清照片也能准确识别。

三、通过二进制管道生成新文件

建立独立工作目录,放入 input.pdf。保存下面代码为 run_ocr.py。它将原 PDF 作为二进制输入传给容器,不给容器挂载整盘,也不经过旧版 PowerShell 的文本重定向。

from pathlib import Path
import subprocess

source = Path("input.pdf")
target = Path("searchable.pdf")
if not source.is_file():
    raise SystemExit("Missing input.pdf")
if target.exists():
    raise SystemExit("Output exists; use a new filename.")
command = [
    "docker", "run", "--rm", "-i", "xl-ocr-chinese",
    "--skip-text", "--rotate-pages", "--deskew",
    "-l", "chi_sim+eng", "-", "-"
]
with source.open("rb") as input_file, target.open("xb") as output_file:
    subprocess.run(command, stdin=input_file, stdout=output_file, check=True)
print("Created searchable.pdf; inspect text and page appearance.")

运行命令如下。日志若出现错误,输出可能不完整,不能仅因文件存在就当作成功;检查错误后换一个新输出文件名重跑。

py run_ocr.py

四、验收 Windows PDF OCR 结果

打开原件与 searchable.pdf,对照页数、旋转方向和清晰度,再搜索原图中已知的中文词。复制一段文字到文本编辑器,检查断行、数字和标点。成功生成文字层不等于转录内容完全正确。

--skip-text 会跳过已有文字的页。如果某页已有错误文字层,它可能不会重新识别;先确定实际情况,再查官方关于重新 OCR 的选项,不要盲目强制处理整本文件。

五、交给 AI 阅读前再做一次检查

保留原始 PDF、OCR 输出和处理日志。表格数字、设备型号、否定词要重点抽查;这些错误会传递到 AI 摘要和知识库检索中。通过验证后,再使用带引用的 PDF 阅读流程。

六、常见问题与排错

提示找不到 chi_sim?

确认正在运行的是已添加中文字库的镜像,并再次执行语言列表检查。构建一个镜像不代表脚本自动使用它。

为什么容器结束后就没了?

这里是一次性任务,--rm 清理任务容器是预期行为。原件和输出在宿主机,不依赖容器保存。

能直接处理签名或受密码保护的 PDF 吗?

先确认授权与文档要求。OCR 可能影响原有数字签名;加密文件需按合法方式准备可处理副本,不要修改唯一签名原件。

镜像和管道方式参考 OCRmyPDF 官方 Docker 文档,字库可查 Alpine 软件包。

滚动至顶部