如何从由Adobe Distiller工具创建的pdf文件中读取文本

本文关键字:pdf 文件 取文本 读取 创建 工具 Adobe Distiller | 更新日期: 2023-09-27 18:37:07

如何从Adobe Distiller工具创建的pdf文件中读取文本?

目前正在使用ABCPdf工具,我有一个代码示例来阅读pdf内容,但它只能读取由Adobe PDF库创建的pdf中的文本:

   public string ExtractTextsFromAllPages(string pdfFileName)
        {
            var sb = new StringBuilder();
            using (var doc = new Doc())
            {
                doc.Read(pdfFileName);
                for (var currentPageNumber = 1; currentPageNumber <= doc.PageCount; currentPageNumber++)
                {
                    doc.PageNumber = currentPageNumber;
                    sb.Append(doc.GetText("Text"));
                }
            }
            return sb.ToString();
        }

我还有其他由Adobe Distiller创建的pdf文件,但上面的代码不起作用;我的意思是它返回以下似乎已编码的奇怪数据:

'0'a'b'0't'n'0'r'n'0'a'b't'n'n'b'v'f'0't'r'f'b'0'r'0'r'n'v'b'v'f'f'n'r'0'r'0'0'0'b'r'n'0'a'r'0'0'b'r'b'b't'n'r'0'b'r'n't'b'v'n'b'v'v'0'a'b'r'n'r'n'v'r'0'b'b'b'v'r'0'r'n'v'f'r'f'f'r'n !'"'"'v#'t $ %&$% $''v'"% '0( )% ! !'"'"'*$''r'n't $ %&$% $''v'"% '0( 'r'n'f'f'f'f'b'f'f'f'f'a 'b'b'f'f'f!'"'r'n'f'a#$'f'f'f'b'f'f'a%'a 'b'b'f'a'a&'a'a' 'b'a'b'r'n('f)'f)

如何从Adobe Distiller工具创建的pdf文件中读取文本?

可以说,我可以像其他pdf一样使用浏览器轻松打开此类pdf文件。

谢谢

如何从由Adobe Distiller工具创建的pdf文件中读取文本

我在处理PDF时遇到了类似的问题。 我没有使用过 ABCPdf,但您可能想查看 iTextSharp,我之前创建了一个工具来从 PDF 文件中提取字符串,但是如果嵌入字体,您仍然会遇到问题。 如果您能够切换到iTextSharp,这里有一个关于SO的问题,涉及该主题:

在 VB.NET 或 C# 中使用 itextsharp dll 阅读 PDF 内容

首先要尝试的是使用 Adobe Reader 或任何其他 PDF 查看器从 PDF 中复制和粘贴文本。

如果您根本无法复制和粘贴文本,则可以通过文件中的权限禁用文本提取功能。通常权限会被 PDF 库忽略,不会影响文本提取。

如果您可以从文件中复制和粘贴文本,但它看起来乱码/不正确,则 PDF 不包含正确执行文本提取所需的一些信息。此类文件将正确显示

Adobe Distiller 生成的文件不需要正确的文本提取所需的信息,如果它配置为生成尽可能小的文件。

编辑:

如果需要将垃圾字符与有意义的文本区分开来,则应实现一种测量文本可读性的算法。

一些链接:

  • 计算字符串的熵
  • 有没有办法检测像putjbtghguhjjanika这样的字符串?
  • 这个关于文本评分系统的答案

因此,您只是看不到一些可读文本的事实可能是由使用的奇怪编码引起的。我们通常假设使用ASCII卡特拉克器集进行编码。对句子"Hello world"进行成像(ASCII 到十六进制将是:48 65 6C 6C 6F 20 77 6F 72 6C 64)以直截了当的方式,我们假设"H"的含义是48,"e"的含义是65,依此类推。

但是喜欢一个工程师做他自己的字体子集:为了编码"H"作为第一个新兴字母,他使用00,e然后使用01。然后,句子将被编码为 00 01 02 02 03 04 05 03 06 02 07

这将导致几个不可读的字符。就像通过秘密编码表进行编码和解码的古代秘密脚本一样。

您的问题的答案很简单:只有当您知道用于重新组装的正确编码向量时,您才能读取蒸馏器生成的文本。

ABCpdf 可以从所有包含有效文本的 PDF 中提取文本。它可以推断空格、取消连字符、剪辑到感兴趣的区域以及确保您获得的文本与您看到的文本相同所需的许多其他内容。

然而,所有这些都假设PDF是有效的 - 它符合PDF规范 - 它没有损坏。

文本提取问题的最常见原因是标识编码字体损坏。标识编码字体由字形而不是字符代码引用。这些字体包括一个 ToUnicode 映射,以允许将字形 ID 转换为字符。

但是,我们有时会看到已从中删除此条目的文档。这意味着识别字符的唯一方法是对文档进行 OCR 处理。

如果您在 Acrobat 中打开文档并复制文本,则可以自己看到此信息。当您将复制的文本粘贴到记事本等应用程序中时,您将能够看到它是错误的。ABCpdf只是看到与Acrobat相同的内容。

这些文件被如此彻底和有效地篡改的事实可能是故意的。这当然是确保没有人可以复制您的文本的好方法。

我写了ABCpdf .NET文本提取,所以我应该知道。