news 2026/9/11 7:22:35

OCRmyPDF 如何用 --pages 参数只对指定页码或页码范围执行 OCR

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OCRmyPDF 如何用 --pages 参数只对指定页码或页码范围执行 OCR

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.pdfoutput.txtoutput.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 7:22:20

Java方法底层原理:从栈帧到动态代理的完整解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 7:21:08

ITIL4运维管理变革:从流程到价值创造

1. ITIL4带来的运维管理变革ITIL4的发布标志着IT服务管理领域的一次重大升级。作为从业15年的IT运维老兵,我亲眼见证了从ITIL v3到ITIL4的演进过程。这套框架不再只是单纯的服务管理方法论,而是正在重塑整个运维管理的"游戏规则"。最直观的变化…

作者头像 李华
网站建设 2026/9/11 7:17:03

如何为 Midscene.js 搭建容器化服务:Docker 部署完整指南

如何为 Midscene.js 搭建容器化服务:Docker 部署完整指南 🔥【免费下载链接】midscene GUI Agent for E2E Testing 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene Midscene.js 是基于视觉语言模型的 GUI 自动化工具,可…

作者头像 李华