ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

OCRmyPDF字体完全指南:多语言扫描件的隐形文字层一键修复

OCRmyPDF字体完全指南:多语言扫描件的隐形文字层一键修复 OCRmyPDF字体完全指南多语言扫描件的隐形文字层一键修复【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF当你高亮一份扫描 PDF 里的文字发现一部分隐形了、但 CtrlF 依然能搜到问题几乎不在 OCR 引擎而在字体。OCRmyPDF 是给扫描 PDF 添加可搜索文字层的工具它渲染文字时采用逐词自动选字体 四级回退机制。看懂这套机制你既能解释文字层为什么是空白也能在日志出现告警时准确知道该装哪个字体。一、文字层为什么可搜索却不可见字形覆盖与兜底字体现象跑完 ocrmypdf搜索、复制都正常一高亮却是空的。原因PDF 文字层本质是字符流 坐标 字体三件套。某个字符在字体文件里没有字形glyph阅读器画不出来就只能留白。OCRmyPDF 的兜底方案是无字形字体 Occulta.ttf任何系统字体都盖不住的字符都用它写进文档。文字层因此仍可搜索、可复制只是高亮时不可见。打个比方Occulta 像一枚空白印章——印能盖下去可检索但不留墨迹不可见。结论隐形文字层不是故障是安全网。想让它显形唯一办法是装一个覆盖该文字系统的字体。二、一个词到底用哪个字体四级选择机制选字逻辑集中在 多字体管理器 的select_font_for_word()逐词执行四级查找语言优先hOCR 行的语言标记如chi_sim直接指向对应字体例如 NotoSansSC。固定候选表按顺序试拉丁、阿拉伯、天城文、CJK 等约 30 个 Noto 字族命中即停。全盘扫描再不行就翻遍系统里安装的所有 Noto 字体macOS 上约有上百个按字形覆盖率匹配。最终兜底全部落空才交给 Occulta并按语言打一次告警日志。选中的结果会按词 语言缓存同一个词不会反复查找。写进 PDF 的动作则由基于 fpdf2 的 PDF 渲染器 完成。类比一下这套流程像派遣翻译先找该语言的常驻译员再翻候补名册最后才全城搜寻。结论绝大多数字体不对的情况在第 2 级就解决了走到第 4 级才需要你看日志动手。三、字体从哪来内置只有 2 个其余靠系统扫描字体提供器 把来源拆成三层内置提供器安装包只捆了两个文件——NotoSans-Regular.ttf拉丁、希腊、西里尔和Occulta.ttf。这是刻意设计不塞全部 CJK 字体是为了控制体积。系统提供器见 系统字体扫描按需懒加载扫 Linux 的/usr/share/fonts、~/.fonts和 macOS 的/Library/Fonts等标准目录支持.ttf/.otf/.ttc以及可变字体NotoSansSC[wght].ttf这种带括号轴名的文件。链式提供器先问内置、再问系统谁先命中用谁。结论干净的 Linux 服务器不装中文字体时中文文字层默认隐形。这是环境缺件不是代码问题装字体就是解法。四、动手集成3 步装好中文字体并验证第 1 步安装字体Debian/Ubuntu 为例sudo apt install fonts-noto-cjk一条命令装好 Noto Sans CJK 全家族覆盖简繁中文、日文、韩文。如果想看源码实现可执行git clone https://gitcode.com/GitHub_Trending/oc/OCRmyPDF。第 2 步确认字体能被扫描到fc-list :langzh | head -3输出里出现 NotoSansCJK 或 NotoSansSC说明系统扫描这一层已经就绪。第 3 步重新跑 OCR 并盯日志ocrmypdf --language chi_sim scan.pdf out.pdf--language同时告诉 Tesseract 识别语言并给字体选择提供优先提示。日志里没有 No installed font has glyphs 告警中文层就会正常显示。想程序化确认也可以跑from ocrmypdf.font import MultiFontManager m MultiFontManager() print(m.has_font(NotoSansSC-Regular))返回True即字体链已经接住中文字体。五、常见坑自检清单5 项逐条过⚠️ 日志有 No installed font has glyphs for...告警会直接点名缺失字符的 Unicode 码点和该装的 Noto 字族照着装即可。高亮空白但搜索正常该词已落到 Occulta 兜底回上一条处理。字体都装了个别混排词仍不可见OCRmyPDF 一个词只用一种字体单个词跨两种文字系统且无单一字体覆盖时这是预期行为多装字体也无效。fc-list能看到字体OCRmyPDF 却找不到系统扫描只认 Noto* 命名非 Noto 字体不会入选换成对应 Noto 字体即可。文件名带方括号如NotoSansSC[wght].ttf那是可变字体已被支持无需任何额外配置。过完这 5 项你的文字层应当做到既能搜、又能看。下一步若想做更深的字体定制从 插件文档 的插件接口入手字体与渲染的细节可继续读 进阶文档。【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表