pdf 文件格式及对象模型
对象模型
PDF文件主要是由object组成的, 通过object的内部关系形成如下的逻辑结构
/Catalog
/Pages
/MediaBox
/Count
/Kids
其中,
'/'开头的是对象名字,
/MediaBox 是页面大小,
/Count是页数,
/Kids是页对象集合.
页对象如下:
/Page
/Parent
/Resources
/Contents
其中,
/Parent就是/Pages,
/Resources描述各种资源, 比如字体信息,
/Contents是页容, 通常是文字.
文件结构
一个简单的PDF的结构如下:
%PDF-1.3
%XXX
Object1
Object2
Object3
...
ObjectN
xref
trailer
%%EOF
其中,
xref 记录了各个object 在文件中的偏移
trailer 记录了根对象的ID, 通常是 /Catalog
显示PDF 的过程
在这方面, PDF的最大特点是"按需读取", 如下:
* 读 xref, 得到 object id -> offset, 即, 对象及对象在文件中的位置,
* 从 trailer 中读到根对象的 id,
* 根据xref 读取根对象的内容, 由此得到所有页的id
* 根据xref 读取页对象的内容
因为不必解析前面的页, PDF文件可以很快地显示到任何页