PDF是如何存储文本的?

12
我尝试更好地了解PDF是如何存储文本的。一般而言,当从MS Word(或我的情况下SQL Server Reporting Services)这样的应用程序创建PDF时,PDF如何存储文本?我希望在这种特定情况下生成的文档不会像从图像创建原始PDF文档那样进行OCR处理。
为了更加详细地了解PDF的文本提取器是如何工作的,我最初的理解是它存储了如何将“图像”绘制到页面或打印机上的(PostScript)指令,并且文档本身并不包含实际文本。随后,我想一个文本提取器可能会反向工程这些指令以生成PDF本来会生成的文本。虽然我对此并不自信。

5
我很好奇:这个问题为什么“不相关”? - Kenneth K.
1个回答

13

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

从PDF中提取文本可能是一个复杂的过程,因为文件格式是面向页面布局的。一个文本元素可以是整个段落,也可以是单个字符。即使是一个单词,如果混合了不同字体,则可能由几个文本元素组成。此外,字符不一定是以标准编码(例如Unicode)编码的。它们可能以特定于特定字体的方式进行编码。

如果您有幸处理Tagged PDF文件,例如PDF/APDF/UA,那么文本提取可能会更加容易,因为文本跨度被标识为这样,并且定义了到Unicode字符的映射。

Wikipedia没有完整的规范,但作为介绍:http://en.wikipedia.org/wiki/Portable_Document_Format#Text


那么可以说,由于文本元素仅告诉渲染引擎在哪里绘制内容,这就是从PDF中提取文本时没有上下文的原因,这样说安全吗? - Kenneth K.
1
你可以这么说。PDF文件中可能会有“一段文字”,但它并没有告诉你这是一个段落、标题还是表格。这使得从PDF中提取纯文本变得复杂。 - Joni
1
@Joni,情况可能比这更糟,你可能有一个字体信息减少的PDF文件,在这种情况下,你甚至无法确定哪个Unicode或ANSI文本字符属于特定的PDF字符。它也可能变得更好,你可能有一个带标签的PDF,其中可能包含段落/标题/行信息,但在通用应用程序中,你不能假设任何东西。 - yms
谢谢 @yms,我会记下来的。 - Joni
2
如果你真的想深入了解它是如何工作和存储的,那么看一下PDF参考中的文本部分可能会很有价值。 - Lyndon Armitage
1
@LyndonArmitage 我开始阅读规范的文本部分。我只是想确认一下我在办公室里说的话(关于PDF 存储文本,而是绘制某些东西的指令,最终会类似于文本)。我已经确认我错了 :) 当我搜索描述PDF如何存储文本的文章时,我没有找到任何直截了当的东西(像马克·斯蒂芬斯的文章)。我的最初搜索规范的结果是ISO网站和250美元的费用。我所寻求的答案并不那么重要! - Kenneth K.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接