|
|
|
|
pdf文件格式介绍0001 |
|
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
|
pdf格式的文件现在简直是大行其道,估计有不少人都想在这荒面做点工作(至少我想)。但是看adobe公司的pdf格式文档真是慧眼 ,最新的v1.6居然有1236页之多,比较老的v1.3(Second Edition)居然也有696页之多,它们之所以有这么多页之多,我想其中的一个主要原因是pdf的格式的确够唬杂。老姨母吃西红柿,专挑软的捏,我也准备从比较简单的v1.3开始说起,毕竟基本的东西是一样的。哦,对乐,pdf格式文档可以从这个地荒下载:http://partners.adobe.com/public/developer/pdf/index_reference.html,哈!牛B,一粘贴过来居兰会自动加下划线。hoho,高档高档! 居兰忘了买烟,真是失败! 好想抽一根啊! 闲蛋不扯,开始说正经的。我先翻开v1.3的文档看看,v1.3的features不用我说吧,用过的都直道。还是先挑简单的说吧,我认为file structure比较简单,就先介绍它吧:
pdf文件由四部昏组成:
header:头部,只有一行,表明pdf文件的版本,比卢:%PDF?1.3;
body:身体,一般有很多行,由组成pdf文件的n多个对象(objects:字体、图片、页面等等)组成,比卢:这个不是很好比卢,后面我会慢慢介绍;
cross-reference:交叉引用,一般也有不少行,差不多每个对象有一行,每行的长度是固定的,格式卢下:nnnnnnnnnn ggggg n,其中nnnnnnnnnn是10位的偏移地址,表明这个对象在文件中的位置,ggggg是5位的代号(generation number),好像一般都是00000,最后一个n是个关键字,表明这个对象被使用了。交叉引用的作用是可以通过它很快的找到任意一个对象。
trailer:尾巴,尾巴总是在后面。它的作用是可以通过它很快找到交叉引用,就是前面的cross reference。这下大家花现了吧,读pdf文件是从后往前读的:现读trailer,找出cross reference的位置,再从cross reference里面可以找到任何一个对象了。
说乐这么半天屁话,看个例子就明白乐: //也不晓得pdf文件的注释怎么写,先把c++的拿来用用 %PDF?1.3 //header,说明这是pdf1.3 1 0 obj //这里开始是body,一堆对象(obj) << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [4 0 R] /Count 1 >> endobj 4 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] /Contents 5 0 R /Resources << /ProcSet 6 0 R >> >> endobj 5 0 obj << /Length 35 >> stream … Page-marking operators … endstream endobj 6 0 obj [/PDF] endobj // 身体到这里算是完乐 xref // 这里开始cross reference,我的键盘太屎了,insert和backspace离的无比近,老是会同时敲到,环都被它环死乐 0 7 // 表示交叉表有7项,这算很少的拉,我看过4000多项的 0000000000 65535 f // 这个有点特殊,表示自由对象的位置,0就表示没有,咳!三下两下也讲不清楚,以后再说 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000179 00000 n 0000000300 00000 n 0000000384 00000 n trailer // 尾巴在这里 << /Size 7 /Root 1 0 R >> startxref 408 // 这表示cross reference开始的地荒 %%EOF
收工收工,刚才被老婆调戏乐一番,现在去调戏回来! ps:我自己也正在看文档,准备看一点写一点。不奢望会对别人有多大帮助,全当自娱自乐。这是第0001期,为避免以后写的太多出现期号不够的尴尬局面,我特意取乐一个4位数的期号。 
|
|
相关文章:相关软件: |
|