PPT 文件结构解析

首发于https://zhuanlan.zhihu.com/p/90699919
背景:将设计师使用 Photoshop 制作的模板素材,经过解析后上传到 Web,用户可以下载生成一个.pptx后缀名的演示文稿.

将一个 PPTX 文件解压后会得到一个文件夹,里面就是与这个演示文稿 相关的所有内容。反之,想要生成一个 .pptx 就可以初始化一个 ZIP,按照格式写入所需内容,最后压缩,加上名称和后缀名,就完成了。所以最主要的还是来了解一下 PPTX 的文件结构到底是怎样的。

官方文档: officeopenxml

《PPT 文件结构解析》

文件的类型和数目可能会根据 幻灯片 的内容有所不同,但是肯定会有一个[Content_Types].xml,至少一个.rels 和一个 presentation,当然至少得有一页内容吧,而相应的就会有 slideMaster 和 slideLayout.

先来看看主要的几个文件里装了什么东西。

Content Types

定义了所有幻灯片里用到的格式和内容,简单的说就是所有文件都要提前声明。格式一般是:

<Default Extension="jpeg" ContentType="image/jpeg"/>
<Override PartName="/ppt/slides/slide1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/>

为了简单,其他的可能存在的格式可以都写上,比如图片、视频、字体等,只有 slide 是不确定的。

Relationships

为了方便各种资源的引用,所以会有关系表,格式为:

<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml" />

Id 就是在其他地方引用的标识符,Type 一般是个链接,Target 就是资源存在的位置

基本每个部分都有这样一个表,slidesslideMastersslideLayouts文件夹下面都有一个_relspresentation.xml 也有对应的 presentation.xml.rels

Presentation

包含了构成 PPTX 的各种规范以及属性,比如嵌入字体,默认字体样式,备注,分辨率,过渡动画等。

Slides

这里存储的就是幻灯片具体的内容了

Slide: 包含一个单页幻灯片的页面内容

Slide Master: 包含母版幻灯片的所有文本、格式相关的定义

Slide Layout: 包含幻灯片模板的默认格式

虽然以前也做过 PPT,最喜欢网上找个模板直接套,这次终于知道了还有“幻灯片母版”这个东西,感觉到了其中的博大精深。

因为我们的内容都是固定的,所以对于 slideLayoutslideMaster 就直接 copy 了一份,作为固定内容,主要修改 slide 里面的内容。

Slide 有很多属性可以定义各种样式,可以在官方文档里查看,都比较清楚。

实际业务中,除了文字,其他的类型,比如 svg,蒙版,各种特效都直接以图片的形式替代,所以有时候会导致下载比较久。最容易出问题的就是 ID 的匹配,不能出现重复的 ID

总的来说,如果要实现什么效果不知道怎么下手的话,只要自己动手在 PPT 里实现一下,解析出来研究看看文件结构,就知道怎么做了。

点赞