我有一份包含宝贵文本信息的PDF文件。
问题是我无法提取文字,得到的只是一堆乱码符号。如果我将文本从PDF阅读器中复制并粘贴到文本文件中,情况也是一样的。即使在Acrobat Reader中使用“文件 -> 另存为文本”也失败了。
我已经使用了所有能够找到的工具,结果都是相同的。我认为这可能与字体嵌入有关,但我不知道确切的原因。
我的问题:
- 是什么导致了这种奇怪的文本乱码?
- 如何从PDF中提取文本内容(通过程序、工具、直接操作比特等)?
- 如何修复PDF以避免复制时出现乱码?
我有一份包含宝贵文本信息的PDF文件。
问题是我无法提取文字,得到的只是一堆乱码符号。如果我将文本从PDF阅读器中复制并粘贴到文本文件中,情况也是一样的。即使在Acrobat Reader中使用“文件 -> 另存为文本”也失败了。
我已经使用了所有能够找到的工具,结果都是相同的。我认为这可能与字体嵌入有关,但我不知道确切的原因。
我的问题:
原回答提到了使用的字形/形状的含义信息。这些信息应该包含在一个名为/ToUnicode
表的PDF结构中。对于每个嵌入为子集并使用非标准(Custom
)编码的字体,都需要这样的表。
为了快速评估提取文本内容的可能性,您可以使用pdffonts
命令行实用程序。这会以表格形式打印有关PDF使用的每个字体的一系列项目。列标题为uni
的存在表示存在/ToUnicode
表。
以下是一些示例输出:
$ 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
< p > good.pdf
可以正确地提取两种字体的文本内容,因为这两种字体都有相应的 /ToUnicode
表。
对于 bad1.pdf
和 bad2.pdf
,只有一种字体具有 /ToUnicode
表,因此只能成功提取其中一种字体的文本内容,而另一种字体则失败。
我(Kurt Pfeifle)最近创建了一系列手工编码的 PDF 文件,以展示现有 PDF 源代码中存在的、错误的、被操纵的或缺失的 /ToUnicode
表的影响。这些 PDF 文件有广泛的注释,并适合使用文本编辑器进行探索。上面的 pdffonts
输出示例是使用这些手工编码文件创建的。(还有一些显示不同结果的 PDF,可能会引起感兴趣的读者的探索...)
我向很多人寻求帮助,OCR是唯一解决这个问题的方案。
我曾经遇到同样的问题。将文件上传至Google Drive,用Google Docs打开,并从中复制文本,这对我有用。