![]() |
图17.3.7 OLE2解析结果 |
表17-3-4 PPT中常见数据流
![]() |
在PowerPoint Document数据流中,包含了我们感兴趣的大部分信息,例如font、color、text、position等数据结构。所以下面着重讨论PowerPoint Document数据流的解析。
在PowerPoint Document数据流中,数据以若干个"记录(Record)"的形式存储。每个记录都包含一个8字节的header,根据header的不同,记录又可分为"容器(Container)"和"原子(Atom)"两种类型。其中,容器可以包含原子和其他容器,而原子则包含了PowerPoint对象的真正数据。如图17.3.8所示。
微软已经公布了PPT文件中所有记录(record)的格式说明,这就不难从OLE2.bt解析出的数据流中进一步解析出所有PPT的原子和容器结构。如果您亲自动手编程,不难发现这实际上是一个树的遍历问题。限于篇幅,这里不再对解析过程做详细说明。在本书的随书资料中我们给出了一个简单的010解析脚本ppt_parse.bt。执行ppt_parse.bt脚本,即可得到PPT的解析结果,如图17.3.9所示。
![]() |
图17.3.8 PPT中的Record和Atom |
![]() |
图17.3.9 PPT解析结果 |
下面我们再来做一个实验。在解析结果中找到PSR_FontEntityAtom FontEntityAtom的一条记录(如图17.3.9中选中的部分),将其展开,可以看到FontEntityAtom的数据结构如表17-3-5所示。
表17-3-5 FontEntityAtom 数据结构
位 置 |
类 型 |
名 称 |
0 |
uint2[32] |
IfFaceName |
64 |
ubyte |
IfCharSet |
65 |
ubyte |
IfClipPrecision |
66 |
ubyte |
IfQuality |
67 |
ubyte |
IfPitchAndFamily |