用途:ocrmypdf 会在原始页面图像上写入不可见文本层,输出文件既能查看扫描件,又能被 pdftotext、grep、pdfplumber 读取。相比先栅格化再跑 tesseract 得到脱离页面的 .txt,此方式保留页码与坐标。
安装前探测:运行 pdftotext in.pdf - | tr -d '\f \n' | wc -c,非零表示已有文本层,不是扫描件,应直接用 pdftotext 或 pdfplumber 提取。少量非零字符属于混合情况(数字封面加扫描正文),用 --skip-text 处理。
安装:sh scripts/ensure_ocr.sh(英文);sh scripts/ensure_ocr.sh nor deu(加挪威语、德语)。幂等,已装好约 0.8 秒,加一个语言包约 2.6 秒。通过 apt 安装 ghostscript、pngquant、poppler-utils、tesseract 及语言包,再用 pip 安装 ocrmypdf。
运行:ocrmypdf --skip-text --deskew --rotate-pages --output-type pdf in.pdf out.pdf,再用 pdftotext out.pdf - | wc -w 验证,零词表示静默失败。单核 200 DPI 密集页约 2 秒/页,300 页扫描应作为后台任务分离运行。
文本层模式:--skip-text 为默认,已有文本的页面原样通过,仅图片页做 OCR,适合混合文档;--force-ocr 每页重新栅格化并 OCR,丢弃已有文本,适用于带垃圾文本层的扫描件,但会破坏真实嵌入文本,需先探测;--redo-ocr 替换旧 OCR 层而保留原生数字文本。--output-type pdf 跳过 PDF/A 转换,归档需要 PDF/A 时去掉该参数。
语言:-l eng+nor 用于混合语言,-l nor 用于单语言,顺序无关,每个代码需安装对应 tesseract-ocr-<code> 包。语言错误会显著降低准确率且 tesseract 不会提示。
容器事实(2026-09-12 测量):apt-get update 退出码 100,预配置的 nodesource 仓库返回 403 并中断 && 链,Ubuntu 镜像无需 update 即可访问,直接运行 apt-get install。unpaper 缺失,--clean 和 --clean-final 会失败。单核,--jobs 无收益。ocrmypdf --version 输出到 stderr,需用 2>&1 捕获。jbig2 缺失,输出使用 CCITT/JPEG。
限制:本技能只产出字形,不读图表、不描述示意图、不识别手写。内容为图片或需要解读时应改用 transcribing-images;交互式少量页面可用 pdftoppm -r 200 -png 栅格化后由视觉模型查看。文档超出上下文或文本需作为文件留存时再用 OCR。