共计 1451 个字符,预计需要花费 4 分钟才能阅读完成。
首发于 https://zhuanlan.zhihu.com/p/90699919
背景:将设计师使用 Photoshop
制作的模板素材,经过解析后上传到 Web,用户可以下载生成一个 .pptx
后缀名的演示文稿.
将一个 PPTX 文件解压后会得到一个文件夹,里面就是与这个演示文稿 相关的所有内容。反之,想要生成一个 .pptx 就可以初始化一个 ZIP,按照格式写入所需内容,最后压缩,加上名称和后缀名,就完成了。所以最主要的还是来了解一下 PPTX 的文件结构到底是怎样的。
官方文档: officeopenxml
文件的类型和数目可能会根据 幻灯片 的内容有所不同,但是肯定会有一个[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
就是资源存在的位置
基本每个部分都有这样一个表,slides
、slideMasters
、slideLayouts
文件夹下面都有一个_rels
,presentation.xml
也有对应的 presentation.xml.rels
。
Presentation
包含了构成 PPTX 的各种规范以及属性,比如嵌入字体,默认字体样式,备注,分辨率,过渡动画等。
Slides
这里存储的就是幻灯片具体的内容了
Slide: 包含一个单页幻灯片的页面内容
Slide Master: 包含母版幻灯片的所有文本、格式相关的定义
Slide Layout: 包含幻灯片模板的默认格式
虽然以前也做过 PPT,最喜欢网上找个模板直接套,这次终于知道了还有“幻灯片母版”这个东西,感觉到了其中的博大精深。
因为我们的内容都是固定的,所以对于 slideLayout
和 slideMaster
就直接 copy 了一份,作为固定内容,主要修改 slide
里面的内容。
Slide 有很多属性可以定义各种样式,可以在官方文档里查看,都比较清楚。
实际业务中,除了文字,其他的类型,比如 svg,蒙版,各种特效都直接以图片的形式替代,所以有时候会导致下载比较久。最容易出问题的就是 ID
的匹配,不能出现重复的 ID
。
总的来说,如果要实现什么效果不知道怎么下手的话,只要自己动手在 PPT 里实现一下,解析出来研究看看文件结构,就知道怎么做了。