一个简单的 PDF 文件结构的分析
Adobe 的 PDF 参考告诉我们一个 PDF 文件可以通过下面 4 个方面来理解:
1. 对象, 一个 PDF 文档是由一个由基本数据类型组成的数据结构。
2. 文件(物理结构), 决定对象是如何存放在一个 PDF 文件中的, 它们是如何被访
问的,如何被更新的。这个结构是独立于对象的语义的。
3. 文档结构, 说明一些基本的对象类型是如何来表现 PDF 文档的成分的:页,字体,
批注,和另外一些内容。
4. 内容流.一个 PDF 文件内容流包含一系列的指令,描述页面的外观或其他图形实体
的外观和文件内容。
但是当时对我来说要看懂这几行字是有很大的困难的,需要了解确切含义,必须看完后
面的几十页上百页的内容并且要分析一下一个实际的 PDF 文件才能完全领会它的意思。
后来经过长时间的文档阅读,相关开发,并且具体地分析 PDF 文件后才把 PDF 文件的
语法,文件的解析搞清楚。虽然说学习是痛并快乐着,但是对于当时我来说真的希望有一
个人能够告诉我一个简单的例子,通过一个简单的例子来描述 PDF 的基本组成,它的解
析原理和过程。因此下面我主要将以一个简单的例子来说明 PDF 的主要特性并给出一个
简单的 PDF 文件的全景。
在继续阅读该文章前,我们先问自己下面的几个问题:
l 你了解至少一种文件格式吗?(例如 HTML)
l 为什么要学习 PDF 的相关知识?
如果你对第一个问题的答案为“是”, 并且第二个问题你能给出一个非常明确的答案,那么
这篇短文是适合你的。否则,如果对任何一种格式都不了解,建议先了解一下 HTML,
或 XML,你可以从这两种语言里得到很多启发,对学习 PDF 的构成有很大的好处;如果
你不清楚你要学习是为了什么,那么我就认为你学习没有目的性和动力,说不定你今天学
了以后明天就忘得一干二净。
1.PDF 格式和 HTML,XML 格式:
一个 PDF 文档从根本上来说是一个 8 字节序。其实 PDF 格式和我们已经熟知的 HTML,
XML 等结构化的文件格式一样,包含有关键字,分隔符,数据等等。
不同的是 PDF 文件是按照二进制流的方式保存的,而 html 文件则是文本方式保存的。X
ML 文件一般只包含数据本身,并没有把如何显示的信息放在其中,因此要显示一个 XM
L 文件还需要一个 Schema 文件才能显示,否则看到的将是所有的字节流;HTML 包含了
数据的同时也包含了一些关于如何显示的信息,但是 HTML 是基于文本存放的,是可读
的,你打开一个 HTML 文件就能知道所有显示在浏览器里得文字。 另外就是 HTML 不能
包含二进制流,它对图像文件的引用都是通过链接的,全部是外部文件的方式来实现的。