十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OCRmyPDF 自定义字体:配置好中文字体,PDF 可搜索文字层一步到位

OCRmyPDF 自定义字体:配置好中文字体,PDF 可搜索文字层一步到位 OCRmyPDF 自定义字体配置好中文字体PDF 可搜索文字层一步到位【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF换对字体中文 OCR 结果就能正常显示。下面用大白话讲清 OCRmyPDF 的默认字体机制给你一套可照做的 ocrmypdf 字体配置路线专治 OCR 中文乱码和文字层高亮空白。一、扫描件里那些看不见的字扫描件先经 Tesseract 识别再走 ocrmypdf 字体配置流程中文却显示不全。日志里常见两句警告No installed font can render...以及added as an invisible text layer。前者是某个字在全部字体里找不到字形后者是文字层写进去了只是渲染成了空白。二、文字层是怎么画上去的字体就是刻字模具一句话OCR 文字层是一份隐形 PDF 文字字体就是那副刻字模具决定每个字占多宽、摆在哪。流程分四步。Tesseract 产出 hOCR 文件记录每行、每个词的坐标和语言标记OCRmyPDF 解析后为每个词挑一副模具。挑法很直接先看语言标记中文简体对应 NotoSansSC日文对应 NotoSansJP映射表在 src/ocrmypdf/font/multi_font_manager.py再看这副模具是否覆盖词里全部字符不覆盖就换下一副。内置字体在 src/ocrmypdf/data/NotoSans-Regular.ttf 负责拉丁字母Occulta.ttf 是无字形兜底全 BMP 字符都能映射但不画任何笔画只负责占位。字体不够时系统去标准目录Linux 的 /usr/share/fonts、macOS 的 /Library/Fonts 等找 Noto 家族字体逻辑在 src/ocrmypdf/font/system_font_provider.py。挑中后渲染器按字符前进宽度算出每个词该占的宽度再水平缩放到和扫描图里的实际字宽一致保证可搜索文字层严丝合缝地贴在原字上最后把字体文件注册并嵌入 PDFsrc/ocrmypdf/fpdf_renderer/renderer.py 里这一步由 fpdf2 完成。阿拉伯文、天城文这类复杂文字还会交给 HarfBuzz 做连写排版。全部字体都缺某个字就回落到无字形兜底文件照样能搜索、能复制只是高亮时那片区域空白。这就是乱码现象的完整解释。三、三条字体路线对比路线适用场景优点缺点改动成本内置无字形字体Occulta只要搜索和复制不在乎高亮显示零配置开箱即用高亮空白无视觉效果无系统安装 Noto 字体中日韩、阿拉伯文等常见文字装一个包即可自动发现不同发行版包名不同低自定义字体目录团队环境统一、特殊字体需求灵活可控字体版本可锁定需维护代码和字体分发高多数人走第二条就够了。四、OCR 中文乱码快速修复步骤确认语言看文档是中文简体、繁体还是日文对应chi_sim、chi_tra、jpn。安装对应 Noto 字体OCRmyPDF 只认 Noto 家族# Debian / Ubuntu sudo apt install fonts-noto-cjk # macOS brew install font-noto跑 OCR 并验证ocrmypdf --language chi_sim 输入.pdf 输出.pdf日志里没有缺字体警告用 PDF 阅读器搜索、复制、高亮中文都正常就算修好了。不放心可以用 Python 快速确认字体被发现from ocrmypdf.font import MultiFontManager print(MultiFontManager().has_font(NotoSansSC-Regular)) # True 即成功五、排错清单六个常见症状高亮空白但复制正常 → 字体未装全 → 按日志提示装对应语种的 NotoSans 字体重跑一遍。复制出的文字顺序错乱 → 语言参数缺失或错误 → 按 OCR 日志识别出的语言修正--language。文字位置偏移、宽度拉伸怪异 → 页面 DPI 标注与扫描分辨率不符 → 用--image-dpi校正 DPI。中日韩出现方块或空白 → 缺 CJK 字体 → 安装 NotoSansCJK 并加--language chi_sim。中英混排一行显示不全 → 系统要求每词只用一种字体 → 装一套覆盖面广的 Noto 字体族。警告提示无已装字体能覆盖该词 → 全部字体都缺字走了无字形兜底 → 按警告里列出的码点补装字体即可。六、进阶换字体供给源与多语言扩展想走更远改的不是渲染逻辑而是字体供给源。src/ocrmypdf/font/font_provider.py 里的 FontProvider 是个协议内置字体、系统字体、你自己的字体仓库都可以实现它再串接起来。多语言方面src/ocrmypdf/font/multi_font_manager.py 维护语言到字体的映射表新语言加个条目即可系统还会做字形覆盖扫描把你机器上已装的各种 Noto 字体都利用起来。更细节的行为可以看 docs/advanced.md 和 docs/plugins.md源码入口是 src/ocrmypdf/font/ 和 hOCR 转 PDF 的调试工具 src/ocrmypdf/hocrtransform/main.py。字体选对了PDF 里的每一个字都能被搜索、复制也看得清。完整说明见 docs/advanced.md 与 docs/installation.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),仅供参考
返回列表