项目心得-PDF文件格式深入了解!

来源:互联网 发布:java log4j 原理 编辑:程序博客网 时间:2024/05/29 16:29

工作一个星期了,今天的项目终于算是告一个段落了,虽然是2个高手而不是自己的力量完成的, 但却学到了很多东西,首先是PDF文件格式.读了一天的PDF文件说明书,全是英文,看的眼睛都花了,上网查却没有查到什么太多的东西,全是一些转载,重复那几篇看了无数遍的的PDF说明.

于是还是决定自己来看一看,真正的把它弄明白,简单的说一下我所学到的东西.

PDF文件有几种类型的对象,BOOL   整型 实数型  OBJ   DICTIONARY  STREAM   NULL

他们构成了PDF文件

还是举例说明一下.

因为PDF文件用记事本打开很大,所以把文件的主要部分说一下

 一个PDF文件首先是一个头,代表着版本号.   %PDF-1.4

跟着就是各个对象

然后是交叉索引表,用来读取各个对象用的,他们能知道各个对象的确切位置.

最后就是trailer    它告诉我们文件的主要根是在哪个对象上,告诉我们交叉索引表的具体位置,这样就能根据交叉索引表找到ROOT 对象,那个对象告诉我们了PAGES   OUTLINE等位置,我们跟着找每一个PAGES  直到找到PAGE.

例如我们根据trailer找到ROOT

43 0 obj
<</Metadata 103 0 R /AcroForm 99 0 R /Pages 39 0 R /Type /Catalog >>endobj

在到39 0 遍历PAGES

今天的项目PROFILE后却一直都没有找到问题的所在,后来通过高手的跟踪和感觉发现了问题.

一个类从VECTOR继承,构造函数调用了ASSIGN  但那个定义该类型对象的函数却是对文件的读取函数,换句话说就是调用的很多的,所以对象的构造和析构多的吓人,通过定义全局对象减少了对象的构造,效率提高了一半.虽然全局对象很另人厌恶,但可以考虑STATIC  做一个全局只是进行一下测试.
                
还有就发现真正的软件开发并不是我们所认为的那几百行代码,当把项目的一个小模块给我的时候,看着那几十个类,才发现,要想在这么多代码中进行优化,真的需要耐心 毅力,