PDF文档格式.docx
- 文档编号:9897120
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:21
- 大小:105.01KB
PDF文档格式.docx
《PDF文档格式.docx》由会员分享,可在线阅读,更多相关《PDF文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
PDF文档格式
PDF文档格式
前言
PDF简介
PDF全称PortableDocumentFormat,译为可移植文档格式,是一种电子文件格式。
这种文件格式与操作系统平台无关,也就是说,PDF文件不管是在Windows,Unix还是在苹果公司的MacOS操作系统中都是通用的。
这一特点使它成为在Internet上进行电子文档发行和数字化信息传播的理想文档格式。
越来越多的电子图书、产品说明、公司文告、网络资料、电子邮件开始使用PDF格式文件。
PDF格式文件目前已成为数字化信息事实上的一个工业标准。
Adobe公司设计PDF文件格式的目的是为了支持跨平台上的,多媒体集成的信息出版和发布,尤其是提供对网络信息发布的支持。
为了达到此目的,PDF具有许多其他电子文档格式无法相比的优点。
PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。
该格式文件还可以包含超文本链接、声音和动态影像等电子信息,支持特长文件,集成度和安全可靠性都较高。
PDF文件使用了工业标准的压缩算法,通常比PostScript文件小,易于传输与储存。
它还是页独立的,一个PDF文件包含一个或多个“页”,可以单独处理各页,特别适合多处理器系统的工作。
此外,一个PDF文件还包含文件中所使用的PDF格式版本,以及文件中一些重要结构的定位信息。
正是由于PDF文件的种种优点,它逐渐成为出版业中的新宠。
PDF规范的发展
PDF规范从1993年到现在,已经有过8个版本,七次版本升级,从最初的pdf1.0.6版本到现在的PDF1.7,每次的版本升级都会加入一些新的特性。
PDF规范的发展升级:
版本
新加特性
1.1
加入了文档加密(40字节),线索树,名字树,链接,设备独立色彩资源
1.2
表单,半色调屏幕,和其他的一些高级色彩特性,对中文,日文和韩文的支持
1.3
数字签名,逻辑结构,JavaScript,嵌入式文件,MaskedImages,平滑阴影,支持CID字体的附加色彩
1.4
文件加密(128字节),标签式PDF,访问控制,透明,元数据流
1.5
文档加密(公钥),改良的压缩技术,JPEG2000压缩,可选的内容组,附加的注解类型
1.6
文档加密(AES),增加最大文件支持,加入3D支持,额外的注解类型
1.7
改进评注(Comment)与保全(Security)的支援,3D的支援功能也获得改善
项目简介
……..
PDF文件格式
a.header:
内含版本资讯。
b.body:
内含实际的文件内容。
c.cross-referencetable(简称xreftable):
内含对象参照的相关资讯。
d.trailer:
内含指向xreftable、body区的重要相关资讯
(1)标准的pdf文档格式
PDF区域内容呈现方式
PDF是以行的方式来呈现资料的,每一行的结束字符,可以是CarriageReturn(ASCII13)、也可以是LineFeed(ASCII10)、或是两者的组合(ASCII13紧接着ASCII10)。
各行内的资料,若遇到%字符,表示该行从%字符后面的所有的资料都是注解,必须加以略除,但有一个例外,那就是流对象(streamobject)的内容,并非以行的方式呈现,必须另行处理。
另外要注意的是,PDF里的资料是大小写有关的。
PDF文件头(header)
PDF文件的首行就是header部分,声明PDF文件的版本号
header只有一行注解文字,且固定以”%PDF-“开头,后面紧接着PDF的版本
例如:
%PDF-1.3
文件主干部分(body)
一个文件的主干部分包括表示文档内容的对象。
对象是文档的基本类型,表示文档的各个组成部分,如字体,页面,和实例图形。
从PDF1.5开始,主干部分也可以包含对象流,每个对象流都包含一系列间接对象。
参照表(Cross-ReferenceTable)
参照表包含的信息允许对文件中的间接对象进行随意访问,以便不需要阅读整个文件即可定位任何特殊对象了。
(从PDF1.5开始,某些或所有的参照表信息也可以被含在参照流中。
参照表是PDF文件唯一有固定格式的一部分,每个参照表部分都从一个包含关键字xref的行开始。
跟着这个行的是一个或多个参照子部分,这些分部可以以任何顺序出现。
子部分的构造有益于逐步更新,因为它允许一个新的参照部分附加到PDF文件中来,而包含的选项紧紧只用于已经被附加或删除的对象。
对一个从未被更新过的文件,参照部分只包含一个子部分,它的对象编号从0开始。
每个参照表项目固定20byte,
其格式如下:
Byte
内容
0-9
对象所在的文件位置,靠右,不足时补0
10
空白字符
11-15
generationnumber,靠右,不足时补0,表示对象的修改次数
generationnumber<=65535,一但达到这个数字,该对象编号便不能再使用,而必须另行增加一个编号
16
空白字符
17
n表示对象使用中,f表示对象未被使用(free)
18-19
空白与换行字符
以下便是一个xreftable的例子:
xref--------------------------------------------------------------参照表开始的的关键字
03------------------------------------------0(开始的对象号),3(后跟的对象个数)
00000000365535f---------------------对象的在文件中的位置;对象的生成号;对象的状态(f/n)
00000012700000n
00000000000001f
51
00000434600000n
这个Cross-ReferenceTable有两个参照子部分:
第一个参照子部分是指出了对象0,1,2在文件中的位置(3,127,0)以及说明0,2对象未被使用(f)。
第二个参照子部分是指出了对象5在在文件中的位置(4346),以及说明了对象正在使用(n)
trailer区域
PDF文件跟踪器使得应用程序在阅读文件时能够快速的搜索到参照表和某个特殊对象的位置。
应用程序应从尾段开始阅读PDF文件。
文件的最后一行只包含文件的结束符号,即%%EOF.〕
前面两行包括关键字startref和字节偏移值--从文件开始部分到最后面参照表部分中的关键字xref的开始部分。
放置在startref行前面的是跟踪器字典,由关键字trailer和紧跟后面的<<键值对..>>
组成
trailer区块的内容如下:
trailer
<<
trailer资料
>>
startxref
xreftable开始的文档位置
%%EOF
trailer资料主要由{/属性名称属性值}*所组成,以下便是一个例子:
/Size22
/Root20R
/Info10R
/Prev408
下表是trailer中各属性的意义:
Trailer字典内容列表
KEY
TYPE
VALUE
Size
integer
(必选项)整个PDF文件的对象个数
ID
array
分别表示旧ID与新ID
Prev
integer
如果有,后跟数字表示下一个交叉引用表的位置;没有,表示最后一张交叉表
Root
dictionary
(必选值)文件里存放Catalog的对象编号
Info
dictionary
表示文件里的摘要资讯所在对象编号
Encrypt
dictionary
表示PDF档有加密,其后接的词典资料,便是用来解密用的
整个读取trailer和xreftable的过程应为:
(1)由档尾trailer区块里找到startxref,取得第一个参照表开始的文档位置
(2)移到该参照表的位置,开始读取xreftable内容
(3)读取后面紧接着的trailer区块内容
(4)找寻其后紧接的trailer区块中是否有Prev属性,没有即结束
(5)如果有Prev,则其后的数字视为下个xreftable的文档位置,回到步骤2
对象流(ObjectStreams)
PDF1.5引进了一个全新的流概念,对象流,它包含了一系列PDF对象。
对象流的用途是允许压缩更多数目的PDF对象,以此来大量减少PDF文件大小。
流中的对象都是指压缩对象。
任何一个PDF对象都可以出现在对象流,以下几种情况例外
●流对象
●生成编号非0的对象
●一篇文档的加密字典
●表示对象流字典中Length选项值的对象
除了流的标准关键字外,对象流字典还描述了包含一下选项
对象流专用选项
KEY关键字
TYPE类型
TYPE类型
Type
Name
(必选)Objstrm,表示该对象含有对象流
N
Integer
(必选)对象流中压缩对象的个数
First
Integer
(必选)首个压缩对象的字节偏移量(在解压后的流中)
Extends
Stream
(可选)一个引用对象流,当前对象留被认为是一个扩充流
例子解析:
/n3:
说明对象流中对象的个数为3
/first24:
说明对象流中第一个压缩对象在流中的位置(解压缩后的)
1101254713665:
对象流中包含的3个对象11,12,13,并指出了对象相对于流中第一个对象的的偏移地址(0,547,665)
参照流(Cross-ReferenceStreams)
从PDF1.5开始,参照信息被存储在参照流中而不是参照表中。
参照流提高以下优势:
●更简洁紧凑的表示参照信息。
●可以访问存储在对象流中的压缩对象,并允许以后加入新的参照选项类型。
参照流是流对象,包含一个字典和一个流对象,参照流字典相当于trailer,
流对象相当于参照表。
如以下例子所示:
注意现在紧跟着关键字startxref的值是参照流的偏移值而不是关键字xref。
对于那些全部用参照流的文件(PDF1.5及以上)关键字xref和跟踪器不再被使用。
因此,除了startxrefaddress%%EOF片断和标注特例外,一个PDF1.5的文件完全是一序列的对象。
参照流字典Cross-ReferenceStreamDictionary
除了对所有流和trailer字典的通用选项外,参照流还包含下表所示的选项
参照流字典专用附加选项
KEY
TYPE
说明
type
name
值必须是xref(说明该流为参照流)
size
integer
说明参照表中对象的个数
index
array
一个数组,第一个值表示为第一个对象的编号,第二个值表示参照流中对象的总数
prev
integer
从文件开始部分到先前参照流的开始部分的子节偏移值。
本选项与跟踪器字典(表3.13)中的Prev选项作用相同,(只有当文件有多个参照流的时候才会呈现;在混合参照文件(pdf1.4)中没有意义)
W
array
参照流数据Cross-ReferenceStreamData
参照流中的每个选项都有一个或多个数据域,第一个数据域指派选项类型,在PDF1.5中,只允许类型0,1,和2。
其它的值都被看成是空值对象引用,这样就允许以后定义新的选项类型
数据以渐进的数据域编号编写;每个数据域的长度受W选项中对应的值制约,每个为位置对应的值说明:
参照流字典专用附件选项
key
field
说明
0
1
值为0,表示该对象闲置
2
下一个闲置对象的对象编号
3
对象编号被再次使用的生成编号。
1
1
值为1,对象正在使用中(不是压缩的对象)
2
对象的偏移值,从文件的开始部分开始
3
对象的生成编号,缺省值为:
0
2
1
值为2,对象为压缩对象
2
存储对象的对象流的对象编号
3
对象流中对象的属性
与PDF1.4兼容CompatibilitywithPDF1.4
不支持PDF1.5的应用程序无法访问被参照流引用的对象。
如果一个文件专门使用参照流,那么它就没有办法在这样的应用程序中打开。
PDF1.4中可以建立“混合-参照”的文件,这个文件除了包含由标准参照表和参照流中的对象,还有一个附加选项
混合-引用文件中的跟踪器字典的附件选项
key
Type
value
XRefStm
integer
参照流在文件中的位置
PDF文件内置对象
PDF文件支持8种基本类型对象:
●布尔指
●整数和实数
●字符串
●名称
●数组
●字典
●对象
●流
布尔值对象
只有两个值:
true和false
PDF提供两种数字对象:
整数和实数(含负数),实数必须以小数点的形式出现。
注意:
PDF不支持非十进制基数(比如16#FFFE)或指数格式(比如6.02E23)的数字
字符串对象
字符串对象有两种表示法,一般可见字符用括号(),16进制表示法用角号<>表示
例如:
(Thisisastring)
<4E6F762073686D6F7A206B6120706F702E>
文字串(LiteralStrings)
文字串是用含在圆括号内的任意字符编写成的。
任何一个字符都可以出现在串里面,除了必需做特别处理的单括号和反斜线符号,串中成对的括号不需要特别处理
如果一行太长写不下去,则可以用反斜线(backslash,\)做为续行动作,例如:
(These\
twostrings\
arethesame.)
等于下面这行:
(Thesetwostringsarethesame.)
另外,也可使用反斜杠做为转义字符,转义字符如下表所示,若出现没有在下表中的转义字符,将会被忽略不显示。
转义字符
说明
\n
换行(Linefeed)
\r
归位(Carriagereturn)
\t
定位(Horizontaltab)
\b
倒退(Backspace)
\f
跳页(Formfeed)
\(
左括号(Leftparenthesis)
\)
右括号(Rightparenthesis)
\\
反斜杠(Backslash)
\ddd
8进位转换字符(Charactercodeddd(octal))
其中8进位转换字符并不一定要3个数字字符,只要遇到非0-7的数字,便视为数字结束(但一般建议是补足3个)。
必须注意的是,8进位转换出来的字符是允许ASCII0的NULL字符的。
另外,在()里的%并不视为批注起始字符,而是视为字符串资料的一部份,同时在()里若还有成对的(),可不必使用转义字符,在处理时要特别注意此一情况。
十六进制串(HexadecimalStrings)
至于16进制的资料必须是成对的,若出现不成对的情况,则必须自动补0,例如<901FA>,需算成有3个byte的字符串,分别为90、1F及A0。
字符串里的空白字符(比如空格键,Tab键,回车键,行填充符,和表格填充符)需略过。
name对象
名称对象的起始字符为/,其后紧接著名称字符串(大小写有关)。
其不能出现空白字符
(参照下表“空白字符”)
名称字符串里的字符必须在ASCII33~255之间,且不能是%()<>[]{}/#这几个字符。
如果名称中希望含有其它不合法的字符时(ASCII0的NULL字符除外),必须采用#加两个16进位数字的方式来表示字符码。
例如想加入一个空白字符,则可用/Adobe#20Green,实际名称便是AdobeGreen。
空白字符
十进制
名字
0
NULL(NUL)
9
Tab(HT)
10
Linefeed(LF)
12
Formfeed(FF)
13
Carriagereturn(CR)
32
Space(SP)
数组对象
一个PDF数组的元素可以是数字,串,字典或其它对象组合,以及其它数组
一个数组被写成是含在方括号([and])中的一序列对象
PDF只支持一维数组。
更高维的数组可以用数组嵌套数组的方式来构建。
数组对象的例子
[5493.14false(Ralph)/SomeName]
词典对象
字典对象是一个包含多部分对象的组合表格,称为字典条目。
每个条目的第一个元素为关键字,第二个元素是值。
关键字必需是一个名称值可以为任何对象。
值为空值的字典条目相当于无条目
注意:
同一个字典中的两个条目不可以有相同的关键字。
如果一个关键字多次出现,那么它的值是未给定定义的。
字典对象是构建PDF文档最主要的部分。
由于字典中的每个条目指定一个属性的名称和值,这样它们就经常被用来把复杂对象的属性聚集并联系在一块
字典的编写方式是:
一序列含在书名号中的关键字与值的配对。
比如:
<
/Subtype/DictionaryExample
/Version0.01
/IntegerItem12
/StringItem(astring)
/Subdictionary<
/Item2true
/LastItem(not!
)
/VeryLastItem(OK)
>>
>>
注意:
不要混淆书名号与单括号(
流对象
流对象主要记录一连续的任何资料(例如影像资料),其格式如下:
流词典对象
stream
流资料
Endstream
所有的流都必须是间接引用对象,而且流字典也必须是一个间接引用对象。
紧随着流字典的关键字stream后面必须跟一个行末标识符(要么包含一个回车符和是行末填充符,要么只是一个行末填充符),不会是单独一个回车符。
构成流的序列字节,位于关键字stream和endstream之间;
流字典指定确切的流的信息。
另外,从PDF1.2版本开始,字节可能被包在外部文件中,流内容就是流字典指定文件,并且在stream和endstream的任何字节都被忽略。
流字典通用属性
KEY关键字
TYPE类型
TYPE类型
Length
Integer
(必选值)从关键字stream之前的行开始部分到关键字endstream之前的最后字节之间的字节编号。
(endstream之前也有可能有附加EOL标识,它不含在计数之内,也不是流数据逻辑部分。
)
Filter
Name/array
指明处理流的过滤器的名称
DecodeParms
字典或数组
Filter指明的过滤器的参数
F
Filespecification
流资料所在的文件名称,此时该流资料应被略过
FFilter
nameorarray
同Filter,但作用于F制定的流资料
FDecodeParms
字典或数组
用来说明FFilter指明的过滤器的参数
DL
Integer
(1.5以后)一个表示解码(无过滤器)流中字节编号的非负整数。
比如,它可以被用来测定是否有足够磁盘空间将流读取到一个文件。
这个值只被看成是一个线索;某些流过滤器,不可能准确测定这个值
空对象
以null来表示
各种对象的辨识方法
(1)以(开头:
字符串对象
(2)以/开头:
名称对象
(3)以<开头:
若后面不接<,便是字符串对象(见<<开头的说明)
(4)以<<开头:
词典对象,若之后再接stream便是流对象
(5)以负号开头:
后面接数字便是数字对象
(6)以数字开头:
数字对象,整数对象必须再往后看两个对象,才能决定是否为对象参用形式
(7)以f开头:
若是false便是布尔对象
(8)以n开头:
若是null便是空对象
(9)以t开头:
若是true便是布尔对象
(10)以[开头:
数组对象
(11)其他:
不合法的对象
过滤器
PDF支持一个标准过滤器集,主要分成两种:
●ASCII过滤器能解码那些已经编码成ASCII文本中的任意8位二进制数。
注意,ASCII过滤器对于已经加密过的PDF文档没有意义。
●解压缩过滤器可以解码已经压缩过的数据。
压缩的数据通常是8位的二进制格式,即使源数据是ASCII文本。
(压缩对于大的采样图形特别有用,因为它减少了存储需求和传输时间。
有一些类型的压缩是有损耗的,那就意味着一些数据在编码过程中会丢失掉,导致了压缩数据的质量下降。
压缩过程没有数据丢失被称为无损耗的)。
标准过滤器
过滤器
参数
解释
ASCIIHexDecode
No
对用ASCII16进制形式表示的编码数据进行解码,重新产生原来的二进制数据
ASCII85Decode
No
对用ASCII85形式表示的编码数据进行解码,重新产生原来的二进制数据
LZWDecode
Yes
对用LZW(Lempel-Ziv-Welch)自适应压缩方法编码的数据进行解码,重新产生原来的文本或二进制数据
FlateDecode
Yes
(1.2)对用zlib/deflate压缩方法编码的数据进行解码,重新产生原来的文本或二进制数据
RunLengthDecode
No
对用byte-orientedrun-length算法编码的数据进行解码,重新产生原来的文本或二进制数据。
(特别对于单色图形数据或包含频繁运行单字节值的)
CCITTFaxDecode
Yes
对用CCITT传真标准编码的数据进行解码,重新产生原来的数据
DCTDecode
Yes
对用基于JPEG标准的DCT技术压缩的数据进行解压缩,重新产生接近原图的图像样本数据
JPXDecode
No
(1.5)对用基于wavelet的JPEG200标准压缩编码的数据进行结压缩,重新产生原来的图像数据。
JBIG2Decode
Yes
(1.4)对用JBIG2标准压缩的编码数据进行解码,重新产生原来的单色(每点一位)图像数据。
(或者产生接近原图的数据)
Crypt
Yes
(1.5)对用安全处理器加密的的数据进行解密,重新产生跟加密前一样的数据
(1)ASCIIHexDecode过滤器
ASCIIHex是把每个字节通过两个(0–9and和A–F或a–f)字符表示的编码方式
ASCIIHex的编码方式即是将输入字符编成2个16进位码,然后以>做为结束,因此在解压时,只需每次读取两个字符进行解码还原即可,但在取字符时,要注意需略过空白字符(含换行字符等)
具体参考PDF_reference1.7(page69)
(2)ASCII85Decode过滤器
具体参考PDF_reference1.7(page69)
(3)LZWDecode和FlateDecode过滤器
具体参考PDF_reference1.7(page71)
(4)RunLengthDecode过滤器
具体参考
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PDF 文档 格式
![提示](https://static.bdocx.com/images/bang_tan.gif)