news 2026/9/11 16:21:10

如何用 OCRmyPDF 的 --mode strip 移除 PDF 中已有的不可见 OCR 文字层

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 OCRmyPDF 的 --mode strip 移除 PDF 中已有的不可见 OCR 文字层

如何用 OCRmyPDF 的 --mode strip 移除 PDF 中已有的不可见 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——文字层还在,但搜不到东西或认读结果无用——通常的做法是重新 OCR,但那样会把页面栅格化重做一遍。如果你的目的只是把这一层不可见文字从文件里删掉、让页面保持原样,OCRmyPDF v17.6.0 起提供的--mode strip就是为这个任务设计的:它只移除以“不可见”方式(PDF 文本渲染模式 3)绘制的 OCR 文字层,不做栅格化,不改图像和可见内容,输出文件通常比输入更小。

前提条件:

  • 已安装 OCRmyPDF 命令行工具,版本不低于 v17.6.0(--mode参数在 v17.0.0 引入,strip模式在 v17.6.0 增加,见 v17 发布说明)。安装方式参见 安装文档;
  • 输入 PDF 中确实存在要移除的文字层。

执行移除:一条命令

标准用法是:

ocrmypdf --mode strip input.pdf output.pdf

input.pdf是带 OCR 文字层的原文件,output.pdf是输出文件,两者都可以替换为你自己的路径。执行完成后,输出文件中不再有那层不可见文字,而页面图像和可见内容保持不变——v17 发布说明 对这一行为的描述是:与--ocr-engine none --force-ocr不同,它不会栅格化页面,因此“images and visible content are preserved unchanged and the output is smaller rather than larger”。

如果输入 PDF 同时含有可见文字(比如数字原生生成的页面),这些文字不会被 strip 移除:--mode strip只移除以渲染模式 3 绘制的不可见文本(见 Cookbook 中 “Remove the OCR text layer from my PDF” 一节)。仓库中的测试 tests/test_strip.py 明确验证了这一点——对一个数字原生的文字 PDF 执行 strip 后,has_text仍为真。

原地修改文件

如果不想产生第二个文件,可以直接让输出覆盖输入:

ocrmypdf myfile.pdf myfile.pdf

按 Cookbook 的说明,只有 OCRmyPDF 执行成功时文件才会被覆盖;失败时原文件保持不变。

验证结果

判断是否按预期完成,可以核对以下几点,均与仓库测试 tests/test_strip.py 中固化下来的断言一致:

  1. 文字层已移除:对输出文件做详细分析时,原先含文字的页面has_text为假。测试test_mode_strip_removes_ocr_layerPdfInfo(pdf, detailed_analysis=True)检查了这一点;
  2. 页面未被栅格化:输出文件中页面的图像流与输入逐字节相同。测试通过pikepdf读取第 1 页/Resources/XObject中每个 Image 对象的read_raw_bytes()并断言相等;
  3. 文件没有变大:输出文件大小小于或等于输入(测试断言out.stat().st_size <= input_pdf.stat().st_size);
  4. 页数不变:输出仍为同样页数。

测试里另外使用了--output-type pdf --optimize 0,作用是跳过 PDF/A 转换和图像重编码干扰,保证“图像逐字节不变”这个断言成立。如果你只关心文字层被移除、不要求图像字节级不变,按标准命令执行即可;如果要求图像完全不受影响,可参考测试的写法追加这两个参数:

ocrmypdf --mode strip --output-type pdf --optimize 0 input.pdf output.pdf

边界与限制

  • strip 无法移除“可见式”OCR 文字。Cookbook 指出,一些 OCR 产品(包括 OCRmyPDF v2.2 及更早版本)的 OCR 文字是以可见文字加一张不透明图片覆盖的方式绘制的,这种文字属于页面可见内容的一部分,--mode strip不动它。若必须连这类文字也一并去掉,需要把整页栅格化成纯图像 PDF:

    ocrmypdf --ocr-engine none --force-ocr input.pdf output.pdf

    注意这是另一条路径:每页都会重建为图像,文件通常变大,矢量内容会丢失。

  • strip 模式拒绝需要栅格化/OCR 的选项。测试test_mode_strip_rejects_image_processing_options表明,--mode strip--deskew这类选项同用会抛出BadArgsError。strip 只做“摘掉文字层”这一件事,不能与其他图像处理选项组合。

  • 与重做 OCR 的区别:如果你的目标是“去掉旧文字层并重新识别”,应该用--mode redo(等价于旧的--redo-ocr),它会在移除旧不可见文字层后重新执行 OCR;各模式的完整对照表见 高级文档 “OCR processing mode”一节。strip 只删不加,处理完成后文件里将没有可搜索的文字。

【免费下载链接】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 16:19:27

用Matlab搭建SIRS传染病模型:从微分方程到参数标定与随机模拟

简介&#xff1a;SIRS传染病学模型Matlab完整仿真资源&#xff0c;面向从事数学模型仿真、传染病动力学研究的学生与科研人员&#xff0c;用于描述易感(Susceptible)、感染(Infectious)、康复(Recovered)、免疫(Immune)四种人群状态的动态转化过程。模型遵循易感个体接触感染者…

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

expo-font 完全指南:在 Expo 与 React Native 中运行时加载字体

expo-font 完全指南&#xff1a;在 Expo 与 React Native 中运行时加载字体 【免费下载链接】expo An open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web. 项目地址: https://gitcode.com/GitHub_Trending/ex/exp…

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

AI Agent后端选型:PolarDB Agent Express与VM级安全隔离实践

/* 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 16:16:59

OE_SOC芯片的架构综述

截至2025年&#xff0c;当前市场上的SoC&#xff08;System on Chip&#xff09;芯片主要基于以下几类处理器架构&#xff0c;其中以 ARM 架构占据绝对主导地位&#xff0c;同时 RISC-V 正在快速崛起&#xff0c;而 x86 和自研架构 在特定领域保持影响力。 一、主流 SoC 架构分…

作者头像 李华