【问题标题】:Copy+pasting text from PDF results in garbage从 PDF 复制+粘贴文本会导致垃圾
【发布时间】:2011-02-24 22:50:19
【问题描述】:

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

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

"┤xDn║if|d├gDF"Ti&cD╬lh d FÁhis~n ╗xd f«"d┤ffih »h"

“10a61a91a22a25a3a27a17a23a20a8a13a14a61a25a17”

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

谁能帮帮我???

【问题讨论】:

  • 有时,如果不使用 OCR(光学字符识别),您根本无法将文本输出。这听起来像是其中之一。

标签: pdf pdfbox


【解决方案1】:

通常在这种情况下,您无法从 Acrobat (Reader) 窗口中选择、复制和粘贴文本,但有另一个选项可能仍然有效:

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

您将拥有文件中所有页面的所有文本,并且需要找到您最初想要复制'n'paste 的位置——因为它不如直接复制'n'paste 舒服。但它的工作更可靠....

它也适用于 Linux 上的 acroread(但您必须从文件菜单中选择 'Save as text...')。

更新

您可以使用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+ 以及 sub 列中的 yes 条目所示)、Helvetica 和 @ 987654331@.
  • 这两种字体的类型都是TrueType
  • 两种字体都使用WinAnsi 编码(字体编码将PDF 源代码中使用的字符标识符映射到应绘制的字形)。 但是,仅对于字体 /Helvetica,PDF 中有一个/ToUnicode 表可用(对于/Helvetica-Bold,没有),如uni 列中的yes/no 所示)。

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

缺少特定字体的/ToUnicode 表几乎总是可以确定使用该字体的文本字符串无法从 PDF 中提取或复制“n”粘贴。 (即使有一个/ToUnicode存在,文本提取仍可能会造成问题,因为该表可能已损坏、不正确或不完整——正如在许多真实世界的 PDF 文件中所看到的那样,并且上面链接的 GitHub 存储库中的一些配套文件也证明了这一点。)

【讨论】:

【解决方案2】:

如果能够在 Adob​​e Reader 中成功选择并复制文本——表明 PDF 确实包含文本对象——但如果复制的文本看起来像一堆乱码,则无法将复制的文本粘贴到记事本中,那么问题可能与所选文本使用的 CMap 有关。

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 您如何测试这是否适用于 OP 的 PDF?我没有看到链接。
    • @RadLexus 他没有提供文件是吗?我有同样的问题,它帮助了我。没有理由拒绝恕我直言。
    • @Michel 因为他没有提供文件,你怎么能声称Chrome 确实复制了正常可读的字符? (我没有投反对票。但结合您的评论,我真的考虑过。
    • 我希望我有一个公开的示例 PDF 来证明这一点(至少对于某些文档)。
    • 我可以确认它有效,我无法在此处粘贴文本,因为文档是机密文件,但在尝试从 Adob​​e Reader 复制粘贴时出现乱码,在使用 Chrome 的原生 PDF 查看器时出现标准文本。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 您如何测试这是否适用于 OP 的 PDF?我没有看到链接。
      【解决方案6】:

      处理此问题的最佳方法是(假设您有 Adob​​e Acrobat 或类似的东西,不确定 Reader 是否可以这样做)将文档另存为 JPEG。然后将所有图片重新编译成一个pdf,然后使用OCR功能在页面中查找文本,然后就可以复制粘贴文本了。

      【讨论】:

        【解决方案7】:

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

        【讨论】:

        • 我正在考虑使用 OCR 解决这些文件的问题。
        • 这实际上是一个非常具有误导性的答案。文本和矢量艺术都是 PDF 世界中的一等公民。问题不在于这是矢量格式,问题在于某些 PDF 编写者没有输入所有必要的信息才能正确复制和粘贴。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-15
        相关资源
        最近更新 更多