我有一个包含有价值的文字信息的PDF文件。
问题是我无法提取文本,我得到的只是一堆乱码。如果我将PDF阅读器中的文本复制并粘贴到文本文件中,也会发生同样的情况。甚至文件 - >在Acrobat Reader中另存为文本失败。
我已经使用了所有可以使用的工具,结果是一样的。我相信这与字体嵌入有关,但我不知道到底是什么?
我的问题:
答案 0 :(得分:22)
生成的某些PDF文件没有对从中成功提取文本至关重要的特殊信息。即使是Adobe工具。基本上,这些文件不包含字形到字符的映射信息。
此类文件将被正确显示和打印(因为字符的形状已正确定义),但无法正确复制/提取文本(因为没有关于使用的字形/形状含义的信息)。
例如,当使用“最小文件大小”预设时,Distiller会生成此类文件。
除了OCR之外,没有其他方法可以从这些文件中检索文本,我担心。
原始答案提到“有关使用的字形/形状含义的信息”。此信息应包含在称为/ToUnicode
表的PDF结构中。对于作为子集嵌入的每种字体都需要这样的表,并使用非标准(Custom
)编码。
为了快速评估文本内容的可提取性,您可以使用pdffonts
命令行实用程序。这将以表格形式打印有关PDF使用的每种字体的一系列项目。 /ToUnicode
表的存在由标题为uni
的列表示。
一些示例输出:
$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-good.pdf
name type encoding emb sub uni object ID
------------------------ ----------- ---------- --- --- --- ---------
BAAAAA+Helvetica TrueType WinAnsi yes yes yes 12 0
CAAAAA+Helvetica-Bold TrueType WinAnsi yes yes yes 13 0
$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad1.pdf
name type encoding emb sub uni object ID
------------------------ ----------- ---------- --- --- --- ---------
BAAAAA+Helvetica TrueType WinAnsi yes yes no 12 0
CAAAAA+Helvetica-Bold TrueType WinAnsi yes yes no 13 0
$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad2.pdf
name type encoding emb sub uni object ID
------------------------ ----------- ---------- --- --- --- ---------
BAAAAA+Helvetica TrueType WinAnsi yes yes yes 12 0
CAAAAA+Helvetica-Bold TrueType WinAnsi yes yes no 13 0
使用good.pdf
可以正确提取两种字体的文本内容,因为这两种字体都有一个附带的/ToUnicode
表。
对于bad1.pdf
和bad2.pdf
,文本提取仅对两种字体中的一种成功,而另一种则失败,因为只有一种字体具有/ToUnicode
表。
我Kurt Pfeifle最近创建了一个 series of hand-coded PDF files ,以展示PDF源代码中现有的,错误的,操纵的或缺失的/ToUnicode
表的影响。这些PDF经过广泛评论,适合在文本编辑器的帮助下进行探索。以上pdffonts
输出示例是在这些手动编码文件的帮助下创建的。 (还有一些PDF显示不同的结果,有兴趣的读者可能想要探索...)
答案 1 :(得分:11)
我去了很多人寻求帮助,而OCR是解决这个问题的唯一方法
答案 2 :(得分:2)
我遇到了同样的问题。将其上传到Google云端硬盘,使用Google文档打开并从中复制文本对我有用。