OCRmyPDF 拒绝处理 Tagged PDF 时 --tagged-pdf-mode 和各 --mode 的影响怎么选 OCRmyPDF 拒绝处理 Tagged PDF 时 --tagged-pdf-mode 和各 --mode 的影响怎么选【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF运行ocrmypdf input.pdf output.pdf时如果输入文件是 Tagged PDFOCRmyPDF 会直接报错退出日志中提示This PDF is marked as a Tagged PDF. This often indicates that the PDF was generated from an office document and does not need OCR. Use --force-ocr, --skip-text or --redo-ocr to override this error.这个报错来自 TaggedPDFError。带结构树/StructTreeRoot的 Tagged PDF 通常由办公文档导出或经过版面分析生成OCRmyPDF 默认把它当作不需要 OCR的信号和遇到已有文字的 PDF 一样停止处理。如果你确认这个文件确实需要继续处理就要在--tagged-pdf-mode和--mode之间做组合选择。关键在于不同的组合不只是能不能跑下去还会决定文件里的结构标记structural markup是保留还是被丢弃。为什么会被拒绝以及触发条件判定逻辑在 _pipeline.py只要pdfinfo检测到文件是 Tagged PDF 或携带逻辑结构树就会先输出一条 warning说明 OCRmyPDF 无法根据新识别的文字重建结构树被重新 OCR 的页面其结构标记会被丢弃。随后只有当--tagged-pdf-mode为default且--mode也为default时才抛出TaggedPDFError终止处理。也就是说两种组合都能绕开报错--tagged-pdf-mode ignore保持默认--mode显式指定--mode skip/redo/force此时--tagged-pdf-mode保持default即可只输出 warning。--tagged-pdf-mode在 cli.py 中的帮助定义为default在--mode为 default 时报错否则警告ignore总是警告但继续处理。该选项在 v17.1.0 加入见 v17.1.0 发布说明。按你的目标选组合advanced.md 的 Tagged PDFs and structural markup 一节给出了各组合的实际行为对应到三种典型目标只想把文件处理完、页面本身有文字如果你只是想让流程跑完页面大多已有文字使用--tagged-pdf-mode ignoreocrmypdf --tagged-pdf-mode ignore input.pdf output.pdf页面处理逻辑仍是默认的--mode已有文字的页面不会被 OCR扫描件页面照常处理。结构标记不会因为你忽略报错而被丢弃——丢弃结构树只发生在下面两种重写文字的 mode 中。要保留结构标记用 --mode skip如果文件的用途依赖 PDF 的逻辑结构例如无障碍、结构化提取advanced.md 明确说明--mode skip不动含文字的页面其结构标记得以保留。ocrmypdf --mode skip input.pdf output.pdfskip的含义是已有文字的页面原样复制到输出不做图像处理和 OCR。适合born digital 扫描件混合的文档或单纯想用它归一化、转换输出格式的场合。这里有一个必须知道的边界skip下结构标记的保留在输出转为 PDF/A 时不成立。PDF/A 转换由 Ghostscript 执行Ghostscript 10.x 在转换时会丢弃结构树9.x 保留。默认的--output-type auto可能回落到 Ghostscript所以需要保证 Tagged PDF 的结构标记存活时显式使用--output-type pdfocrmypdf --mode skip --output-type pdf input.pdf output.pdf文档同时建议安装 veraPDF让推测式 PDF/A 转换走验证路径在多数真实情况下绕开这个问题但这属于可选加固保证结构标记存活的确定性手段是--output-type pdf。必须重做 OCR接受结构标记被丢弃当页面上已有的 OCR 层损坏文字可选但搜不到或你要连同表单字段一起栅格化时用redo或force# 删除旧的不可见 OCR 文本后重新识别 ocrmypdf --mode redo input.pdf output.pdf # 全部页面栅格化为图像丢弃隐藏 OCR 文本并压平表单 ocrmypdf --mode force input.pdf output.pdfadvanced.md 说明了后果OCRmyPDF 无法重建与新文字匹配的结构树因此当--force-ocr栅格化页面、或--redo-ocr剥离并重写文字层时结构树不再对应页面内容会被直接丢弃。丢弃动作本身见 _graft.py删除/Root/StructTreeRoot并记录日志Discarded the logical structure tree (/Root/StructTreeRoot) ...。这两个 mode 会输出 warning 提醒你结构标记会被丢弃属于预期行为而非故障。另外注意一个文档给出的限制有些 OCR 工具把文字画出来再覆盖使其在技术上可打印/可见OCRmyPDF 无法把这种 OCR 文本和真实文字区分开redo不会重做它们——这种情况只能用force。一张表对照选择目标参数组合结构标记结果依据页面有文字只是想让流程跑完--tagged-pdf-mode ignore保留未重写文字的页面advanced.md需要保留 Tagged PDF 结构标记--mode skip --output-type pdf保留不加--output-type pdf时转 PDF/A 可能被 Ghostscript 10.x 丢弃advanced.md已有文字层损坏重做 OCR--mode redo被丢弃advanced.md全量重扫、压平表单、清除被涂黑信息--mode force被丢弃advanced.md验证方式处理成功时输出文件正常生成如果文件仍被拒绝确认命令行里确实带了--tagged-pdf-mode ignore或三个--mode值之一。用了--mode redo/force之后想确认结构树是否已被丢弃检查日志中的Discarded the logical structure tree记录即可——它是该行为按文档预期发生的标志而不是错误。边界与限制--tagged-pdf-mode default--mode default的组合对 Tagged PDF 永远报错退出这不是环境故障是默认保护逻辑。--tagged-pdf-mode ignore不会改变页面处理策略它只影响遇 Tagged PDF 是报错还是继续真正改变输出内容的是--mode。结构标记保留仅在输出不经过 Ghostscript 转 PDF/A 时成立Ghostscript 10.x 与 9.x 在此行为上不一致文档按版本分别说明不要假设所有 Ghostscript 版本表现相同。报错信息文本里给出的旧建议是--force-ocr/--skip-text/--redo-ocr这三个是--mode三个取值的静默别名见 advanced.md效果与对应的--mode值一致。【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考