无需上传, 100% 本地处理, 无需账户

文章

为什么有些 PDF 无法复制文字

在一份 PDF 里尝试选中一行文字,文字会正常高亮,随时可以复制。在另一份 PDF 里做同样的动作,却什么都不会发生,或者光标像抓取一张照片一样把整个页面都框选了起来,因为它本来就是一张照片。两份在屏幕上看起来一模一样的文件,底层的构建方式可能完全不同。下面是如何分辨你手上是哪一种,以及如何处理那种拒绝被复制的文件。

两种不同的 PDF 页面

PDF 可以用两种非常不同的方式来存储一个页面。在文字型 PDF 中,每一个字母都是一个带有 Unicode 值、字体和位置的字符对象,和网页存储文字的方式一样:阅读器可以选中它、搜索它,屏幕阅读器也可以朗读它。在图像型 PDF 中,整个页面就是一张扁平的图片,通常来自扫描仪、传真,或者对一张文档照片执行的“打印为 PDF”操作。这些字母在你眼里看起来一样,但对文件格式来说,底下没有任何字符,只有像素。

并排对比:一边是文字型 PDF 页面,其中一行文字被高亮选中;另一边是图像型 PDF 页面,看起来相同的文字其实是一张扁平图片,无法被选中

快速分辨你手上是哪一种的方法

按下 Ctrl+F 或 Cmd+F,搜索一个你能在页面上清楚看到的词。如果搜索能找到并高亮它,说明这一页有真正的文字层。如果在整份文档中都搜不到任何内容,说明这一页是图像,无论它看起来多清晰、多像一份打印出来的文档。用鼠标拖动来选中一行文字,得到的答案也一样:是文字高亮,还是一个普通的矩形选框。

用 OCR 重建文字

光学字符识别(OCR)会读取图像型页面的像素,把这些形状和某种语言的已训练字母模型进行匹配,然后按识别出的字符原本出现的位置,重建出一层文字。像 ocr 这样的工具完全在浏览器中完成这一切:不上传任何内容,输出的是一份可以搜索、复制或编辑的纯文本文件。准确率取决于原始素材:干净、端正、高分辨率、语言支持良好的扫描件识别可靠,而歪斜、模糊、对比度低或手写的页面会产生更多错误,有时是识别错一个字符,有时是读错一个单词。

流程示意图:扫描页面的像素经过 OCR 字符识别,最终生成一层重建出来、带有位置信息的文字

文件本来就有文字,但提取结果看起来不对时

如果你的 PDF 确实有真正的文字层,但用像 pdf-to-text 这样的工具提取出来的文字顺序很奇怪,栏目混在一起或者间距被压缩了,那是一个完全不同、不相关的问题:文字对象是存在的,只是它们在页面上的阅读顺序,没有按照脚本自然期望的方式存储。这是一个提取之后需要清理的排版小问题,而不是文字缺失的信号,也不需要用 OCR 来解决。

本文涉及的工具

常见问题

我的 PDF 看起来像一份普通的打印文档,但我还是无法选中任何文字,这是为什么?

很可能是一份被保存为 PDF 的扫描件或拍照文档,或者是被故意压平成图像的文档。从视觉上看,它可能和文字型 PDF 没有区别;差异只有在你尝试搜索或选中文字时才会显现。用 OCR 处理它,可以从像素中重建出一层真正可选中的文字。

OCR 在每种语言上的效果都一样好吗?

不一样。准确率取决于该语言和文字体系是否存在经过训练的模型,也取决于扫描件的质量。支持良好的语言,在干净端正的扫描件上识别可靠;手写内容、低分辨率图像,或者训练数据较少的语言,会产生更多错误。OCR 的输出始终是一种尽力而为的转录结果,在你依赖它之前,值得快速校对一遍。

来源