OCRmyPDF 如何用 --pages 参数只对指定页码或页码范围执行 OCR
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
扫描出来的 PDF 里常常只有部分是纯扫描件:有的页已经带文本层,有的页是空白封面,有的页是后来补扫进去的。对整个文件跑 OCR 既浪费时间,也可能改变本来不需要动的页面。OCRmyPDF 的--pages参数可以把图像处理与 OCR 限定在指定页码上,其余页面保持原样通过。
页码的写法
--pages接受一个页码列表,语法规则见 docs/cookbook.md 的 “Process only certain pages” 一节:
- 逗号分隔单个页码;
- 短横线表示一段连续页码范围;
- 也可以包含空格,但需要把整段页码用引号包起来;
end(大小写不敏感)是最后一页的别名,等价于文档总页数。
基本用法:
# 第 2、3 页和第 13 到 17 页 ocrmypdf --pages 2,3,13-17 input.pdf output.pdf带空格的写法(整段加引号):
ocrmypdf --pages '2, 3, 5, 7' input.pdf output.pdf用 end 指到最后一页
end别名在 v17.5.0 加入(见 docs/releasenotes/version17.md),--pages参数本身则自 v9 引入(见 docs/releasenotes/version09.md)。两个典型写法:
# 从第 3 页一直 OCR 到最后一页 ocrmypdf --pages 3-end input.pdf output.pdf # 只 OCR 最后一页 ocrmypdf --pages end input.pdf output.pdf注意end依赖文档总页数:在总页数尚不可用时使用end,OCRmyPDF 会报错而不是猜一个值(见 src/ocrmypdf/_options.py 中的'end' was used in --pages but the total page count is not yet known)。
关键限制:--pages 只限定 OCR,不阻断整文件操作
这是使用--pages时最容易误解的一点。文档明确指出:无论--pages取什么值,OCRmyPDF 仍然会优化文件中所有页面/图像并转换为 PDF/A,除非你显式关掉这些选项——这两步是“整文件”操作。
如果你的目标是“只给某几页加文本层,其余地方尽量少动”,文档给出的写法是:
# 只对第 1 页(如封面/扉页)执行 OCR,输出普通 PDF 并关闭优化 ocrmypdf --pages 1 --output-type pdf --optimize 0 input.pdf output.pdf其中--output-type pdf避免走 Ghostscript 的 PDF/A 转换,--optimize 0关闭默认(-O1)的无损优化,两者合起来才符合“只 OCR 标题页、其他内容尽量不变”的意图。
页码计数方式与出错提示
- 页码按文件中的物理页从 1 开始数,OCRmyPDF 不识别文档自己印的页码(比如书的前言部分用罗马数字编号的情况),所以填页码时以阅读器显示的页序为准。
- 列表中若包含重复页或重叠页码(例如
2-4,3,5),OCRmyPDF 会给出告警,并自动去重——“最终要处理的页面集合”才是关键,重复列出不会重复执行。 - 列表顺序乱了也没关系,OCRmyPDF 会自动排序后再处理。
- 页码写法错误时,报错信息来自 src/ocrmypdf/_options.py:非数字 token 报
invalid page number '...',无效区间报invalid page subrange '...',页码小于 1 报pages refers to a page number less than 1,整段无法解析报did not contain any recognizable page ranges。看到这些报错时直接检查引号、逗号和短横线即可。
如何确认只有指定页被 OCR 了
结合--sidecar是最直接的核对方式(--sidecar与--pages可组合使用,见 docs/releasenotes/version11.md):
ocrmypdf --pages 2,3,13-17 --sidecar output.txt input.pdf output.pdf命令成功后会生成output.pdf和output.txt。output.txt里只包含 OCRmyPDF 实际做 OCR 的那几页的文本(文档说明:如果文档某些页本来就有文本,那些已有文本不会出现在 sidecar 中;因--skip-big、--tesseract-timeout等原因被跳过的页也不会出现)。因此 sidecar 内容应恰好对应该页码列表——内容比预期少,说明有页被跳过;内容明显多于指定页,则页码写错了。
另外,若日志里出现List of pages to process contains duplicate pages, or pages that are out of order告警,说明你传入的列表有重复或乱序,命令仍会按去重排序后的集合执行,可以据此回头修正页码写法。
版本要求
--pages自 v9 可用(见 docs/releasenotes/version09.md);end别名需要 v17.5.0 或更高版本(见 docs/releasenotes/version17.md),旧版本里请用具体页码代替end;- 更完整的参数说明可用
ocrmypdf --help查看(内置帮助,见 docs/cookbook.md)。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考