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

时间:2010-05-28 01:36:40

标签: 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阅读器)进行复制粘贴。在这个阅读器中查看它们已启用,但在选择其内容并复制到剪贴板后,我得到相同的错误文本(如上所述 - 非语义正确的字符串或数字和字母串)。

有人能帮助我吗?

7 个答案:

答案 0 :(得分:6)

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

PDF规范提供了许多显示textual content and the related extraction of the text content的选项。 CMap指定从字符代码到字符选择器的映射。 PDF规范概述了一些预定义的CMap,但也可以嵌入其他CMap。

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

答案 1 :(得分:4)

在这种情况下,如果您无法从Acrobat(阅读器)窗口中选择“复制”文本,那么还有其他选项可以使用:

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

你将拥有文件中所有页面的所有文本,并且需要找到你想要最初复制'n'paste的地点 - 只要它不像直接copy'n'paste那样舒服。但它的工作更可靠......

它也适用于Linux上的acroread(但您必须从文件菜单中选择'另存为文本...'。)

更新

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

这是一个示例输出,它演示了很可能发生文本提取问题的位置。它使用来自 GitHub-Repository 的这些手工编码的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

如何解读此表?

  • 以上PDF文件使用两种子格化字体(由BAAAAA+CAAAAA+前缀表示其名称,以及yes中的sub条目(),HelveticaHelvtica-Bold
  • 这两种字体都是TrueType类型。
  • 两种字体都使用WinAnsi编码(字体编码将PDF源代码中使用的字符标识符映射到应绘制的字形)。 但是,仅对于字体/Helvetica,PDF中有/ToUnicode表(/Helvetica-Bold没有),如yes / no所示在uni - 列中。

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

特定字体的缺失/ToUnicode表几乎总是一个确定的指示,即使用此字体的文本字符串无法从PDF中提取或复制。 (即使某个/ToUnicode表格 ,文字提取仍可能造成问题,因为此表可能已损坏,不正确或不完整 - 如许多现实世界中所见PDF文件,以及上面链接的GitHub存储库中的一些配套文件也证明了这一点。)

答案 2 :(得分:1)

创建的PDF是什么。某些PDF不包含任何编码信息,只包含绘制数据的数据。所以没有办法提取数据。

答案 3 :(得分:1)

在Chrome(内部PDF浏览器)中作为Gmail附件打开时,复制会复制正常的可读字符!

当我遇到这个问题并for others as well时,它对我有用。我认为Chrome PDF查看器会自动使用the Google Drive OCR ...它就像魔术一样!

答案 4 :(得分:0)

选择要复制的文字。 右键点击 选择选项"将选择导出为" 在对话框中,选择文件名并将新文件另存为RTF格式(RTF) 打开RTF查看您的文字!

答案 5 :(得分:0)

解决这个问题的最佳方法是(假设你有Adobe Acrobat,或类似的东西,不确定Reader是否可以这样做)将文档保存为JPEG。然后将所有图像重新编译为单个pdf,然后使用OCR功能在页面中查找文本,然后您可以复制并粘贴文本。

答案 6 :(得分:-2)

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