从PDF复制+粘贴文本导致垃圾

Mic*_*l_R 12 pdf pdfbox

我正在写硕士论文 - NLP系统.我有一个组件 - 提取器.

它从PDF文件中提取纯文本.有一些PDF文件无法正确提取.Extractor(PDFBox库)返回如下字符串:

"┤xDn║if|d├gDF"Ti&cD╬lhdFÁhis~n╗xdf«"d┤ffih»h"

要么

"10a61a91a22a25a3a27a17a23a20a8a13a14a61a25a17"

我正在检查导致此提取问题的每个文件,并且所有这些文件的文本也无法从PDF Reader(Adobe Reader和FoxIt阅读器)进行复制粘贴.在这个阅读器中查看它们已启用,但在选择其内容并复制到剪贴板后,我得到相同的错误文本(如上所述 - 非语义正确的字符串或数字和字母串).

谁能帮帮我???

Row*_*wan 6

如果能够在Adobe Reader中成功选择和复制文本 - 表示PDF确实包含文本对象 - 但是如果没有看起来像一堆垃圾字符,则无法将复制的文本粘贴到记事本中,那么问题是可能与所选文本使用的CMap有关.

PDF规范提供了许多用于显示文本内容和文本内容的相关提取的选项.CMap指定从字符代码到字符选择器的映射.PDF规范概述了一些预定义的CMap,但也可以嵌入其他CMap.

我的猜测是该文本的CMap损坏或者PDFBox库不支持这个特定的CMap.我建议您尝试使用其他SDK,看看是否有任何不同的结果.


Kur*_*fle 6

在这种情况下,通常情况下,您无法从Acrobat(阅读器)窗口中选择“复制”粘贴文本,但是还有另一个选项可能仍然有效:

  • 打开“文件”菜单,
  • 选择“另存为...”
  • 选择“文本(常规)(*。txt)”
  • 浏览到目标目录,
  • 键入要用于文本文件的名称。

您将拥有文件中所有页面的所有文本,并且需要找到最初要复制粘贴的位置-就此而言,它不像直接复制粘贴一样舒适。但是它的工作更加可靠。

它也可以acroread在Linux上使用(但是您必须从文件菜单中选择“另存为文本...”)。

更新资料

您可以使用pdffonts命令行实用程序来快速分析PDF所使用的字体。

这是一个示例输出,该示例演示了很可能在何处发生文本提取问题。它使用来自GitHub-Repository的这些手动编码的PDF文件之一,该文件是为提供PDF样本文件而创建的,这些PDF样本文件具有良好的注释并且可以在文本编辑器中轻松打开:

$ pdffonts  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
Run Code Online (Sandbox Code Playgroud)

该表如何解释?

  • 上面的PDF文件使用两种子集的字体(如名称的,BAAAAA+CAAAAA+前缀以及列中的yes条目所指示subHelveticaHelvtica-Bold
  • 两种字体均为TrueType
  • 两种字体都使用一种WinAnsi编码(一种字体编码将PDF源代码中使用的char标识符映射到应绘制的字形)。然而,仅对于字体/Helvetica有一个/ToUnicode可用的PDF内部表(为/Helvetica-Bold是没有的),如由所指示的yes/ nouni-column)。

/ToUnicode需要该表来提供从字符标识符/代码到字符的反向映射。

缺少/ToUnicode特定字体的表格几乎总是可以确保使用该字体的文本字符串无法从PDF中提取或复制。(即使/ToUnicode在那里,文本提取仍可能产生问题,因为该表可能会被损坏,不正确或不完整-如被看见在许多现实世界的PDF文件,并且还通过了几个配套文件在上面展示链接的GitHub存储库。)


Gho*_*der -4

PDF 不是文本文档。它更像是一种矢量图形格式,有时可以包含文本。因此,除非您愿意进行 OCR,否则无法从某些文档中提取文本。就是那样子。

  • 这实际上是一个非常误导性的答案。文本和矢量艺术都是 PDF 世界中的一等公民。问题不在于这是一种矢量格式,问题在于某些 PDF 编写者没有输入所有必要的信息以便能够正确复制和粘贴。 (5认同)