什么是PDF

标签:
pdf文件对象pdf文档pdf组成pdf结构it |
分类: IT |
一、简介
二、PDF语法
1.对象(Objects):
一个PDF 文件是由基本类型的数据对象组成的一个数据结构体。
(1)“常规语法”(Lexical Conventions):
定义对象和描述PDF文件结构的字符一般用ASCII字符集来表示。
特定类型的数据值可以使用ASCII码表示但是一般不用。实际的数据(二进制数),如采样图像,一般为了提高效率直接用二进制表示。
(2)“对象”(Objects):
布尔值(Boolean Objects):true/false
整数和实数(Numeric Objects):
字符串(String Objects):文字字符串(This is
a
字符串中特殊字符“\”:当字符串太长时,可以用“\”连接两行字符串。如:
( These \
two strings \
are the same . )
( These two strings are the same . )
名称(Name Objects):用“/”来定义名称对象,但不是名称的一部分,如/Name1
数组(Array Objects):可以包含数字、字符串、其他对象类型或者其他数组,如
字典(Dictionary Objects):用<<>>表示的键值对, key 必须是name类型。(unlike dictionary keys in PostScript, which may be objects of any type). value 可以是任意类型的对象,包括另一个字典对象。一个字典条目(dictionary entry)的value值为空时,相当于这是一个空的条目。不同的条目Key不可以重复。
<<
/Subtype
/Version
/IntegerItem
/StringItem
/Subdictionary
/Item2
/LastItem
/VeryLastItem
>>
>>
流(Stream Objects):与字符串相同都是字节序列,但是流可以递增阅读,字符串必须全部读完。流没有长度限制,字符串有长度限制。因此,大容量的对象如图片和页面都用“流”来表示。
stream
… Zero or more bytes …
endstream
空对象(Null Object):类型和值不同于任何其他对象,空对象只有一个,用“null”表示。
(3)间接对象(Indirect Objects):
12
( Brillig )
Endobj
(4)过滤器(Filters):
/Filter
2.文件结构(File structure):
(1)首部(one-line header)
(2)文件体(body)
里面由若干个的obj 对象来组成,类似这种形式:
3 0 obj
<<
/Type /Pages
/Count 1
/Kids [4 0 R]
>>
endobj
第一个数字称为对象号,来唯一标识一个对象的,第二个是产生号,是用来表明它在被创建后的第几次修改,所有新创建的PDF文件的产生号应该都是0,即第一次被创建以后没有被修改过。上面的例子就说明该对象的对象号是3,而且创建后没有被修改过。
(3) 交叉引用表(cross-reference table)
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000322 00000 n
0000000415 00000 n
0000000445 00000 n
xref说明一个交叉引用表的开始,交叉引用表的第一行0 8 说明下面各行所描述的对象号是从0开始,并且有8个对象。
0000000000 65535 f,一般每个PDF文件都是以这一行开始交叉应用表的,说明对象0的起始地址为0000000000,产生号(generation number)为65535,也是最大产生号,不可以再进行更改,而且最后对象的表示是f, 表明该对象为free,其实这个对象可以看作是文件头。
0000000009 00000 n就是表示对象1,0000000009是其偏移地址,00000为5位产生号(最大为65535),0表明该对象未被修改过, n表示该对象在使用,区别与自由对象(f),可以更改。
(4)尾部(trailer)
Trailer
<<
/Size 8
/Root 1 0 R
>>
startxref
553
%%EOF
trailer 说明文件尾 trailer对象的开始。
/Size 8说明该PDF文件的对象数目。
/Root 1 0 R说明根对象的对象号为1。
Startxref
553说明交叉引用表的偏移地址,从而可以找到PDF文档中所有对象的相对地址,进而访问对象。
%%EOF为文件结束标志。
(5)对象流(Object Streams):
(6)交叉流(Cross-Reference Streams):
如:
... objects...
12 0 obj
<< /Type /XRef
/Size ...
/Root ...
>>
stream
...
endstream
endobj
... more objects...
startxref
byte_offset_of_cross-reference_stream
%%EOF
3.加密(Encryption):
4.文档结构(Document structure):
2
<<
/Kids
10
]
/Count
>>
endobj
4
<<
… Additional entries describing the attributes of this page …
>>
endobj
10
<<
… Additional entries describing the attributes of this page …
>>
Endobj
5.内容流(Content streams):
文档的每一页用一个或多个内容流来描述,一个内容流被指定的过滤器解码后,根据PDF语法规则来读取。内容流由表示操作符和操作数的PDF对象组成,操作数前面必须要有一个操作符。内容流实例:
1
<<
stream
2
BT
/F1
0
0
72.5
[ ( Unencoded streams can be read easily )
0
[ ( b )
T*
0
[ ( Se )
0
( Some are used for compression and others simply
)
T*
T*
T*
T*
ET
endstream
endobj
内容流中的操作符除了执行内容流中的直接对象,也需要访问间接对象和内容流之外的对象,这些对象就被称为资源。
此外,PDF还提供了公用数据(Common Data)、函数(Functions)和文件规范(File Specifications)等由基本对象组成的一些基本结构对象类型。
PDF对象和语法也用在其他文件格式中,如FDF文件(Forms Data Format)。
三、PDF主要由三项技术组成:
· 衍生自PostScript,可以说是PostScript的缩小版;
· 字型嵌入系统,可使字型随文件一起传输;
· 资料压缩及传输系统。
PDF文件使用了工业标准的压缩算法,通常比PostScript文件小,易于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页”,可以单独处理各页,特别适合多处理器系统的工作。此外,一个PDF文件还包含文件中所使用的PDF格式版本,以及文件中一些重要结构的定位信息。
四、Annotations(标注)
当用户通过点击来激活一个标注,它会展现出与其关联的对象,比如打开一个弹出窗口显示一个文本注释或播放一段声音或动态影音。