工作一个星期了,今天的项目终于算是告一个段落了,虽然是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 做一个全局只是进行一下测试.
还有就发现真正的软件开发并不是我们所认为的那几百行代码,当把项目的一个小模块给我的时候,看着那几十个类,才发现,要想在这么多代码中进行优化,真的需要耐心 毅力,