2.2 PDF文档结构 PDF的文档结构是PDF文件内容的逻辑组织结构。它反映了文件体中间接对象间的等级层次关系。PDF的文档结构是一种树型结构,如图2。树的根节点就是PDF文件的根对象。根节点下有四个子树:页面树(Pages tree)、书签树(out line tree)、线索树(Articleth reads)、名字树(named Destination)。其中在页面树中,所有页面对象都在树的叶子节点,树中的子节点将继承父节点的各属性值作为相应属性的缺省值。书签树中则按树型层次等级关系将书签(booKmarK)组织起来。书签建立了书签名与一个具体页面上的位置的关联,它使得用户可以按书签名字来访问文档的内容。由于书签可以有层次,能用来组织文档的目录,所以有时又将书签树称作目录树。线索树则将文章线索及线索下的文章块(Article bead)按树型结构组织起来进行管理。文章块是预定义好的一个页面上的区域,它一般是读者感兴趣的一段文字或图像,它的目的是让整个可视区只显示这个特定区域而避免页面其他部分的干扰。文章线索将预定义好的文章块串接起来,如果读者按文章线索进行阅读,则浏览器只按顺序显示该线索中的各文章块,从而使读者只读自己感兴趣的内容,而不必按顺序阅读。至于名字树则是建立了一种字符串(名字)和页面区域的对应关系,树中的叶子节点保存字符串及对应的页面区域,而非叶子节点只是一种索引,以便让应用程序能快速存取到叶子节点。名字树的作用就是让PDF文件中的其他对象能够用字符串名字来代表一个页面区域。 2.3 PDF中的资源 PDF中的页面内容(如文字、图形、图像)都保存在页面对象的contents关键字对应的流对象(下面简称内容流)中。内容流中用到了很多基本对象如数字、字符串,这些都是用直接对象表示的。但还有其他一些对象如字体,本身就是用字典对象(Dictionary)或流对象(stream)来表示的,无法用直接对象表示,而内容流中又不能出现任何间接对象(否则无法与内容本身的数据区分),于是就将这些对象命名,并在内容流中用相应的名字来表示它们。这些用名字来表示的对象就称作命名资源(named resources)。 在页面对象中有一个资源项(resource skey),该项列出了内容流中用到的所有资源,并建立了一个资源名字与资源对象本身的映射表。 PDF中的命名资源有:指令集(Procset)、字体(font)、色彩空间(color space)、外部对象(xobJect<包括image、form和Pssegment>)、扩展的图形状态(extended graphics state)、底纹(Pattern)、用户扩展标记列表(Property list)。 非命名资源有:encoding、font Descriptor、halftone、fuction、CMAP。由于非命名资源都是被隐含引用的,因此没有命名的需要。 2.4 PDF页面描述指令 PDF一共有60个页面描述指令。这60个页面描述指令描述了页面上的一系列图形对象。这些图形对象可分为四类:路径对象(Path object),文本对象(text object),图像对象(image object),外部对象,参见图3。它是构成所有页面的基本元素。 |