2024年3月11日发(作者:)

一个简单的PDF文件结构的分析

Adobe的PDF参考告诉我们一个PDF文件可以通过下面4个方面来理解:

1.对象, 一个PDF文档是由一个由基本数据类型组成的数据结构。

2.文件(物理结构), 决定对象是如何存放在一个PDF文件中的, 它们是如何被访问的,如何被

更新的。这个结构是独立于对象的语义的。

3.文档结构, 说明一些基本的对象类型是如何来表现PDF文档的成分的:页,字体,批注,和另外

一些内容。

4.内容流.一个PDF文件内容流包含一系列的指令,描述页面的外观或其他图形实体的外观和文件

内容。

1.PDF格式和HTML,XML格式:

一个PDF文档从根本上来说是一个8字节序。其实PDF格式和我们已经熟知的HTML,XML等结构

化的文件格式一样,包含有关键字,分隔符,数据等等。

不同的是PDF文件是按照二进制流的方式保存的,而html文件则是文本方式保存的。XML文件一

般只包含数据本身,并没有把如何显示的信息放在其中,因此要显示一个XML文件还需要一个Sc

hema文件才能显示,否则看到的将是所有的字节流;HTML包含了数据的同时也包含了一些关于如

何显示的信息,但是HTML是基于文本存放的,是可读的,你打开一个HTML文件就能知道所有显

示在浏览器里得文字。 另外就是HTML不能包含二进制流,它对图像文件的引用都是通过链接的,

全部是外部文件的方式来实现的。

2.PDF规范的发展

PDF规范从1993年到现在,已经有过7个版本,六次版本升级,从最初的pdf1.0.6版本到现在的

PDF1.6, 每次的版本升级都会加入一些新的特性,PDF参考说明书也是从最初的100多页到现在的

1000多页,但是PDF文件格式的主要特性还是没有改变,可以这么理解,PDF1.6是PDF1.0的扩

展集,学习了PDF1.0以后也能基本上理解PDF1.6的内容。 因此说我下面的例子是基于一个PDF

1.0的最简单的一个PDF文件的分析。

PDF规范的发展升级:

1.1 1995 加入了文档加密(40字节),线索树,名字树,链接,设备独立色彩资源。

1.2 1996 表单, 半色调屏幕,和其他的一些高级色彩特性, 对中文,日文和韩文的支持

1.3 2000 数字签名, 逻辑结构, JavaScript, 嵌入式文件,Masked Images, 平滑阴影, 支持 C

ID字体的附加色彩。

1.4 2001 文件加密 (128 字节), 标签式 PDF, 访问控制,透明,元数据流

1.5 2003 文档加密 (公钥), JPEG 2000 压缩, 可选的内容组,附加的注解类型

1.6 2005 文档加密 (AES),增加最大文件支持,加入3D支持,额外的注解类型

3.PDF文件的基本组成:

一个PDF文件从大的方面来说分4个部分:

l 文件头,指明了该文件所遵从的PDF规范的版本号,它出现在PDF文件的第一行。

l 文件体,PDF文件的主要部分,由一系列对象组成。

l 交叉引用表,为了能对间接对象进行随机存取而设立的一个间接对象的地址索引表。

l 文件尾,声明了交叉引用表的地址,即指明了文件体的根对象(Catalog),从而能够

找到PDF文件中各个对象体的位置,达到随机访问。另外还保存了PDF文件的加密等安全信息(以

后详细讨论)。

如下图:

图1