我有一个包含有价值的文本信息的 PDF 文件。
问题是我无法提取文本,我得到的只是一堆乱码。如果我将文本从 PDF 阅读器复制并粘贴到文本文件中,也会发生同样的情况。甚至Acrobat Reader 中的文件 -> 另存为文本也会失败。
我已经使用了所有可以使用的工具,结果是一样的。我相信这与字体嵌入有关,但我不知道究竟是什么?
我的问题:
- 这个奇怪的文字乱码的罪魁祸首是什么?
- 如何从 PDF 中提取文本内容(以编程方式、使用工具、直接操作位等)?
- 如何修复PDF在复制时不乱码?
我有一个包含有价值的文本信息的 PDF 文件。
问题是我无法提取文本,我得到的只是一堆乱码。如果我将文本从 PDF 阅读器复制并粘贴到文本文件中,也会发生同样的情况。甚至Acrobat Reader 中的文件 -> 另存为文本也会失败。
我已经使用了所有可以使用的工具,结果是一样的。我相信这与字体嵌入有关,但我不知道究竟是什么?
我的问题:
某些 PDF 文件是在没有特殊信息的情况下生成的,这些信息对于从中成功提取文本至关重要。甚至通过 Adobe 工具。基本上,此类文件不包含字形到字符的映射信息。
此类文件将很好地显示和打印(因为字符的形状已正确定义),但无法正确复制/提取其中的文本(因为没有关于使用的字形/形状的含义的信息)。
例如,当使用“最小文件大小”预设时,Distiller 会生成此类文件。
恐怕除了 OCR 之外,没有其他方法可以从此类文件中检索文本。我们最近发布了关于如何在 .NET 中 OCR PDF的指南。
原始答案提到了“有关使用的字形/形状含义的信息”。此信息应包含在称为/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最近创建了一系列手工编码的 PDF 文件,以展示 PDF 源代码中现有的、有缺陷的、被操纵的或缺失/ToUnicode
的表格的影响。这些 PDF 包含大量注释,适合在文本编辑器的帮助下进行探索。上面pdffonts
的输出示例是在这些手工编码文件的帮助下创建的。(还有一些显示不同结果的 PDF,有兴趣的读者可能想探索一下……)
我向很多人寻求帮助,OCR 是解决这个问题的唯一方法
我有同样的问题。将其上传到 Google Drive,使用 Google Docs 打开并从那里复制文本对我有用。