pdf文档格式入门教程

一.前言

PDF是基于PostScript文本描述语言,PDF特点有

1.跨平台

2.包含多种类型的内容

3.实时的合作编辑

4.数字签名保证安全性

5.安全和许可保证相关权限

6.方便残疾人的阅读

7.对其它文件格式和应用程序的重用

二.语法

应该从4个方面来理解语法

1.对象

2.文件结构

3.文档结构

4.内容流

PDF并不局限于ASII字符,包括任意的8位字符,但是字符串和流建议用ASCII表示PDF字符集分成3种regular,delimiter,white-space.

PDF 8种基本数据类型

1.Boolean values

2.Integer and real numbers,默认为实数

3.Strings,可以写成两种方式(文本),<十六进制数字>,可以使用\表示跨行,转义字符的16

进制可以表示非ASCII字符

https://www.360docs.net/doc/c915879794.html,s,名字对象总是以/开始

5.Arrays,可以由不同的对象构成,

6.Dicitionaries,键必须是一个名字,是单重集

7.Streams,PDF可以读取流对象以增量的方式,且大小没有限制,而字符串对象必须一次

性完全读入,

8.The null object

2.1 文档页面

注:如果一个PDF文件包含二进制数据,那么建议报头那行之后应紧紧跟着一行至少包含四个二进制字符的评论,也就是,字符的代码是128或更大。这样确保文件传输应用程序在检测文件开头部分数据时能够采取恰当的操作来确定是把文件内容当作纯文本文件还是二进制数据。

文档页面通过页面树结构来访问,该结构定义了文档中页面的顺序。该树结构允许PDF应用程序,使用很小的内存,就能快速打开一个上千页的文档。树型结构包含2种节点--中间节点称为页树型结构节点,和叶节点称为页面对象。应用程序应准备处理构成节点的树型结构的任何格式。最简单的结构是仅包含一个页面树节点,直接指向所有的文档页对象。

2.2 内容流和资源

内容流是描述页面外观和其它图形数据元素的主要手段。内容流取决于所载信息相关的资源词典,这两个对象相结合形成一个自我包含的实体。一个内容流是一个PDF流对象,它的数据由一系列描述在页面上绘图的图形数据元素的指令构成。这些指令以PDF对象形式呈现,使用同样的对象语法。然而尽管文档整体上是一个静态的,随机访问的数据结构,但是内容流中的对象将会按照顺序被解析。

1.一个页面可以由一个或多个内容流表示.

2.内容流可以独立表示对象(Form Xobject, Patterns, Type3 字体, 外观流)

3.内容流可以被编码FlateDecode, 在解析PDF文件中的FlateDecode过滤器时存在整数溢出。FlateDecode过滤器中可指定多个参数,之后在算术运算中使用了这些参数值计算所要分配的堆缓冲区的字节数。这个计算可能溢出,导致分配了不充分的堆缓冲区。处理PDF文档中的TrueType字体和JBIG2数据时存在内存破坏。

4.内容流中的操作数在操作符之前(后缀表示法),为了便于程序实现.

5.内容流中操作符的操作数只能是直接对象,间接对象和对象的引用都是不允许的。在某些情况下,操作符必须指向一个定义在内容流外的PDF对象,例如字体字典或图像数据流。

6.一个内容流中的命名资源是由资源字典来定义,资源字典列举了内容流中操作符需要的指定资源和指向所需要的名称。比如,如果一个文本操作符在内容流中出现需要某一个字体,内容流资源字典可以将名称Font1 与相应的字体字典结合起来。文本操作符可以使用这个名称指向相应的字体。

资源字典可以通过以下方法中的一种与内容流结合:

1.作为页面Contents选项的值的内容流,(由于页面Resource 属性是可继承性,它可能就位于某个页面对象的父节点中).

2.对于其他内容流,流字典的Resources选项指定资源字典。这个适合于指定Form XObjects 的内容流,pattern,Tpye3 字体,和标注外观流。

3.Form XObject或Type3字体字形描述可能缺省Resources选项在这种情况下,可以在使用表单或字体的页面的Resources 选项中查询资源。但不建议用这种方法。

4.过滤器过滤器可以串联,基本上可以分成两类

<4.1>ASCII过滤器,可以将任意的8位数据编码成ASCII文本形式.对于加密过的PDF文件没有作用

<4.2>解压过滤器对于压缩过的数据,

?交叉引用表(Cross-reference Table)中包含允许随机访问文件应有的间接对象的信息,从而在定位某一特定对象时不必去读整个PDF文件。

每一个PDF文件均应该包含一张交叉引用表,由一个或多个部分(sections)组成。如果没有更新信息扩充到PDF文件,则交叉引用表表仅包含一个部分(section)以对象编号0开始,每更新一次文件就在该文件的交叉引用表表中增加一个部分。

三.图形

1.Pdf将符号当做一般的图形来对待

相关文档
最新文档