PDF Reference 学习札记.doc_第1页
PDF Reference 学习札记.doc_第2页
PDF Reference 学习札记.doc_第3页
PDF Reference 学习札记.doc_第4页
PDF Reference 学习札记.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PDF Reference 学习札记(一) By Regina 梳理 进入readfree有一段时间了,看了coolman、cheming、老马等高手的一些旧贴和他们的宝贝后,大大激发了我的求知欲,我感到要想成为他们这样的高手,必须从基础开始学起,学习PDF Reference就是我迈出的第一步。今天,我第一次来这里发贴,把我学到的东西和大家一起分享,望高手们批评指正。 我模仿了PDF Reference的example 1,用记事本输入下面的文本,并把该文件保存为Ex001.pdf,它就是一个简单的PDF文件。 %PDF-1.6 1 0 obj endobj 2 0 obj endobj 3 0 obj 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 endobj 5 0 obj 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 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 startxref 625 %EOF 下面,我对上面的文件结构做一些细致的分析。 %PDF-1.6 这是PDF文件头部,“-”后的1.6是PDF的版本信息。 1 0 obj 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 endobj 这是的一个“/Outlines(书签大纲对象)”。 “/Count 0”说明没有此书签个数为0,即没有书签。(以后我再详细分析) 3 0 obj 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 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 ”表明该页包含的一系列资源,包括“字体对象”和“PDF的内容类型”为文本型TEXT。 5 0 obj stream BT /F1 28 Tf 100 100 Td 5 Tr 1 0 0 rg 0 0 1 RG (Hello Word !) ET endstream endobj 这是/Page页面的具体内容。 “ ”表示其后的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 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 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中书签的代码。 下面,我们的目标写代码,建立如下图所示的一个书签。 attachment=185787 对应的代码如下: 21 0 obj endobj 对象21是“根结点”,根结点没有Parent和Next结点,也没有Title。 22 0 obj endobj (A)对象22,是“中间结点”(即“非根结点、叶子结点”),所以有First和Last,以表明其下子孙对象是从“对象25”到“对象28”,共有4个。 (B)在同级结点中,它有“无前趋结点(Prev)”,但有“后继结点(Next)对象29”。 (C)/Dest 后面跟的参数是对书签的定位,参数形式如下: /Dest page对象 /XYZ 页面X坐标 页面Y坐标 页面大小 如果,其中某一项的值为null,说明该值的取值仍按照当前的值,不加以改变。 下面的代码一样分析,这里不再详述。 25 0 obj endobj 26 0 obj endobj 小结: /Title ( 标题名 ) 书签标题名称 /Parent 22 0 R 根结点无Parent /Pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论