PDF结构
PDF是一种文件格式,其内容可以是任何文本、图像的组合,它不依赖于产生或显示它的程序、硬件、以及操作系统,不仅如此,它还具备精准的排版能力,这也是其核心所在。想要更深入的了解PDF,首先应该明确其组成(物理结构和逻辑结构)。从物理结构的层面,我们可以了解到一个PDF文件中的对象时如何被访问的,在逻辑结构层面,则向大家展示了PDF文件中对象的表现形式。从以下四个方面可以更好的理解PDF的语法。2012年6月英语四级真题及答案
1、对象
PDF文档可以理解为一个数据结构,该数据结构是数据对象所属基本类型的一个小集合。
在最低层,PDF文档是一个8位字节的序列,这些字节可以根据后面的语法规则分组为不同的标识,一个或多个标识便构成了更高层的实体,即对象,这也是构成PDF文档的基本数据值。
2、文件结构(物理结构)
文件结构向我们阐述了每个单独的对象,是如何被有效的组织起来的。一个规范的PDF 文档一般包含四个重要元素:
a、文件头(Header):只有一行,用以说明该PDF文档对应的PDF规范的版本。
b、文件体(Body):包含组成该文档的对象。
c、交叉引用表(Cross-reference table):包含该文档中间接对象的信息,是PDF文件内
部一种特殊的文件组织方式,方便对象的访问与查找(类似ELF 文件的查找方式)。
d、文件尾(Trailer):指明交叉引用表以及某些特殊对象在文件中的位置。
3、文档结构
一分钟英语自我介绍文档结构告诉我们怎样使用基本对象类型表示一个PDF文档中的单元,例如:页面、字体、注解等。
4、内容序列
PDF内容序列是一系列用于构画页面或其他图形实体外观形状的指令。
中秋节英语作文
首先我们看一个简单的纯文本类型的PDF文件。首行%PDF-1.7属于文件头部分。需要注意的是,从1.4版本以后,PDF文件的版本并不唯一的只是在首行进行表示了,也可能在后面改写(catalog的version词条),所以,在解析PDF文件时,如果版本高于或等于1.4,应该再比较一下catalog里面的version,取其中高一点的版本。
%PDF-1.7
这是一个PDF中的对象,其特点是:以obj开始,以endobj结尾,每个对象都有一个唯一的编号和自动变化的生成号。其中1表示对象编号,0表示生成号。“<< >>”称为字典条目,里面有许多“键-值”成对的信息。Catalog是整个PDF逻辑结构的根节点,Catalog 字典信息较多,其中Pages、Outlines、URI、Metadata 等是一些主要的字段。对象中的R是一个引用关键字,3 0 R表示对对象3的间接引用。
这两个对象就是上面所说的根节点Catalog 的两个字段Outlines 和Pages 。Outlines (书签)是PDF 为了方便用户跳转而设计的,其显示效果为树状结构,可以从它这里很直观的看到文件结构,每一个Outlines 又包含Type 、First 、Last 、Count 四个键值对,第二个对象中的Count 值为0,表明没有书签;Pages 字段是所有页面的描述集合,其本身就是一个字典,包含Parent 、Kids 、Count 主要字段,其中Kids 是一个间接对象组成的数组,[4 0 R]就是一个数组。
gsm modem这是一个PDF 中的第四个对象(页面对象),从/Parent 3 0 R 可以看出它属于第三个页面组对象。Resources 列出了这个页面所包含的资源,如内容以及字体类型;MediaBox 标明了页面的大小(磅值);Contents 里面包含的是页面的具体内容,5 0 R 是对第五个对象的间接引用。
这是一个流对象,该对象是Page 页面的具体内容。流对象的构成首先是一个字典,此处为<</Length 44>>,每一个流对象都有一个入口Length ,这是二进制流的长度(字节),后面紧跟的是流数据,位于stream 与endstream 之间。/F1 26 Tf 表示选择由“7 0 obj ”定义的字体,字号大小为26;Tr 前面的数字代表字体修饰样式的编号(类似的文本状态操作还有Tc 、Tw 、Tz 等);rg 和RG 分别设置填充颜色和边框颜色;260 500 Td 表明了字体在页面显示的位置,页面左下角为原点。
分析过文件结构之后,我们便可以很快的从一个文件中划分各个对象了。PDF 文件共支持8种基本对
象类型,分别为:布尔值、整数和实数、字符串、名称、数组、字典、流以及空对象。下面主要介绍一下上面的例子所涉及到的几种对象。
瑜伽健身球
字符串对象(String Objects )
英语学习计划书范文字符串对象是有一连串的无符号整数值(0-255)字节组成的,其创建方法有两种:
第一种,用圆括号()来引用含在里面的文字符号,又称为“文字串”。在一个文字串中,反斜杠被用为转义字符用在各种不同的目的上,比如包括换行符,非打印ASCII 字符,单括号,或反斜杠本身。当一个文字串过长时,通常使用反斜线将其跨行分开,此时,反斜线等同于续行符。
广东话拼音这是一个字体对象,/Subtype/Type1表示字体类型为1型(还有0型、3型等),BaFont 属于字体的补充名字,Encoding 为可选项,当遇到与内置译码过程不同时,用于指明一个预定义的译码过程。当然,对于不同类型的字体,还有很多字体字典中的项目,例如:FirstChar 、LastChar 、Width 等。
这是PDF 文件的“交叉引用表”,该表只使用了一个子段(也可划分为多个字段的形式),0是该子段的第一个对象的起始号,后面是连续的对象个数,下面的每行分别表示各个对象的具体信息,前10个数字代表这个对象相对文件头的偏移地址,后面5位数字代表生成号,最后一位标明是否被引用(n 表示被间接引用,f 相反)。
Trailer 是文件尾部分的标识,其后面紧跟一个字典,字典内部包含若干键-值对。其中,Size 表示所有间接对象的个数;Root 的值的类型为Catalog 字典的对象号;当然,还有一些键-值对,如:Prev ,当文件有多个对象集合、交叉引用表和Trailer 是,才会使用该键,它表示前一个相对于文件头的偏移位置(必须为直接对象)。
Startxref 后面的数字表示最后一个交叉引用表相对于
武汉职业培训学校
文件起始位置的偏移量。
第二种,使用16进制数据并用尖括号<>包含,也即是“16进制字符串”。我们需要注意两点:在一对<>中,每两位数字表示一个字节,其中出现的任何空白字符都会被忽略;如果十六进制数的个数为奇数个,那么,最后一位将被自动补零填充。
例如上面示例中的5 0 obj,其中的文本流既可以写成(Welcome To Foxit!),也可以写成< 57 65 6C 63 6F 6D 65 20 74 6F 20 46 6F 78 69 74 21>,两种写法得到的结果是一样的。
字典对象(Dictionary Objects)
字典对象使用双尖括号定义,其可以理解为一个包含对象对的表,这些对象对又被称为入口。每个入口的第一个元素是键,第二个元素是值(可以是任何对象)。需要注意的是,一个字典对象中不能有
两个入口具有相同的键。如果相同键出现多次,值被认为未定义。字典对象在PDF文档是主要的组成部分。它被用于为复杂对象定义属性,如文档中的字体、页面。上面示例中的页面对象(4 0 obj)便是字典对象组成的。
rejecting留学中介流对象(Stream Objects)
流对象与字符串对象类似,也是一个字节序列,每个流包含一个字典,这些字节序列紧随字典之后。但流与串也存在不同之处:流对象可以逐步读取,而串对象必须全部一次读取完成。需要注意的是,所有的流对象都必须是间接引用对象,而且流字典也必须是一个间接引用对象。