PDF文档结构说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lamb7758/article/details/56015876

目录

一、PDF文件格式---------------------------------------------------------------- 2

1.标准的pdf文档格式----------------------------------------------------- 2

2. PDF区域内容呈现方式------------------------------------------------ 2

2.1 PDF文件头(header)----------------------------------------- 2

2.2 文件体(body)------------------------------------------------- 3

2.3交叉引用表(Cross-Reference Table)--------------------- 3

2.文件尾(trailer)--------------------------------------------------- 5

3.对象流(Object Streams)-------------------------------------------------- 7

4.参照流(Cross-Reference Streams)-------------------------------- 9

4.1参照流字典 Cross-Reference Stream Dictionary------- 10

4.2参照流数据 Cross-Reference Stream Data--------------- 11

二、PDF文件内置对象-------------------------------------------------------- 12

1.PDF文件支持8种基本类型对象----------------------------------- 12

1.1布尔值对象------------------------------------------------------- 12

1.2字符串对象------------------------------------------------------- 12

1.3name对象--------------------------------------------------------- 14

1.4数组对象---------------------------------------------------------- 15

1.5词典对象---------------------------------------------------------- 15

1.6流对象------------------------------------------------------------- 16

1.7空对象------------------------------------------------------------- 17

2.各种对象的辨识方法--------------------------------------------------- 17

三、实例分析--------------------------------------------------------------------- 18

1.结构分析------------------------------------------------------------------- 18

1.1文件头------------------------------------------------------------- 18

1.2文件体------------------------------------------------------------- 18

1.3交叉引用表------------------------------------------------------- 19

1.4文件尾------------------------------------------------------------- 20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一、PD一文件格式

1.标准的pdf文档格式

a. header:内含版本资讯。

 

b. body:内含实际的文件内容。

 

c. cross-reference table(简称xref table):内含对象参照的相关资讯。

 

d. trailer:内含指向xref table、body区的重要相关资讯

 

2. PDF区域内容呈现方式

   PDF是以行的方式来呈现资料的,每一行的结束字符,可以是Carriage Return(ASCII 13)、也可以是Line Feed(ASCII 10)、或是两者的组合(ASCII 13紧接着ASCII 10)。各行内的资料,若遇到%字符,表示该行从%字符后面的所有的资料都是注解,必须加以略除,但有一个例外,那就是流对象(stream object)的内容,并非以行的方式呈现,必须另行处理。另外要注意的是,PDF里的资料是大小写有关的。

 

2.1 PDF文件头(header)

      PDF文件的首行就是header部分,声明PDF文件的版本号header只有一行注解文字,且固定以”%PDF-“开头,后面紧接着PDF的版本

例如:

 

%PDF-1.4

 

2.2文件体(body)

    一个PDF文件的文件体包括表示文档内容的对象。对象是文档的基本类型,表示文档的各个组成部分,如字体,页面,和实例图形。从PDF1.5开始,主干部分也可以包含对象流,每个对象流都包含一系列间接对象。

2.3交叉引用表(Cross-ReferenceTable)

      交叉引用表包含的信息允许对文件中的间接对象进行随意访问,以便不需要阅读整个文件即可定位任何特殊对象了。(从PDF1.5开始,某些或所有的参照表信息也可以被含在参照流中。

      交叉引用表是PDF文件唯一有固定格式的一部分,每个交叉引用表都从一个包含关键字xref的行开始。跟着这个行的是一个或多个参照子部分,这些分部可以以任何顺序出现。子部分的构造有益于逐步更新,因为它允许一个新的参照部分附加到PDF文件中来,而包含的选项紧紧只用于已经被附加或删除的对象。对一个从未被更新过的文件,参照部分只包含一个子部分,它的对象编号从0开始。

 

每个参照表项目固定20 byte

 

其格式如下

Byte

内容

0-9

对象所在的文件位置,靠右,不足时补0

10

空白字符

11-15

generation number,靠右,不足时补0,表示对象的修改次数

generation number<=65535,一但达到这个数字,该对象编号便不能再使用,而必须另行增加一个编号

16

空白字符

17

n表示对象使用中,f表示对象未被使用(free)

18-19

空白与换行字符

 

以下便是一个xref table的例子:

 

xref------------------------------------------------------参照表开始的的关键字

0  3-------------------------------0(开始的对象号),3(后跟的对象个数)

000000003 65535 f -------对象的在文件中的位置;对象的生成号;对象的状态(f/n)

000000127 00000 n

000000000 00001 f

5 1

000004346 00000 n

 

这个Cross-ReferenceTable 有两个参照子部分:

 

第一个参照子部分是指出了对象0,1,2在文件中的位置(3,127,0)以及说明0,2对象未被使用(f)。

第二个参照子部分是指出了对象5在在文件中的位置(4346),以及说明了对象正在使用(n)

2.文件尾(trailer)

      PDF文件跟踪器使得应用程序在阅读文件时能够快速的搜索到参照表和某个特殊对象的位置。应用程序应从尾段开始阅读PDF文件。

文件的最后一行只包含文件的结束符号,即%%EOF。前面两行包括关键字startref和字节偏移值--从文件开始部分到最后面参照表部分中的关键字xref的开始部分。放置在startref行前面的是跟踪器字典,由关键字trailer和紧跟后面的<<键值对..>>组成

trailer区块的内容如下

trailer

<< 

trailer资料

>> 

startxref

xref table开始的文档位置

%%EOF

 

trailer资料主要由{/属性名称 属性值}*所组成,以下便是一个例子:

 

/Size 22

/Root 2 0 R

/Info 1 0 R

/Prev 408

 

下表是trailer中各属性的意义:

Trailer字典内容列表

KEY

TYPE

VALUE

Size

integer

(必选项)整个PDF文件的对象个数

ID

array

分别表示旧ID与新ID

Prev

integer

如果有,后跟数字表示下一个交叉引用表的位置;没有,表示最后一张交叉表

Root

dictionary

(必选值)文件里存放Catalog的对象编号

Info

dictionary

表示文件里的摘要资讯所在对象编号

Encrypt

dictionary

表示PDF档有加密,其后接的词典资料,便是用来解密用的

整个读取trailer和xref table的过程应为

 

(1) 由档尾trailer区块里找到startxref,取得第一个参照表开始的文档位置

(2) 移到该参照表的位置,开始读取xref table内容

 

(3) 读取后面紧接着的trailer区块内容

(4) 找寻其后紧接的trailer区块中是否有Prev属性,没有即结束

 

(5) 如果有Prev,则其后的数字视为下个xref table的文档位置,回到步骤2

 

3.对象流(Object Streams)

PDF1.5引进了一个全新的流概念,对象流,它包含了一系列PDF对象。对象流的用途是允许压缩更多数目的PDF对象,以此来大量减少PDF文件大小。流中的对象都是指压缩对象。

任何一个PDF对象都可以出现在对象流,以下几种情况例外

 

l 流对象

l 生成编号非0的对象

l 一篇文档的加密字典

l 表示对象流字典中Length选项值的对象

 

除了流的标准关键字外,对象流字典还描述了包含一下选项

 

对象流专用选项

KEY关键字

TYPE 类型

TYPE 类型

Type

Name

(必选)Objstrm,表示该对象含有对象流

N

Integer

(必选)对象流中压缩对象的个数

First

Integer

(必选)首个压缩对象的字节偏移量(在解压后的流中)

Extends

Stream

(可选)一个引用对象流,当前对象留被认为是一个扩充流

 

例子解析:

/n 3: 说明对象流中对象的个数为3

/first24 :说明对象流中第一个压缩对象在流中的位置(解压缩后的)

11 012 547 13 665:对象流中包含的3个对象11,12,13,并指出了对象相对于流中第一个对象的的偏移地址(0,547,665)

4.参照流(Cross-Reference Streams)

从PDF1.5开始,参照信息被存储在参照流中而不是参照表中。参照流提高以下优势:

l 更简洁紧凑的表示参照信息。

l 可以访问存储在对象流中的压缩对象,并允许以后加入新的参照选项类型。

参照流是流对象,包含一个字典和一个流对象,参照流字典相当于trailer,

流对象相当于参照表。

如以下例子所示:

注意现在紧跟着关键字startxref的值是参照流的偏移值而不是关键字xref。

对于那些全部用参照流的文件(PDF1.5及以上)关键字xref和跟踪器不再被使用。

因此,除了startxref address %%EOF片断和标注特例外,一个PDF1.5的文件完全是一序列的对象。

4.1参照流字典 Cross-Reference Stream Dictionary

      除了对所有流和trailer字典的通用选项外,参照流还包含下表所示的选项


 

参照流字典专用附加选项

KEY

TYPE

说明

type

name

值必须是xref(说明该流为参照流)

size

integer

说明参照表中对象的个数

index

array

一个数组,第一个值表示为第一个对象的编号,第二个值表示参照流中对象的总数

prev

integer

从文件开始部分到先前参照流的开始部分的子节偏移值。本选项与跟踪器字典(表3.13)中的Prev选项作用相同,(只有当文件有多个参照流的时候才会呈现;在混合参照文件(pdf1.4)中没有意义)

W

array

 

 

4.2参照流数据 Cross-Reference Stream Data

      参照流中的每个选项都有一个或多个数据域,第一个数据域指派选项类型,在PDF1.5中,只允许类型0,1,和2。其它的值都被看成是 空值对象引用,这样就允许以后定义新的选项类型

数据以渐进的数据域编号编写;每个数据域的长度受W选项中对应的值制约,每个为位置对应的值说明:

参照流字典专用附件选项

key

field

说明

 

0

1

值为0,表示该对象闲置

2

下一个闲置对象的对象编号

3

对象编号被再次使用的生成编号。

 

1

1

值为1,对象正在使用中(不是压缩的对象

2

对象的偏移值,从文件的开始部分开始

3

对象的生成编号,缺省值为:0

 

2

1

值为2,对象为压缩对象

2

存储对象的对象流的对象编号

3

对象流中对象的属性

 

二、PDF文件内置对象

1.PDF文件支持8种基本类型对象

   l 布尔指

   l 整数和实数

   l 字符

   l 名称

   l 数组

   l 字典

   l 对象

   l

1.1布尔值对象

只有两个值:truefalse

PDF提供两种数字对象:整数和实数(含负数),实数必须以小数点的形式出现。

注意:PDF不支持非十进制基数(比如16#FFFE)或指数格式(比如6.02E23)的数字

1.2字符串对象

      字符串对象有两种表示法,一般可见字符用括号(),16进制表示法用角号<>表示

例如:

 

(This is a string)

<4E6F762073686D6F7A206B6120706F702E>

 

文字串LiteralStrings

 

文字串是用含在圆括号内的任意字符编写成的。任何一个字符都可以出现在串里面,除了必需做特别处理的 单括号 和反斜线符号,串中成对的括号不需要特别处理
如果一行太长写不下去,则可以用反斜线(backslash,\)做为续行动作,例如:

 

(These \

two strings \

are the same.)

 

等于下面这行:

 

(These two strings are the same.)

 

另外,也可使用反斜杠做为转义字符,转义字符如下表所示,若出现没有在下表中的转义字符,将会被忽略不显示。

 

 

转义字符

说明

\n

换行(Line feed)

\r

归位(Carriage return)

\t

定位(Horizontal tab)

\b

倒退(Backspace)

\f

跳页(Form feed)

\(

左括号(Left parenthesis)

\)

右括号(Right parenthesis)

\\

 

反斜杠(Backslash)

\ddd

8进位转换字符(Character code ddd (octal))

       其中8进位转换字符并不一定要3个数字字符,只要遇到非0-7的数字,便视为数字结束(但一般建议是补足3个)。必须注意的是,8进位转换出来的字符是允许ASCII 0的NULL字符的。另外,在()里的%并不视为批注起始字符,而是视为字符串资料的一部份,同时在()里若还有成对的(),可不必使用转义字符,在处理时要特别注意此一情况。

 

十六进制串(Hexadecimal Strings)

 

      至于16进制的资料必须是成对的,若出现不成对的情况,则必须自动补0,例如<901FA>,需算成有3个byte的字符串,分别为90、1F及A0。字符串里的空白字符(比如空格键,Tab键,回车键,行填充符,和表格填充符)需略过。

1.3name对象

      名称对象的起始字符为/,其后紧接著名称字符串(大小写有关)。其不能出现空白字符(参照下表“空白字符”)。名称字符串里的字符必须在ASCII 33~255之间,且不能是%()<>[]{}/#这几个字符。

如果名称中希望含有其它不合法的字符时(ASCII 0的NULL字符除外),必须采用#加两个16进位数字的方式来表示字符码。例如想加入一个空白字符,则可用/Adobe#20Green,实际名称便是Adobe Green。

 

空白字符

十进制

名字

0

NULL(NUL)

9

Tab(HT)

10

Line feed(LF)

12

Form feed(FF)

13

Carriage return(CR)

32

Space(SP)

1.4数组对象

一个PDF数组的元素可以是数字,串,字典或其它对象组合,以及其它数组;

一个数组被写成是含在方括号([and ])中的一序列对象;

PDF只支持一维数组。更高维的数组可以用数组嵌套数组的方式来构建。

 

数组对象的例子

[549 3.14false (Ralph) /SomeName]

1.5词典对象

      字典对象是一个包含多部分对象的组合表格,称为字典条目。每个条目的第一个元素为关键字,第二个元素是值。关键字必需是一个名称值可以为任何对象。值为空值的字典条目相当于无条目

注意同一个字典中的两个条目不可以有相同的关键字。如果一个关键字多次出现,那么它的值是未给定定义的。

      字典对象是构建PDF文档最主要的部分。由于字典中的每个条目指定一个属性的名称和值,这样它们就经常被用来把复杂对象的属性聚集并联系在一块

 

字典的编写方式是:一序列含在书名号中的关键字与值的配对。比如:

<</Type /Example

/Subtype/DictionaryExample

/Version0.01

/IntegerItem12

/StringItem(a string)

/Subdictionary<< /Item1 0.4

/Item2true

/LastItem(not!)

/VeryLastItem(OK)

>>

>>

注意:不要混淆书名号与单括号(< and >), 单括号是分隔一个十六进制串的

1.6流对象

流对象主要记录一连续的任何资料(例如影像资料),其格式如下:

 

流词典对象

stream

流资料

Endstream

所有的流都必须是间接引用对象,而且流字典也必须是一个间接引用对象。

紧随着流字典的关键字stream后面必须跟一个行末标识符(要么包含一个回车符和是行末填充符, 要么只是一个行末填充符),不会是单独一个回车符。构成流的序列字节,位于关键字 stream 和endstream 之间,流字典指定确切的流的信息。

流字典通用属性

KEY关键字

TYPE 类型

TYPE 类型

Length

Integer

(必选值)从关键字stream之前的行开始部分到关键字endstream之前的最后字节之间的字节编号。(endstream之前也有可能有附加EOL标识,它不含在计数之内,也不是流数据逻辑部分。)

Filter

Name /array

指明处理流的过滤器的名称

DecodeParms

字典或数组

Filter指明的过滤器的参数

F

File specification

流资料所在的文件名称,此时该流资料应被略过

FFilter

name or array

同Filter,但作用于F制定的流资料

FDecodeParms

字典或数组

用来说明FFilter指明的过滤器的参数

DL

Integer

(1.5以后)一个表示 解码(无过滤器)流中字节编号的非负整数。比如,它可以被用来测定是否有足够磁盘空间将流读取到一个文件。这个值只被看成是一个线索;某些流过滤器,不可能准确测定这个值

 

1.7空对象

以null来表示

 

2.各种对象的辨识方法

(1) 以(开头:字符串对象

(2) 以/开头:名称对象

(3) 以<开头:若后面不接<,便是字符串对象(见<<开头的说明)

(4) 以<<开头:词典对象,若之后再接stream便是流对象

(5) 以负号开头:后面接数字便是数字对象

(6) 以数字开头:数字对象,整数对象必须再往后看两个对象,才能决定是否为对象参用形式

(7) 以f开头:若是false便是布尔对象

(8) 以n开头:若是null便是空对象

(9) 以t开头:若是true便是布尔对象

(10) 以[开头:数组对象

(11) 其他:不合法的对象

三、实例分析

1.基本PDF文件结构分析

1.1文件头

内容:

%PDF-1.4

意义:以”%PDF-“开头,后面紧接着PDF的版本号1.4,标识该实例文件尾PDF1.4版本

1.2文件体

内容:

%

2 0 obj                                     #Object对象,其中2是Obj顺序号,0是Obj版本号

<</Length 78/                        # #流对象的长度

Filter/

FlateDecode                          #流对象的压缩方式为zip 的压缩算法

>> 

Stream                                    #流对象

x3P0T5T0P04_\\N!\f

!)\_@i__CPH!$KR3$_$___a__

Endstream                              #流对象结束标志

endobj

4 0 obj

<</Parent 3 0 R              #其父对象号为3 以及Pages 对象

/Contents 2 0 R/             #页面内容对象的对象号为2

Type/Page/

Resources                       #该页包含的资源

<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/

Font<</F1 1 0 R>>                              #字体的类型

>> 

/MediaBox[0 0 595 842]/                    #页面显示大小,以像素为单位

Rotate 90>>                                         #旋转90度

endobj

1 0 obj

<</BaseFont/Helvetica/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>

endobj

3 0 obj

<</Type/Pages/              #对象类型为pages

Count 1/                                  #页码数量为1

Kids[4 0 R]>>                         #kids 对象说明它的子页对象为4

endobj

5 0 obj

<</Type/Catalog/                   #对象类型为目录对象(Catalog)

Pages 3 0 R>>

endobj

6 0 obj

<</Producer(iText 5.3.2 2000-2012 1T3XT BVBA\(AGPLversion\))/    #PDF制造程序

ModDate(D:20170117135923+08'00')/                                            #pdf修改时间

CreationDate(D:20170117135923+08'00')>>                                 #pdf创建时间

endobj

意义:文件体包括表示文档内容的对象。对象是文档的基本类型,表示文档的各个组成部分,如字体,页面,和实例图形。

1.3交叉引用表

内容:

Xref                    #表示交叉引用表开始

0 7                     #0 表明引用表描述的对象从0 开始,7 说明共有7 个对象

0000000000 65535 f      #一般pdf 都是以这行开始交叉引用表的,起始地址0 和产生号

0000000326 00000 n     

0000000015 00000 n

0000000414 00000 n

0000000159 00000 n

0000000465 00000 n

0000000510 00000 n

意义:

交叉引用表包含的信息允许对文件中的间接对象进行随意访问,以便不需要阅读整个文件即可定位任何特殊对象了。

1.4文件尾

内容:

Trailer                 #说明文件尾对象开始

<</Root 5 0 R           #说明根对象号为12

/ID[<5b8ddc49e2b4b9f1e7f7ebeb1a341470><181621ccb8119e9a276d185458fd2c41>]                           #分别表示旧ID与新ID

/Info 6 0 R/            #表示文件里的摘要资讯所在对象编号

Size 7                  #7说明PDF 文件对象数目

>> 

%iText-5.3.2

startxref

663                     #663 为交叉引用表的偏移地址,此处为十进制表示

%%EOF                   #结束标识

 

2.可视化数据结构

2.1说明属性可视化

2.1.1结构中说明属性数据体现

使用Adobe Acrobat Pro 打开文件,点击“文件”-->“属性”,可以查看文档属性。

说明属性实例图:

 

对应关系:

说明属性信息与文档结构标识对应关系

属性名

对应结构标识

创建日期

CreationDate(D:20170117135923+08'00')

修改日期

ModDate(D:20170117135923+08'00')

PDF版本

%PDF-1.4

页数

Count 1

页面大小

MediaBox[0 0 595 842]

 

2.1.2结构中字体属性数据体现

字体属性示例图:

 

对应关系表:

字体属性信息与文档结构标识对应关系

属性名

对应结构标识

字体

<</BaseFont/Helvetica/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>

四、Adoble签名结构分析

1.签名后的文件结构

%PDF-1.4

%忏嫌

7 0 obj

<</F132/Type/Annot/Subtype/Widget/Rect[295 400 595 0]/FT/Sig/DR<</XObject<</FRM5 0 R>>>>/T(Signature1)/V 1 0 R/P 8 0 R/AP<</N 6 0R>>>>

endobj

1 0 obj

<</Reference[<</Data9 0 R/Type/SigRef/TransformParams<</Type/TransformParams/V/1.2/P3>>/DigestMethod/MD5/DigestLocation[00]/DigestValue(aa)/TransformMethod/DocMDP>>]/Contents<3082052906092a864886f70d010702a082051a30820516020101310b30……….

c268d9cc44429c6da8bab73ebda92cd192ea5316868eb92cfe4b397f674ce191c76ddcb085ab4b4c82dec88600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>/Type/Sig/SubFilter/adbe.pkcs7.sha1/Name(rlk)/M(D:20170118155335+08'00')/ByteRange[0 354 3134 2818 ]                                                             /Filter/Adobe.PPKMS>>

endobj

10 0 obj

<</BaseFont/Helvetica/Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding/Name/Helv>>

endobj

11 0 obj

<</BaseFont/ZapfDingbats/Type/Font/Subtype/Type1/Name/ZaDb>>

endobj

4 0 obj

<</BaseFont/Helvetica/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>

endobj

2 0 obj

<</Type/XObject/Resources<</ProcSet[/PDF /Text /ImageB /ImageC /ImageI]>>/Subtype/Form/BBox[0 0 100100]/Matrix [1 0 0 1 0 0]/Length 18/FormType 1/Filter/FlateDecode>>stream

x淪Up    v蔍趟?

endstream

endobj

5 0 obj

<</Type/XObject/Resources<</XObject<</n23 0 R/n0 2 0 R>>/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]>>/Subtype/Form/BBox[00 300 400]/Matrix [1 0 0 1 0 0]/Length 47/FormType1/Filter/FlateDecode>>stream

x?P0T?T0P060

K

endstream

endobj

6 0 obj

<</Type/XObject/Resources<</XObject<</FRM5 0 R>>/ProcSet [/PDF /Text /ImageB /ImageC/ImageI]>>/Subtype/Form/BBox[0 0 300 400]/Matrix [1 0 0 1 0 0]/Length29/FormType 1/Filter/FlateDecode>>stream

x?T0T0

endstream

endobj

3 0 obj

<</Type/XObject/Resources<</ProcSet[/PDF /Text /ImageB /ImageC /ImageI]/Font<</F1 40 R>>>>/Subtype/Form/BBox[0 0 400 300]/Matrix [1 0 0 1 0 0]/Length104/FormType 1/Filter/FlateDecode>>stream

x渟

?T0

endstream

endobj

12 0 obj

<</Producer(iText?5.3.2?000-2012 1T3XT BVBA\(AGPL-version\))/ModDate(D:20170118155335+08'00')/CreationDate(D:20170117152115+08'00')>>

endobj

13 0 obj

<</BaseFont/Helvetica/Type/Font/Subtype/Type1/Encoding/WinAnsiEncoding>>

endobj

14 0 obj

<</Length78/Filter/FlateDecode>>stream

x?P0T?T0P0?

endstream

endobj

15 0 obj

<</ITXT(5.1.3)/Type/Pages/Count1/Kids[8 0 R]>>

endobj

8 0 obj

<</Parent15 0 R/Type/Page/Contents 14 0R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F1 130 R>>>>/MediaBox[0 0 595 842]/Annots[70 R]/Rotate 90>>

endobj

9 0 obj

<</Perms<</DocMDP1 0 R>>/Type/Catalog/AcroForm<</Fields[7 0R]/DR<</XObject<</FRM 5 0 R>>/Font<</Helv 10 0 R/ZaDb11 0 R>>>>/DA(/Helv 0 Tf 0 g )/SigFlags 3>>/Pages 15 0R>>

endobj

xref

0 16

000000000065535 f

000000016800000 n

000000359000000 n

000000433900000 n

000000350200000 n

000000380900000 n

000000408700000 n

000000001500000 n

000000511500000 n

000000529400000 n

000000332600000 n

000000342500000 n

000000466300000 n

000000481700000 n

000000490600000 n

000000505100000 n

trailer

<</Root9 0 R/ID[<58f200ad368d5ec720a64bc5e8c485da><8ae6c75d1931a256c965738da85030cb>]/Info12 0 R/Size 16>>

startxref

5483

%%EOF

注:数据过长,忽略过长部分数据,以及乱码数据

2.PDF签名信息

[0]         Version: 3

         SerialNumber: 1484726015315

             IssuerDN:CN=rlk,OU=yonyou,O=yonyou,L=北京,ST=北京,C=CHINA

           Start Date: Wed Jan 18 15:52:45 CST2017

           Final Date: Wed Jan 18 16:01:55 CST2017

            SubjectDN:CN=rlk,OU=yonyou,O=yonyou,L=北京,ST=北京,C=CHINA

           Public Key: RSA Public Key

            modulus:da119c18938f96773f938655c2240ef8d438ffdb67589bd0018f1bf9a7cca18c74e150d85c5a2bcd62f4e9fd59231ea99047047147d64d88bdebff2530148efc5d59b4edf02f9bddaaac7575d2e0ef7ea19d2221154e7d742039f42f9b4c574ea7a2698b8ec543c4f0fbe75a8307a3c8ac65d1cb200f78ad9f36e3e8ce5e61ee56901fd7bdd48a81ab1a5bd06ee962106b4c620b4a7a095c4348e697f52c4e8e86d10c2c22f28bc11997b2f54a5f71941b9f3aa4157ba75f3e006b128c3a54968d07347c953232d29668e38afe82eb74a888757780f5dfec167b1eb064de64c66011df3dfb3aa53c2cd4434c5748f1b61800ed9c43e3cc74577964de9e6d99c7

    public exponent: 10001

 

  Signature Algorithm: SHA256WithRSAEncryption

           Signature: d810334459f25f44d8c8a19fceb4c7a14a8546cc

                      370b01ff1470193e0a8e2930071ff934c597b116

                      5f936742376d9ac8addebbaa75fcceeadd6b582b

                      bf16dd2faa5ff88aa939b42b1b3ddf91a39c205c

                      ef973191f41286268efad21785a1c09b8a6ef1ab

                      a4d074582dce44262b2ddab2a5ebe52e9bafa4a6

                      b08febda7ade1fa7c8c1576aae74b95ca64e92f2

                      73a6eac20d8464bfe0ad61df0ddaf8f50d64c5bc

                      9515357d1dea8a2271da84845e3f63b0072dfe74

                      ab7b1564682c7abdc5b96bd88d4d7fcd3f094571

                      e90b25389fa301a746ced2915121a424a74acd1d

                      3287c323a2a9e12742f1ea89cffe8d79a74c78dc

                      ec502d7907d01a4b13be9f245f761b28

3.结构图谱

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


4.签字字典条目项

签字字典条目项

KEY

TYPE

VALUE

Type

name

(可选)此字典描述的PDF 对象类型;如果出现,签字字典必须是Sig。

Filter

name

(必需的;可继承)签字名处理程序首选使用名字,当验证签字时。如果Prop_Build 条目不出现,它也是签字处理程序的名字,签字处理程序用于创建签字,如果Prop_Build 存在,它能用于决定创建签名(其通常类同于Filter,但是不被要求)的名字处理

程序。确定签名时,应用程序可能替代不同处理程序。只要它支持指定的SubFilter 的格式。例如签字处理程序是 Adobe.PPKLite ,Entrust.PPKEF ,

CICI.SignIt,和 VeriSign.PPKVS。

SubFilter

name

(可选)一个名字描述签字字典中签字编码值和关键

信息。一个应用程序可能使用任何支持这种格式验证

签名的处理程序。

对公钥加密签名的定义值是

adbe.x509.rsa_sha1 , adbe.pkcs7.detached, and

adbe.pkcs7.sha1

Contents

string

(必需的)签字值,当ByteRange 出项,值是一个16进制字符串(见32 也“16 进制字符串”),它代表字节范围摘要值。如果ByteRange 不出现。除了Contents 条目,ByteRange 值是一个签字字典对象摘要。对公钥签字,Contents 通常要么是一DER-encoded PKCS#1 二进制数据对象, 要么是igeDER-encoded PKCS#7 二进制数据对象。

Cert

Array or string

(当SubFilter 是adbe.x509.rsa_sha1 时必需;否则不使用)字符串代表使用X.509 认证连,如果连只有一个条目,签名和认证签名使用公钥密码或字符

串。签字认证必须首先出现在序列;它用于确认在Contents 的签字值,并且其他认证不用于确认签字认证的真实性。如果ubFilter 是adbe.pkcs7.detached 或

adbe.pkcs7.sha1,这个条目不使用,并且认证连必须放入在Contents 的PKCS#7 包里。

ByteRange

array

(对所有参考许可字典UR3 条目签字使用权和签字域部分的所有签字都是必需的)一个整数对序列(开始字节偏移,字节长度)精确描述计算的字节范围。多个不连续字节用于描述一个数字,这个数字不包括签字值(Contents 条目)本身。

Changes

array

(可选)指示文档变化的三个整数序列,此文档已经在前次签名和这次签名完成:按此顺序,页号码改变,域号码改变,并且域数字填入。

Name

text

(可选)签署文档的人或权利名。当它不可能从签字中抽取出名字时,此值应被使用;比如,从签字者中认证。

M

date

(可选)签字时间,依靠签字处理程序,这可能是一个正常的未经证实的计算机时间,也可能是一个使用可确定方法从一个安全时间服务器产生时间。

这个值应该仅在签字时间无效时使用;比如。时间戳能被嵌入KCS#7 二进制数据对象

Location

text

(可选)CPU 主机名或签字物理位置。

Reason

text

(可选)签字原因,如(我同意…)。

ContactInfo

text

(可选)签字者提供一个信息,使接受者能去联系签字者确定签署;比如,电话号码。

R

integer

(可选)用于创建签字过程中的签字处理程序版本。注:PDF1.5 开始,这个条目不被推崇,且信息应该存

储在Prop_Build 字典。

V

integer

(可选;PDF1.5)签字字典格式版本。它对应于SubFilter 值内容的签字字典用法。值是1,如果Reference 字典被认为是关键的签字验证。默认值:0

Prop_Build

dictionary

(可选;PDF1.5)能被签字处理程序使用记录信息的

字典,信息是捕获的签字计算机环境状态,软件组建日期,版本和操作系统。

Adobe 发布一个独立规范,PDF 签字为Acrobat 6.0

构建字典规范,对字典使用提供执行引导

Prop_AuthTime

integer

(可选;PDF1.5)自从签字者被最后认证的秒数。它旨在签字拒绝声明中使用。如果这个值未知,应该被忽略。

Prop_AuthType

name

(可选;PDF1.5)签字者使用认证方法。它旨在签字

拒绝声明中使用。有效值包括PIN,Password 和

Fingerprint。

注:签字字典中的条目能被概念为不同的字典;由于历史和加密原因它们在一个字典中。类

别是签字属性( R , M , Name , Reason , Location , Prop_Build , Prop_AuthTime 和

Prop_AuthType);关键信息(Cert 和Contents 部分,当签字值是PKCS#7 对象);参考

(Reference 和ByteRange);和签字值(Contents 当签字值是一个PKCS#1 对象)。

5. 签字参考字典条目项

签字参考字典条目项

KEY

TYPE

VALUE

Type

name

(可选)字典描述的PDF 对象类型;如果出现,

对签字参考字典必须是SigRef。

TransformMethod

name

(必需的)转换方法名字, 当签字有效,转换方法指导对象摘要计算或修改分析。有效值是:

DocMDP 用于检测文档相关签字域修改,域被文档原有者签署;UR 用于检测文档修改,其使有文档使用权的的签名无效; FieldMDP 用于检测指定在TransformParams 格式域表的修改; Identity 使用签定单个对象时,通过在签署参

考字典中Data 值指定。此转换方法支持FDF 文件签署。

TransformParams

dictionary

(可选)字典指定由TransformMethod 指定转换

方法的参数(可变数据)。除了Identity 每个方

法都使用它们自己的参数集。详细见上边指定节

关于个别转换参数字典。

Data

(various)

(必需的,当TransformMethod 是FieldMDP 或

Identity)通过对文档中对象的间接参考,摘要

被计算,或对象修改分析应该被执行。对转换方

法而不是FieldMDP 和Identity,此对象被隐式

定义。

DigestMethod

name

(可选)当计算摘要时,定义将使用的算法名,

有效值是MD5 和SHA1。默认值:MD5.

DigestValue

string

(必需的,在一些情况)当存在,计算摘要值。

DigestLocation

array

( 必需的, 当DigestValue 被要求且

TransformMethod 是FieldMDP 或DocMDP 时)两个整数的序列指定PDF 文件DigestValue 字符串位置。整数分别代表偏移值和长度,以字节单位的

 

阅读更多
换一批

没有更多推荐了,返回首页