0

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

我目前正在使用 ABCPdf 工具,并且我有一个代码示例来读取 pdf 内容,但它只能读取由 Adob​​e 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();
        }

我有其他由 Adob​​e 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)

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

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

谢谢,

4

4 回答 4

0

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

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

于 2012-06-12T16:18:09.090 回答
0

因此,您只是看不到一些可读文本的事实可能是由使用的奇怪编码引起的。我们通常假设使用 ASCII 字符集进行编码。想象句子“Hello world”(ASCII 到 HEX 将是: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

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

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

于 2013-04-09T20:29:29.907 回答
0

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

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

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

如果将 Adob​​e Distiller 配置为生成尽可能小的文件,则它生成的文件没有正确提取文本所需的信息。

编辑:

如果您需要从有意义的文本中区分垃圾字符,那么您应该实现一种衡量文本可读性的算法。

一些链接:

于 2012-06-13T10:51:55.207 回答
-1

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

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

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

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

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

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

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

于 2013-06-20T11:49:38.820 回答