PPTX 建立、編輯與分析
概述
使用者可能會要求你建立、編輯或分析 .pptx 檔案的內容。.pptx 檔案本質上是一個包含 XML 檔案與其他資源的 ZIP 壓縮檔,你可以讀取或編輯這些內容。針對不同的任務,你有不同的工具與工作流程可供使用。
讀取與分析內容
文字萃取
如果只需要讀取簡報的文字內容,請將文件轉換為 Markdown:
# 將文件轉換為 Markdown
python -m markitdown path-to-file.pptx
原始 XML 存取
你需要原始 XML 存取權限來處理:留言、演講者備註、投影片版面配置、動畫、設計元素與複雜格式。若需使用這些功能,你必須將簡報解壓縮並讀取其原始 XML 內容。
解壓縮檔案
python ooxml/scripts/unpack.py <office_file> <output_dir>
注意:unpack.py 腳本位於專案根目錄的 skills/pptx/ooxml/scripts/unpack.py。如果該路徑下找不到腳本,請使用 find . -name "unpack.py" 來定位。
主要檔案結構
ppt/presentation.xml- 主要簡報後設資料與投影片參考ppt/slides/slide{N}.xml- 個別投影片內容 (slide1.xml、slide2.xml 等)ppt/notesSlides/notesSlide{N}.xml- 每張投影片的演講者備註ppt/comments/modernComment_*.xml- 特定投影片的留言ppt/slideLayouts/- 投影片版面配置範本ppt/slideMasters/- 母片範本ppt/theme/- 主題與樣式資訊ppt/media/- 圖片與其他媒體檔案
字型與色彩提取
當需要仿效指定的設計範例時:請先使用以下方法分析簡報的字型與色彩:
- 讀取主題檔案:檢查
ppt/theme/theme1.xml中的色彩 (<a:clrScheme>) 與字型 (<a:fontScheme>) - 取樣投影片內容:檢查
ppt/slides/slide1.xml中實際使用的字型 (<a:rPr>) 與色彩 - 搜尋模式:使用 grep 在所有 XML 檔案中尋找色彩 (
<a:solidFill>、<a:srgbClr>) 與字型參考
建立新的 PowerPoint 簡報(不使用範本)
當需要從頭建立新的 PowerPoint 簡報時,請使用 html2pptx 工作流程將 HTML 投影片轉換為精準定位的 PowerPoint。
設計原則
關鍵:在建立任何簡報之前,請先分析內容並選擇合適的設計元素:
- 考慮主題:這是關於什麼的簡報?它反映了什麼調性、產業或氛圍?
- 檢查品牌識別:如果使用者提及公司或組織,請考慮其品牌色彩與識別
- 配色符合內容:選擇能反映主題的色彩
- 說明你的方法:在撰寫程式碼之前解釋你的設計選擇
要求:
- ✅ 在撰寫程式碼之前,說明你根據內容所做的設計方法
- ✅ 僅使用網頁安全字型:Arial、Helvetica、Times New Roman、Georgia、Courier New、Verdana、Tahoma、Trebuchet MS、Impact
- ✅ 透過大小、粗細與色彩建立清晰的視覺層級
- ✅ 確保可讀性:強烈對比、適當的文字大小、乾淨的對齊
- ✅ 保持一致:在投影片間重複使用模式、間距與視覺語言
配色選擇
創意選色:
- 跳脫預設:思考什麼色彩真正符合這個特定主題?避免自動導航的選擇。
- 考慮多重角度:主題、產業、氛圍、能量程度、目標受眾、品牌識別(若有提及)
- 勇於嘗試:嘗試意想不到的組合——醫療簡報不一定要是綠色,金融不一定要是深藍色
- 建立調色盤:挑選 3-5 個能搭配的色彩(主色 + 輔助色 + 強調色)
- 確保對比:文字必須在背景上清晰可讀
範例調色盤(激發創意——選擇一個、修改它或自行建立):
- 經典藍:深海軍藍 (#1C2833)、石板灰 (#2E4053)、銀色 (#AAB7B8)、米白 (#F4F6F6)
- 湖水藍與珊瑚紅:湖水藍 (#5EA8A7)、深湖水藍 (#277884)、珊瑚紅 (#FE4447)、白色 (#FFFFFF)
- 大膽紅:紅色 (#C0392B)、亮紅 (#E74C3C)、橘色 (#F39C12)、黃色 (#F1C40F)、綠色 (#2ECC71)
- 溫暖玫瑰色:灰玫瑰 (#A49393)、玫瑰粉 (#EED6D3)、玫瑰紅 (#E8B4B8)、奶油色 (#FAF7F2)
- 酒紅奢華:酒紅 (#5D1D2E)、深紅 (#951233)、鐵鏽色 (#C15937)、金色 (#997929)
- 深紫與祖母綠:紫色 (#B165FB)、深藍 (#181B24)、祖母綠 (#40695B)、白色 (#FFFFFF)
- 奶油色與森林綠:奶油色 (#FFE1C7)、森林綠 (#40695B)、白色 (#FCFCFC)
- 粉紅與紫色:粉紅 (#F8275B)、珊瑚紅 (#FF574A)、玫瑰紅 (#FF737D)、紫色 (#3D2F68)
- 萊姆綠與李子紫:萊姆綠 (#C5DE82)、李子紫 (#7C3A5F)、珊瑚紅 (#FD8C6E)、藍灰 (#98ACB5)
- 黑與金:金色 (#BF9A4A)、黑色 (#000000)、奶油色 (#F4F6F6)
- 鼠尾草綠與陶土紅:鼠尾草綠 (#87A96B)、陶土紅 (#E07A5F)、奶油色 (#F4F1DE)、木炭灰 (#2C2C2C)
- 木炭灰與紅:木炭灰 (#292929)、紅色 (#E33737)、淺灰 (#CCCBCB)
- 鮮明橘:橘色 (#F96D00)、淺灰 (#F2F2F2)、木炭灰 (#222831)
- 森林綠:黑色 (#191A19)、綠色 (#4E9F3D)、深綠 (#1E5128)、白色 (#FFFFFF)
- 復古彩虹:紫色 (#722880)、粉紅 (#D72D51)、橘色 (#EB5C18)、琥珀色 (#F08800)、金色 (#DEB600)
- 復古大地色:芥末黃 (#E3B448)、鼠尾草綠 (#CBD18F)、森林綠 (#3A6B35)、奶油色 (#F4F1DE)
- 海岸玫瑰:舊玫瑰 (#AD7670)、海狸棕 (#B49886)、蛋殼白 (#F3ECDC)、灰綠 (#BFD5BE)
- 橘色與湖水藍:淺橘 (#FC993E)、灰湖水藍 (#667C6F)、白色 (#FCFCFC)
視覺細節選項
幾何圖案:
- 對角線分割區塊取代水平分割
- 不對稱欄寬 (30/70、40/60、25/75)
- 旋轉 90° 或 270° 的文字標題
- 圓形或六邊形圖片框
- 角落三角形裝飾形狀
- 重疊形狀營造深度
邊框與框架處理:
- 僅單邊使用粗單色邊框 (10-20pt)
- 對比色雙線邊框
- 角落括弧取代完整框架
- L 形邊框 (上方+左方 或 下方+右方)
- 標題下方底線強調 (3-5pt 粗)
字型處理:
- 極端尺寸對比 (72pt 標題 vs 11pt 內文)
- 全大寫標題搭配寬字距
- 以超大字級顯示字型呈現編號章節
- 使用等寬字型 (Courier New) 呈現資料/統計/技術內容
- 壓縮字型 (Arial Narrow) 處理密集資訊
- 空心文字作為強調
圖表與資料樣式:
- 單色圖表,僅以一個強調色標示關鍵資料
- 水平長條圖取代垂直長條圖
- 圓點圖取代長條圖
- 極簡格線或無格線
- 資料標籤直接置於元素上(無圖例)
- 關鍵指標使用超大數字
版面創新:
- 滿版圖片搭配文字疊加
- 側邊欄 (20-30% 寬度) 用於導覽/脈絡
- 模組化網格系統 (3×3、4×4 區塊)
- Z 型或 F 型內容流動
- 浮動文字框疊在彩色形狀上
- 雜誌風格多欄版面
背景處理:
- 佔據投影片 40-60% 的純色區塊
- 漸層填滿(僅垂直或對角線)
- 分割背景(兩種色彩,對角線或垂直分割)
- 邊到邊的色彩條帶
- 將負空間作為設計元素
版面提示
建立包含圖表或表格的投影片時:
- 雙欄版面(建議):使用全寬標題,下方分為兩欄——文字/項目符號在一欄,重點內容在另一欄。這能提供更好的平衡,並讓圖表/表格更易讀。使用 Flexbox 搭配不等欄寬 (例如 40%/60%) 來為每種內容類型最佳化空間。
- 全投影片版面:讓重點內容(圖表/表格)佔據整張投影片以獲得最大影響力與可讀性
- 絕對不要垂直堆疊:不要將圖表/表格放在文字下方形成單欄——這會導致可讀性差與版面問題
工作流程
- 必須 - 讀取完整檔案:從頭到尾完整閱讀
html2pptx.md。讀取此檔案時絕不要設定任何範圍限制。 在繼續建立簡報之前,請完整閱讀檔案內容以了解詳細語法、關鍵格式化規則與最佳實務。 - 為每張投影片建立具有適當尺寸 (例如 16:9 為 720pt × 405pt) 的 HTML 檔案
- 使用
<p>、<h1>-<h6>、<ul>、<ol>處理所有文字內容 - 使用
class="placeholder"標記將要加入圖表/表格的區域(以灰色背景呈現以便辨識) - 關鍵:先使用 Sharp 將漸層和圖示柵格化為 PNG 圖片,然後在 HTML 中引用
- 版面:對於包含圖表/表格/圖片的投影片,使用全投影片版面或雙欄版面以獲得更好的可讀性
- 使用
- 建立並執行 JavaScript 檔案,使用
html2pptx.js函式庫將 HTML 投影片轉換為 PowerPoint 並儲存簡報- 使用
html2pptx()函數處理每個 HTML 檔案 - 使用 PptxGenJS API 將圖表與表格加入佔位區域
- 使用
pptx.writeFile()儲存簡報
- 使用
- 視覺驗證:產生縮圖並檢查版面問題
- 建立縮圖網格:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - 仔細檢查縮圖圖片是否有:
- 文字被裁切:文字被標題欄、形狀或投影片邊緣裁切
- 文字重疊:文字與其他文字或形狀重疊
- 定位問題:內容太靠近投影片邊界或其他元素
- 對比問題:文字與背景之間對比不足
- 如果發現問題,調整 HTML 的邊距/間距/色彩並重新產生簡報
- 重複直到所有投影片視覺上正確
- 建立縮圖網格:
編輯現有的 PowerPoint 簡報
當需要編輯現有 PowerPoint 簡報中的投影片時,你必須處理原始的 Office Open XML (OOXML) 格式。這涉及解壓 .pptx 檔案、編輯 XML 內容,然後重新封裝。
工作流程
- 必須 - 讀取完整檔案:從頭到尾完整閱讀
ooxml.md(約 500 行)。讀取此檔案時絕不要設定任何範圍限制。 在進行任何簡報編輯之前,請完整閱讀檔案內容以獲得 OOXML 結構與編輯工作流程的詳細指引。 - 解壓簡報:
python ooxml/scripts/unpack.py <office_file> <output_dir> - 編輯 XML 檔案 (主要是
ppt/slides/slide{N}.xml及相關檔案) - 關鍵:每次編輯後立即驗證並修正任何驗證錯誤,然後再繼續:
python ooxml/scripts/validate.py <dir> --original <file> - 封裝最終簡報:
python ooxml/scripts/pack.py <input_directory> <office_file>
建立新的 PowerPoint 簡報(使用範本)
當你需要建立遵循現有範本設計的簡報時,你必須先複製並重新排列範本投影片,然後再取代佔位符內容。
工作流程
-
萃取範本文字並建立視覺縮圖網格:
- 萃取文字:
python -m markitdown template.pptx > template-content.md - 讀取
template-content.md:完整讀取此檔案以了解範本簡報的內容。讀取此檔案時絕不要設定任何範圍限制。 - 建立縮圖網格:
python scripts/thumbnail.py template.pptx - 參閱建立縮圖網格章節以取得更多詳細資訊
- 萃取文字:
-
分析範本並將庫存清單儲存至檔案:
- 視覺分析:檢閱縮圖網格以了解投影片版面、設計模式與視覺結構
- 在
template-inventory.md建立並儲存範本庫存檔案,內容應包含:# 範本庫存分析 **投影片總數:[計數]** **重要:投影片索引從 0 開始(第一張投影片 = 0,最後一張 = 計數-1)** ## [分類名稱] - 投影片 0:[版面代碼(如有)] - 描述/用途 - 投影片 1:[版面代碼] - 描述/用途 - 投影片 2:[版面代碼] - 描述/用途 [... 每張投影片都必須個別列出其索引 ...] - 使用縮圖網格:參考視覺縮圖來識別:
- 版面模式(標題投影片、內容版面、章節分隔頁)
- 圖片佔位符位置與數量
- 投影片組間的設計一致性
- 視覺層級與結構
- 在下一步驟中,選擇合適的範本時需要此庫存檔案
-
根據範本庫存建立簡報大綱:
- 檢閱步驟 2 中可用的範本。
- 為第一張投影片選擇介紹或標題範本。這應該是前幾個範本之一。
- 為其他投影片選擇安全、以文字為基礎的版面。
- 關鍵:將版面結構與實際內容匹配:
- 單欄版面:用於統一的敘述或單一主題
- 雙欄版面:僅在你有恰好 2 個不同的項目/概念時使用
- 三欄版面:僅在你有恰好 3 個不同的項目/概念時使用
- 圖片+文字版面:僅在你有實際圖片要插入時使用
- 引言版面:僅用於來自真實人物的引言(需標明出處),絕不用於強調
- 絕不使用內容佔位符超過你實際內容數量的版面
- 如果你有 2 個項目,不要強迫它們進入三欄版面
- 如果你有 4 個以上的項目,考慮分成多張投影片或使用列表格式
- 在選擇版面之前,先計算你實際的內容數量
- 驗證所選版面中的每個佔位符都將填入有意義的內容
- 為每個內容區塊選擇一個代表最佳版面的選項。
- 儲存
outline.md,內容應包含內容以及利用可用設計的範本對應 - 範例範本對應:
...
[內容已截斷]