OCRmyPDF字体配置实战3步让中文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给扫描PDF叠加可搜索文字层的开源命令行工具自身只内置了一个拉丁字体中、日、阿拉伯等文字全靠你系统里已安装的字体来渲染。把正确的字体装好OCR后乱码这类问题基本就消失了。快速上手先把字体这条路走通如何安装Noto字体包字体是系统级依赖包管理器装pip装不了。按发行版执行其一sudo apt install fonts-noto # Debian / Ubuntu sudo dnf install google-noto-fonts-all # FedoramacOS 上 Homebrew 没有单一的 Noto 全家桶按语系分装brew install --cask font-noto-sans font-noto-sans-cjk细节见 docs/installation.md 的字体要求一节。第一条中文OCRmyPDF命令装好 Tesseract 中文语言包如tesseract-ocr-chi-sim后一条命令走完全程ocrmypdf -l chi_sim 扫描合同.pdf 可搜索合同.pdf-l是语言提示参数chi_sim表示简体中文它会在后文要讲的选字瀑布里优先派上用场。如何验证文字层真正可搜索打开输出文件高亮任意一句中文并复制能原样复制出汉字、粘贴顺序与图像一致说明字体链路已打通无需再折腾。原理速览它是怎么找到正确字体的字体从哪来内置一层 系统一层想象一个两层书架第一层是随程序捆绑的拉丁字体 NotoSans第二层是你系统字体目录里的 Noto 字体——Linux 查/usr/share/fontsmacOS 查/Library/Fonts按需惰性扫描。捆绑层里还有一支特殊的Occulta字体它的字符没有任何可见形状但文本仍然完整存在于文件里可搜索、可复制只是高亮时显示为空白。它永远兜底所以文字层永远不会丢。四级选字瀑布从语言提示到兜底每个词选字体时走一条四级瀑布像查书先按索书号、再按书架、再翻全盘、最后登记查无此书语言提示-l chi_sim命中语言映射表优先用对应的 NotoSansSC 字体回退链拉丁、阿拉伯、CJK、泰文……按固定顺序逐个用字形覆盖度检验全盘扫描前两级落空时遍历系统装的全部 Noto 字面找能覆盖该词每一个字符的字体macOS 自带的近百个 Noto 字面就是在这里被启用的;Occulta 兜底仍无覆盖才降级并在日志里点名缺失的字符。选字逻辑的完整实现可以翻阅 src/ocrmypdf/font/ 源码。为什么按词选字体一个词只允许用一种字体这保证了复制出的文本顺序正确代价是——一个词里若混排了没有任何单一字体能同时覆盖的文字这个词就只能整体落到 Occulta。这是后文一个高频坑的根源。场景化实操三个真实场景场景一简体中文扫描件如何避免豆腐块解决什么问题中文识别成功但显示为方块复制出来是乱码。关键操作字体与语言包缺一不可两条命令补齐后重跑sudo apt install fonts-noto tesseract-ocr-chi-sim ocrmypdf -l chi_sim in.pdf out.pdf得到什么效果高亮显示正确的简体中文复制粘贴与图像逐字对齐繁体文档把语言码换成chi_tra即可系统会自动选 NotoSansTC。场景二macOS 日文文档缺假名怎么办解决什么问题现代 Noto CJK 字体按地区拆分NotoSansSC 并不含日文假名日文文档因此缺字。关键操作补装覆盖日文的字体族brew install --cask font-noto-sans-cjk得到什么效果日文走 NotoSansJP、简繁中文各走对应族同一份多语文档里三种文字都能正常显示且各自字形与语言习惯一致。场景三阿拉伯文等RTL语言的文字层解决什么问题从右到左书写的语言阿拉伯、希伯来、波斯容易把复制顺序搞反。关键操作默认渲染器就是为此准备的 fpdf2可用--pdf-renderer显式指定给它语言提示即可ocrmypdf -l ara in.pdf out.pdf得到什么效果文字层方向、基线位置与图像对齐复制出的阿拉伯文顺序正确不再依赖旧渲染器的 workaround。避坑指南三个最高频的坑现象高亮后文字空白原因系统没有任何已装字体覆盖该文字系统这个词被写进了可搜索但无形体的文字层。一句话解决文字本身没丢装上对应语系的 Noto 字体重跑即可。现象日志提示某字符无法渲染原因遇到乔克托等小众文字系统它不在默认映射与回退链里。一句话解决警告会直接点名字符及其 Unicode 名称如Ꮳ U13E3 CHEROKEE LETTER TSA照着装对应语系的 Noto 包即可。现象pip 装完 OCRmyPDF 后仍缺字体原因字体属于系统级依赖pip install ocrmypdf永远不会附带字体捆绑的拉丁字体只够英文文档。一句话解决回到操作系统包管理器安装fonts-noto或等价字体包再执行 OCR 命令。选对字体OCRmyPDF 负责找到它并用好它你只需负责装上它。想进一步理解渲染器行为与 PDF/A 对字体的约束看 docs/advanced.md想深入选字与字形覆盖度的实现细节读 src/ocrmypdf/font/ 即可。【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考