admin管理员组文章数量:1531791
2023年12月23日发(作者:)
闲蛋不扯,开始说正经的。我先翻开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多项的
65535 f // 这个有点特殊,表示自由对象的位置,0就表示没有,咳!三下两下也讲不清楚,以后再说
00000 n
00000 n
00000 n
00000 n
00000 n
00000 n
trailer // 尾巴在这里
<< /Size 7
/Root 1 0 R
>>
startxref
408 // 这表示cross reference开始的地荒
%%EOF
版权声明:本文标题:pdf文件格式介绍0001 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1703270073a47133.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论