今天和大家介绍下PPT文档解析中的母版。
什么是母版
我们平时看到的PPT展示,实际上是有多层内容组成的。
分别是页面(Slide),布局(SlideLayout)和母版(SlideMaster)
我们使用PowerPoint或者WPS打开PPT文件,调到母版视图,就能看到左边列出的母版和布局(或者叫版式)。
PPT文件中,可以创建多个母版,每一个母版创建多个布局。
在制作PPT时,依赖于不同的布局进行创建,不但减少了重复的工作量,也大大减少了PPT文件的体积。
在渲染时,软件会依次在三个层级渲染母版,布局,页面中的元素。最终呈现的是三个层级叠加的显示。
PPT文档中的母版
我们解压一个pptx文件,在其中的ppt文件夹下可以看到母版,布局,页面三者的信息。
我们在slides文件夹下任意打开一个slide的xml文件,但是发现里面并没有任何布局或者母版的相关信息。
这是因为,PPT文档中将例如资源,样式,母版等外部的信息,定义在一个单独的文件中,然后通过一个rels文件绑定两者的关系。
我们可以在slides\_rels文件夹下找到对应的.xml.rels文件,看到里面有一个relationship节点,指向了对应的SlideLayout文件的相对路径。
同样的,SlideLayout文件也通过同样的方式指向SlideMaster文件。
使用OpenXMLSDK解析
由于PPT文档将relationship放在的单独的文件,我们在解析PPT文档时,必须对多个文件进行读取,这里增加了我们在解析PPT文档时的难度。
对于母版来说,更困难的一点是,slide中没有任何地方引用SlideLayout对应的relationship 的id。
这意味着如果我不解析rels文件,我根本不知道这个页面是否使用了母版。
这使得单纯的xml解析方式进行PPT文档处理变得异常困难。
所幸是如果我们是使用C#的话,微软开源了一个叫OpenXMLSDK的库,帮助我们快速解析,查询office文档。
它直接将母版信息存储到对应slide节点的属性中,所以直接可以通过slide轻松查询到对应的母版
例如我期望做页面背景的解析,就可以使用下面的方法。
这样大家自主解析PPT文档(或者是openxml格式文件)都会变得很简单。
参考文档:
- Structure of a PresentationML document (Open XML SDK) - Microsoft Docs
本文会经常更新,请阅读个人博客原文: https://xinyuehtx.github.io/ ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。