从乱码PDF中提取文本

时间:2012-08-29 18:30:20

标签: pdf file-format text-analysis

我有一个包含有价值的文字信息的PDF文件。

问题是我无法提取文本,我得到的只是一堆乱码。如果我将PDF阅读器中的文本复制并粘贴到文本文件中,也会发生同样的情况。甚至文件 - >在Acrobat Reader中另存为文本失败。

我已经使用了所有可以使用的工具,结果是一样的。我相信这与字体嵌入有关,但我不知道到底是什么?

我的问题:

  • 这个奇怪的文字杂乱的罪魁祸首是什么?
  • 如何从PDF中提取文本内容(以编程方式,使用工具,直接操作位等)?
  • 如何修复PDF不能复制?

3 个答案:

答案 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.pdfbad2.pdf,文本提取仅对两种字体中的一种成功,而另一种则失败,因为只有一种字体具有/ToUnicode表。

Kurt Pfeifle最近创建了一个 series of hand-coded PDF files ,以展示PDF源代码中现有的,错误的,操纵的或缺失的/ToUnicode表的影响。这些PDF经过广泛评论,适合在文本编辑器的帮助下进行探索。以上pdffonts输出示例是在这些手动编码文件的帮助下创建的。 (还有一些PDF显示不同的结果,有兴趣的读者可能想要探索...)

答案 1 :(得分:11)

我去了很多人寻求帮助,而OCR是解决这个问题的唯一方法

答案 2 :(得分:2)

我遇到了同样的问题。将其上传到Google云端硬盘,使用Google文档打开并从中复制文本对我有用。