首發於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 裏實現一下,解析出來研究看看文件結構,就知道怎麼做了。