[原创]PDF知识讲座(1)
PDF知识讲座一
pdf(Portable Document Format,便携式文档结构)是一种很有用的文件格式,其最大的特点是
平台无关而且功能强大(支持文字\图象\音乐\视频).今天先讲一下pdf的文件(物理)结构
PDF文件结构可分为以下几块:
1.header:
pdf文件的第一行,格式如下:
%PDF-1.3
表示当前文件的版本是1.3(目前最高版本为1.5)
2.body:
pdf文件中用到的所有对象,包括文本\图象\音乐\视频\字体\超连接\加密信息等等,格式如下:
2 0 obj
...
end obj
其中省略号部分是pdf规定的任意合法对象(一共8种)
3.cross reference table:
所有pdf对象的引用表,其格式如下:
xref
0 5
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
其中,xref是开始标志,表示以下为引用表内容;0 5表示从对象号为0的开始,
连续有5个对象(0,1,2,3,4),分别用5行来表示.每行的前10个数字代表这个
这个对象相对文件头的偏移地址,后面5个数字只有当这个对象被删除的时
候才有用,表示这个对象被删除后又被重新生成后的对象号最后一位f或n表
示对象是否被使用(n表示使用,f表示被删除或没有用)
4.trailer:
整个pdf文件的入口点,形式如下:
trailer
<<
/Size 8
/Root 1 0 R
>>
startxref
553
%%EOF
/size :这个pdf中总共使用了多少个对象
/root :这个pdf文件的catalog对象的对象号,这是pdf中最顶层的对象
/startxref: 后面的数字表示cross reference table的开始位置
/%%EOF :文件结束符.
实际一个pdf文件是很复杂的,但是上面几个部分是确定的,只能多不能少.下一讲我说一下pdf里面8种类型.
问题点数:20、回复次数:36Top
1 楼fisker0303(天塌了,地陷了,小花狗不见了.)回复于 2005-06-09 17:41:07 得分 1
学习,支持... ...Top
2 楼ukyo1(**)回复于 2005-06-09 19:09:07 得分 1
太复杂。Top
3 楼laiyiling(陌生人[MVP])回复于 2005-06-09 19:34:12 得分 1
楼主出研究成果啦!SPTop
4 楼pomelowu(羽战士)回复于 2005-06-09 19:49:49 得分 1
陌生人加精吖Top
5 楼lemon_wei(研究BT,做好P2P)回复于 2005-06-09 21:03:19 得分 1
研究出成果了。Top
6 楼bobob(静思)回复于 2005-06-10 08:45:15 得分 0
以下是一个完整的pdf源文件,内容是显示一个"hello world",对照上面的说明应该能看个差不多
下一讲我主要把pdf的8种对象类型说一下:)
%PDF-1.0
1 0 obj
<<
/Type /Catalog
/Pages 3 0 R
/Outlines 2 0 R
>>
endobj
2 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
3 0 obj
<<
/Type /Pages
/Count 1
/Kids [4 0 R]
>>
endobj
4 0 obj
<<
/Type /Page
/Parent 3 0 R
/Resources << /Font << /F1 7 0 R >>/ProcSet 6 0 R
>>
/MediaBox [0 0 612 792]
/Contents 5 0 R
>>
endobj
5 0 obj
<< /Length 44 >>
stream
BT
/F1 24 Tf
100 100 Td (Hello World) Tj
ET
endstream
endobj
6 0 obj
[/PDF /Text]
endobj
7 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /MacRomanEncoding
>>
endobj
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000322 00000 n
0000000415 00000 n
0000000445 00000 n
trailer
<<
/Size 8
/Root 1 0 R
>>
startxref
553
%%EOFTop
7 楼fzd999(花差花差)回复于 2005-06-10 09:24:10 得分 1
不错不错~Top
8 楼junhuang09()回复于 2005-06-10 09:42:27 得分 1
学习......Top
9 楼xjtuzhw(飞影(★和谐社会,狗才谈政治★))回复于 2005-06-10 10:29:08 得分 1
Mark先Top
10 楼laiyiling(陌生人[MVP])回复于 2005-06-10 10:31:43 得分 1
结贴后加精Top
11 楼bobob(静思)回复于 2005-06-10 10:40:37 得分 0
结贴后加精
==========>
谢谢陌生人!:)
现在就结了吗?
Top
12 楼autoegg(哲学指引生活 && (动心忍性,增益其所不能))回复于 2005-06-10 11:38:43 得分 1
期待续篇Top
13 楼laiyiling(陌生人[MVP])回复于 2005-06-10 13:02:40 得分 1
如果这一讲没内容了,就可以结。Top
14 楼fucr_364204()回复于 2005-06-10 13:49:02 得分 1
楼主真厉害,学习收藏。Top
15 楼vcleaner(我没当大哥很久了.......)回复于 2005-06-10 13:52:17 得分 1
UP,学习!Top
16 楼fucr_364204()回复于 2005-06-10 14:01:07 得分 1
请问怎样才能把文本从里边单独取出来?如取出"hello world!"
期待下一讲Top
17 楼newcore(to be or not to be, it's a question.)回复于 2005-06-10 17:42:21 得分 1
mark
Top
18 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-06-10 18:05:20 得分 1
建议先从分类讲起好点,如obj,stream等以及array如何表示等
再详细说如何读取,如我是从startxref后面的数字即索引读起,然后从xref中定位每个对象的位置Top
19 楼netying()回复于 2005-06-10 19:50:31 得分 1
支持!!Top
20 楼lanphaday(恋花蝶)回复于 2005-06-10 20:34:28 得分 1
踩
个
脚
印
以
后
慢
慢
看
!Top
21 楼Imisspassword(NOMONEY)回复于 2005-06-10 20:41:29 得分 1
后生可畏.
Top
22 楼Featured(我握着爱情的门票静静排队……)回复于 2005-06-10 23:00:39 得分 1
这样子支持中文不?
我以前也自己使用UE分析过PDF格式,
但是不支持中文滴Top
23 楼galois_godel()回复于 2005-06-10 23:19:12 得分 0
markTop
24 楼laker_tmj(laker)回复于 2005-06-11 13:33:32 得分 0
up learnTop
25 楼bobob(静思)回复于 2005-06-11 15:17:45 得分 0
中文当然支持,不过要麻烦很多,我也正在研究:)
这一讲就这些,我就先结了,过两天把下一讲贴出来Top
26 楼nlstone(天外流星)回复于 2005-06-11 16:18:08 得分 0
赶紧markTop
27 楼zxwitsme(Program is an art!)回复于 2005-06-15 16:25:01 得分 0
markTop
28 楼lsaturn(土星-站了一晚)回复于 2005-06-21 18:04:42 得分 0
揭贴了?Top
29 楼rivershan(阿门)回复于 2005-06-22 17:21:06 得分 0
有xpdf可用,研究格式没啥太大意义,让你更熟练而以Top
30 楼iPanda(傻傻猫)回复于 2005-06-23 15:32:22 得分 0
收藏!!Top
31 楼gx_lqh(Flex)回复于 2005-07-12 14:04:50 得分 0
請教:如何在VC++實現如PDF裏面Hand抓手工具來上下左右拖動窗口客戶區??(能有個例子最好)希望各位大蝦不吝賜教~~小弟我跪求幫助!!謝謝..Top
32 楼BigF(M_M)回复于 2005-07-14 13:45:34 得分 0
markTop
33 楼yujia120(永不停息)回复于 2005-07-26 16:32:31 得分 0
upTop
34 楼huang_yi_cn(蓝色的云)回复于 2005-08-04 10:12:27 得分 0
markTop
35 楼bobob(静思)回复于 2005-08-05 11:36:48 得分 0
奇怪呀,揭贴了之后都可以回啊?Top
36 楼littlebao(爱拼才会赢)回复于 2005-08-25 13:01:44 得分 0
markTop




