首页
|
信息资讯
|
资源检索
|
浏览精彩论坛
.
设为首页
收藏本站
站点导航
新手学园
检索方法
国内文献
国外文献
FTP联盟
BT资源
网络资源
计算机技术
读书软件
外语学习
网络经管
法律之窗
生命科学
教学相长
学术妙笔
读书参考
文学原创
多媒体
书园茶社
茶社转贴
强国梦
秋爽斋
淡泊草
水清木华
书园旧梦
您的位置:
首页
>>
信息资讯
>>
专业交流
>>
读书软件
>> 查看内容
[ 原创首发] PDF Reference 学习札记(一)
作者: regina 发布日期: 2008-8-03 查看数: 出自:
网上读书园地
PDF Reference
学习札记(一)
By Regina
梳理
进入
readfree
有一段时间了,看了
coolman
、
cheming
、老马等高手的一些旧贴和他们的宝贝后,大大激发了我的求知欲,我感到要想成为他们这样的高手,必须从基础开始学起,学习
PDF Reference
就是我迈出的第一步。今天,我第一次来这里发贴,把我学到的东西和大家一起分享,望高手们批评指正。
我模仿了
PDF Reference
的
example 1
,用记事本输入下面的文本,并把该文件保存为
Ex001.pdf
,它就是一个简单的
PDF
文件。
%PDF-1.6
1 0 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
/Font << /F1 7 0 R >>
>>
>>
endobj
5 0 obj
<< /Length 73 >>
stream
BT
/F1 28 Tf
100 100 Td
5 Tr
1 0 0 rg
0 0 1 RG
(Hello Word !)'
ET
endstream
endobj
6 0 obj
[ /PDF /Text ]
endobj
7 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /MacRomanEncoding
>>
endobj
1062
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000364 00000 n
0000000466 00000 n
0000000496 00000 n
trailer
<< /Size 8
/Root 1 0 R
>>
startxref
625
%%EOF
下面,我对上面的文件结构做一些细致的分析。
%PDF-1.6
▲ 这是
PDF
文件头部,“
-
”后的
1.6
是
PDF
的版本信息。
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj
▲ 这是一个
PDF
中的“对象”,它的特点是:以
obj
开始,以
endobj
结尾。
PDF
文档都是以对象为单位组织其结构的。
△ “
1 0 obj
”中的“
1
”是对象编号,每个对象的编号是唯一的;“
0
”是对象的生成号,每当我们修改了
PDF
中的对象时,它会自增
1
。
△ 中间的“
<< >>
”称为“字典”,里面有许多“键
-
值”对的描述信息。
△ 其中,“
/Type /Catalog
”说明了该对象的类型是
/Catalog
(即“目录”对象),它是
PDF
文档的根对象。
△ “
/Type
”中除了有“
/Catalog
(目录对象)”外,还有“
/Outlines
(书签大纲对象)”、“
/Pages
(页面组对象)”以及“页面组对△ 象
/Pages
”中含有的若干“
/Page
(页面对象)”等。
△ “
2 0 R
”和“
3 0 R
”都是对对象的“间接引用”。“
2 0 R
”就是在引用“
2 0 obj
”对象,“
3 0 R
”就是在引用“
3 0 obj
”对象。
2 0 obj
<< /Type /Outlines
/Count 0
>>
endobj
▲ 这是的一个“
/Outlines
(书签大纲对象)”。
△ “
/Count
0
”
说明没有此书签个数为
0
,即没有书签。(以后我再详细分析)
3 0 obj
<< /Type /Pages
/Kids [ 4 0 R ]
/Count 1
>>
endobj
▲ 这是的
PDF
中的“
/Pages
(页面组对象)”,它有两个主要的选项“
/Kids
”和“
/Count
”。
△ “
/Kids
”说明了这个
/Pages
是由哪些
/Page
组成的,后面的“
[4 0 R]
”是一个数组,里面的“
4 0 R
”就是一个“
/Page
(页面对象)”,
[]
里可以有多个
/Page
对象组成。
△ “
/Count
1
”
说明了
/Pages
对象里含有
/Page
对象的个数,这要与
[]
中的对象数目一致,这里表明这个
PDF
文件只有一页。
4 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [0 0 612 792]
/Contents 5 0 R
/Resources << /ProcSet 6 0 R
/Font << /F1 7 0 R >>
>>
>>
endobj
▲
这是
“
/Page
(
页面对象
)”,
它是属于
“
3 0 R
”
这个
“
/Pages
(
页面组对象
)”
的
,
这可以由它的
“
/Parent 3 0 R
”
看出来。
△ “
/MediaBox
”标识了该页的大小,单位为磅(注:
1
英寸
=
72
磅
=
2.54
厘米
)。
△ “
/Contents 5 0 R
”就是指页面的具体内容是“
5 0 obj
”对象。
△ “
Resources << /ProcSet 6 0 R /Font << /F1 7 0 R >> >> >>
”表明该页包含的一系列资源,包括“字体对象”和“
PDF
的内容类型”为文本型
TEXT
。
5 0 obj
<< /Length 73 >>
stream
BT
/F1 28 Tf
100 100 Td
5 Tr
1 0 0 rg
0 0 1 RG
(Hello Word !)'
ET
endstream
endobj
▲ 这是
/Page
页面的具体内容。
△ “
<< /Length 73 >>
”表示其后的
stream
和
endstream
之间的二进制流的长度(注:单位为“字节”)。
△ “
/F1 28 Tf
”表示选择由“
7 0 obj
”定义的字体,字号大小为
28
。(以后再详述)
△ “
100 100 Td
”表明要显示的字符位置,它以页面左下角为原点。
△ “
6 Tr
”为字体的样式修饰,“
6
”代表“填充字体内部并描边”。
△ “
1 0 0 rg
”和“
0 0 1 RG
”分别设置“填充颜色”和“边框颜色”。“填充颜色”用小写的“
rg
”,“边框颜色”用大写的“
RG
”。“
1 0
0
”
表示“红、绿、蓝”三种色调的百分比,这里红色是
1
,就是
100%
的红。
△
(Hello Word !)'
是要打印的字符文本。目前,只能是英文,如要显示中文字,必须要引入中字的字符。(以后再详述)
6 0 obj
[ /PDF /Text ]
endobj
▲ 这个对象说明了
PDF
的内容类型为纯文本,如果是图片类型的,要改为“
[/PDF /Image]
”
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
0000000364 00000 n
0000000466 00000 n
0000000496 00000 n
▲ 这是
PDF
文件的“交叉引用表”,如果这个表被破坏,那整个
PDF
文档就不能被
Adobe Acrobat Reader
打开了,但
Foxit Reader
的容错率比较强,它还是可以打开的,所以建议大家把上面的文件保存成
Ex001.PDF
后,用
Foxit Reader
打开。
△ 第二行“
0 8
”这两个数,第一个“
0
”表示“交叉引用表”的起始对象号(这个文件是
0
,为
PDF
自定义的对象
0
,无特殊作用),第二个“
8
”表示“交叉引用表”的对象总数(包含刚才自定义的
0
对象)。
△ 其余的
8
行,每行为一个对象。
△ “
0000000000 65535 f
”这一行比较特殊。“
0000000000
”表示该对象在的起始位置为
0
,生成数为
65535
,
f
表示该对象未被引用,这是
PDF
的规定。
△ 剩下的
7
行中,
n
表示该对象已被引用。
注:在读取对象信息的时候,就是靠着这个交叉引用表找到各对象位置进行解析的。
trailer
<< /Size 8
/Root 1 0 R
>>
startxref
625
%%EOF
▲ 这是
PDF
文件的“文件尾”部分,以
trailer
对象的开始,“
trailer << >>
”里面是一个字典。
△ “
/Size
8
”
表示该
PDF
文件中的
obj
对象总数。
△ “
/Root 1 0 R
”表示该
PDF
文件中的根对象,为“
1 0 obj
”。
△ “
Startxref 625
”表示“交叉引用表”的偏移地址,可以用它来定位
PDF
文档中所有的对象的相对地址。
△ 一般放在文件最后,是文件结束标志。
以上是我今天一天读
PDF Reference
的笔记,先到这里,希望园子里的各位高手批评指正,我想只有这样我们大家才能慢慢深入
PDF
的内部,编出像
coolman
、
cheming
、老马等高手的软件。
PDF Reference 学习札记(一).rar
【论坛浏览】
【我来说两句】
【打印】
【大】
【中】
【小】
【关闭】
相关评论
作者: coolman 发布日期: 2008-8-03
楼主不忽悠上课,开始做学习笔记了。很多人会失望的。
作者: lucy12345678 发布日期: 2008-8-03
作者: regina 发布日期: 2008-8-03
哇, 大鲨鱼来了
什么上课,没看明白,是不是认错人了
给一个截图,直观地描述PDF内部结构如下:
[attachment=185448]
作者: gear 发布日期: 2008-8-03
也学习学习,
作者: 啊cr 发布日期: 2008-8-03
学习学习
作者: vorber 发布日期: 2008-8-03
QUOTE:
引用第1楼coolman于2008-08-03 18:02发表的 :
楼主不忽悠上课,开始做学习笔记了。很多人会失望的。
难道楼主是传说中的person08
作者: yiqihouba 发布日期: 2008-8-03
秋风落叶乱为堆,
扫去还来千百回。
一笑罢休闲处坐,
任它着地自成灰。
作者: ykjsx 发布日期: 2008-8-03
又打起了哑语
作者: regina 发布日期: 2008-8-03
希望大家一起讨论 PDF Reference ,共同进步
园子里的高手们,谁能给一个简单的显示“中文”的PDF?
(不要用acrobat生成,用记事本这样写的例子)
作者: ykjsx 发布日期: 2008-8-04
这个值得关注,比发什么星的软件好多了
共有评论数 15/每页显示数 10
我来说两句
请遵守国家法律和互联网法规。
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。
注意:系统启用了静态/缓存功能,您的回复可能不能立即显示。
热点主题
·
网上惊现Pizza Pro破解版
·
【2008.08.21更新】bookinfo v1.5 ——读
·
某软件奥运版
·
Magic PDG BookContents (新一代PDG书签
·
httplook破解文件
·
VI--对禁言期或被删除的ID,软件销售者无
·
(原创)PDF Reference 学习札记 (三)—
·
电子书下载整理软件
·
求近似于“Foxit Library”支持所有文件格
·
介绍一个免费 pdf 工具
最新主题
·
VI--对禁言期或被删除的ID,软件销售者无
·
【2008.08.21更新】bookinfo v1.5 ——读
·
网上惊现Pizza Pro破解版
·
Magic PDG BookContents (新一代PDG书签
·
httplook破解文件
·
某软件奥运版
·
电子书下载整理软件
·
介绍一个免费 pdf 工具
·
(原创)PDF Reference 学习札记 (三)—
·
求近似于“Foxit Library”支持所有文件格
XML
RSS 2.0
WAP
版权所有 2005 网上读书园地
免责声明
最佳分辨率 1024 X 768
Copyright © http://www.readfree.net All rights reserved. Powered by
supstie™
鄂ICP备05004310号