2013-03-25 68 views
1

我试图更好地了解PDF如何存储文本。一般来说,当从MS Word等应用程序创建PDF时(或者在我的情况下,SQL Server Reporting Services)时,PDF如何存储文本?如果原始PDF文档是从图像创建的,我希望在这种特定情况下,生成的文档不会被OCR处理。PDF如何存储文本

为了更详细一点,我试图了解PDF的文本提取器是如何工作的。我最初对PDF的理解是,它存储了(PostScript)有关如何将文档的“图像”绘制到页面或打印机上的说明,以及文档本身没有包含实际文本。随后,我认为文本提取器可能会对这些指令进行反向工程,以生成PDF将以其他方式生成的文本。不过,我对此没有信心。

+0

那么你有什么看?显然不是PDF规范或维基百科文章。 – 2013-03-27 14:04:02

+2

我很好奇:这个“脱离主题?”究竟如何? – 2013-03-28 14:56:03

回答

5

PDF包含几种不同类型的对象;不仅是矢量或光栅绘图指令。特别是文本由文本元素表示。这些包括应使用特定字体在特定位置绘制的字符串。

从PDF中提取文本可能是一件复杂的事情,因为文件格式是面向页面布局的。文本元素可以是整个段落,也可以是单个字符。如果不同的字体混合在一起,即使一个单词也可能由多个文本元素组成。而且,字符不一定以诸如Unicode的标准编码进行编码。它们可以以特定字体的特定方式进行编码。

如果你足够幸运对付标签PDF文件,如PDF/APDF/UA,因为文本跨度能够被识别,并被定义为Unicode字符映射文本提取可以方便很多。

维基百科没有完整的规范,但没有作一个介绍:http://en.wikipedia.org/wiki/Portable_Document_Format#Text

+0

所以可以肯定地说,因为文本元素仅仅告诉渲染引擎绘制什么,这就是为什么当你从PDF中提取文本时没有上下文的原因? – 2013-03-25 19:30:04

+1

你可以这么说。 PDF表示“这是一段文字”,但它不会告诉你它是段落,标题还是表格。这使得从PDF中提取纯文本变得复杂。 – Joni 2013-03-25 19:33:45

+1

@Joni,它可能会变得更糟,你可能会得到一个带有减少的字体信息的PDF,在这种情况下,你甚至无法知道哪个Unicode或ANSI文本字符属于特定的PDF字符。它也可以变得更好,你可能有一个带标签的PDF,其中可能包含段落/标题/行信息,但在通用应用程序中,你不能假设任何东西。 – yms 2013-03-25 19:53:26