今天和大家介绍下PPT文档解析中的母版。


什么是母版

我们平时看到的PPT展示,实际上是有多层内容组成的。

分别是页面(Slide),布局(SlideLayout)和母版(SlideMaster)

我们使用PowerPoint或者WPS打开PPT文件,调到母版视图,就能看到左边列出的母版和布局(或者叫版式)。

image-20200310194045365

PPT文件中,可以创建多个母版,每一个母版创建多个布局。

在制作PPT时,依赖于不同的布局进行创建,不但减少了重复的工作量,也大大减少了PPT文件的体积。

在渲染时,软件会依次在三个层级渲染母版,布局,页面中的元素。最终呈现的是三个层级叠加的显示。

image-20200310193703299

PPT文档中的母版

我们解压一个pptx文件,在其中的ppt文件夹下可以看到母版,布局,页面三者的信息。

image-20200310194701794

我们在slides文件夹下任意打开一个slide的xml文件,但是发现里面并没有任何布局或者母版的相关信息。

image-20200310195051790

这是因为,PPT文档中将例如资源,样式,母版等外部的信息,定义在一个单独的文件中,然后通过一个rels文件绑定两者的关系。

我们可以在slides\_rels文件夹下找到对应的.xml.rels文件,看到里面有一个relationship节点,指向了对应的SlideLayout文件的相对路径。

image-20200310195411129

同样的,SlideLayout文件也通过同样的方式指向SlideMaster文件。

image-20200310195658640

使用OpenXMLSDK解析

由于PPT文档将relationship放在的单独的文件,我们在解析PPT文档时,必须对多个文件进行读取,这里增加了我们在解析PPT文档时的难度。

对于母版来说,更困难的一点是,slide中没有任何地方引用SlideLayout对应的relationship 的id。

这意味着如果我不解析rels文件,我根本不知道这个页面是否使用了母版。

这使得单纯的xml解析方式进行PPT文档处理变得异常困难。

所幸是如果我们是使用C#的话,微软开源了一个叫OpenXMLSDK的库,帮助我们快速解析,查询office文档。

它直接将母版信息存储到对应slide节点的属性中,所以直接可以通过slide轻松查询到对应的母版

例如我期望做页面背景的解析,就可以使用下面的方法。

image-20200310200618518

这样大家自主解析PPT文档(或者是openxml格式文件)都会变得很简单。


参考文档:


本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/PPT%E6%96%87%E6%A1%A3%E7%BB%93%E6%9E%84%E4%B9%8B%E6%A8%A1%E6%9D%BF%E4%BD%8D%E7%BD%AE%E8%8E%B7%E5%8F%96.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 dotnet 职业技术学院 (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系