前言¶
在 DSH 工作流裏用代碼生成演示文稿時,常見路徑是 Python 的 python-pptx:排版、佔位、導出 .pptx 都能做,但庫本身不實現 OOXML 裏的 <p:timing>,多數「程序化出片」方案只能得到靜態頁,放映時沒有按元素順序的進入動畫,也沒有幻燈片切換。若要在不改手工點 PowerPoint 的前提下補這一層,需要在生成後往文件裏寫入合法的時間軸樹。下面介紹社區插件 dsh-pptx-anim(維護者 ZSX-114514,分類:工作流),它通過 DSH 工具調用 Python 腳本直接寫 OOXML,動畫數據落在文件內,目標機器不必安裝 PowerPoint 或 WPS。
這是什麼¶
dsh-pptx-anim 是給 .pptx 批量注入真正的 PowerPoint 進入動畫與幻燈片切換的 DSH 插件,用來補上 python-pptx 沒有動畫 API 的缺口。Host 半在 Node.js 側註冊工具並探測 Python,實際改包邏輯在 scripts/pptx_anim.py(讀 pptx、按預設生成 <p:timing> 樹、寫出新文件);結構校驗在 scripts/validate.py(解 zip 檢查 slide XML)。許可證爲 MIT(package.json 版本 0.1.0)。
核心功能¶
插件暴露三個工具,職責如下。
| 工具 | 作用 |
|---|---|
pptx_animate |
給 pptx 注入進入動畫 + 頁面切換(不修改源文件) |
pptx_anim_validate |
結構校驗:元素順序、空條件列表、動畫目標是否指向真實形狀 |
pptx_anim_env |
探測哪個 Python 能 import pptx |
動畫效果限定爲較穩的 animEffect 型(淡出、擦除、盒狀、圓形、菱形、十字等單節點編碼)。不做 Morph、運動路徑(animMotion)、觸發器鏈、按段落逐條動畫;一頁動畫節點超過 25 個可能導致放映卡頓,文檔建議拆頁。
預設 preset 包括 auto(默認,按頁構成判定)、title、proposition、image、cards、data、none(只加切換、不加進入動畫)等;可配合 transition(例如 fade)使用。生成 deck 時若給形狀命名 s01、s02……按閱讀順序,播放順序按序號;未命名則按 z-order。
README 記載的驗證情況(2026-10-29,Windows 11 + DSH 0.2.1):15 頁一次性注入 193 個 animEffect 節點與全頁切換;修正了 transition 須排在 timing 之前、stCondLst 不能爲空等會導致 PowerPoint「需要修復」的問題;注入後文件可在 LibreOffice 正常打開。未驗證 PowerPoint / WPS 實機播放(開發環境爲 ONLYOFFICE);交付時建議保留無動畫版,首次放映前用 F5 預覽。
依賴¶
- Node.js ≥ 20(DSH 自帶即可滿足插件
engines) - Python 3 且能
import pptx(pip install python-pptx)。工具會在python/python3/py間自動探測;失敗時可傳工具參數python指定絕對路徑,或設置環境變量DSH_PPTX_ANIM_PYTHON。找不到解釋器時會明確報錯並列出嘗試過的解釋器,不會靜默失敗。
安裝與啓用¶
插件以當前 DSH 進程權限運行;安裝前請自行查看倉庫源碼與 MIT 許可證。社區目錄頁:https://www.skillhub.cn/plugins/ZSX-114514/dsh-pptx-anim;源碼:https://github.com/ZSX-114514/dsh-pptx-anim。
方式 A:本地掛載(自用 / 開發)¶
- 將本倉庫複製到 DSH profile 的
plugins/下,例如:
~/.dsh/profiles/<profile>/plugins/dsh-pptx-anim/
- 在該 profile 的
cordis.patch.yml末尾追加:
- insert:
- id: pptx-anim
name: ./plugins/dsh-pptx-anim/lib/index.js
- 重啓 DSH(Host 半改動必須重啓),用
pptx_anim_env或工具列表確認pptx_animate已加載。
方式 B:作爲 bundle 安裝¶
倉庫自帶 cordis.patch.yml(dsh.bundle.patch),安裝後會自動掛載:
dsh plugin --profile <profile> add dsh-pptx-anim # 從 npm
dsh plugin --profile <profile> add file:<本地目錄或 tgz> # 從本地
以本地目錄安裝時,包目錄爲符號鏈接;本插件僅 Host 半,符號鏈接不影響加載。
安裝後自檢¶
pptx_anim_env({}) → 應返回一個可用的 Python
pptx_animate({ input: "<任一 .pptx 的絕對路徑>" }) → 生成 <原名>_anim.pptx
pptx_anim_validate({ input: "<原名>_anim.pptx" }) → 應顯示「結構校驗通過」
典型用法¶
基本調用:指定輸入路徑,輸出爲同目錄下 <原名>_anim.pptx,並返回每頁動畫節點數。
pptx_animate({ input: "C:/x/deck.pptx" })
→ 生成 C:/x/deck_anim.pptx,返回每頁動畫節點數
pptx_anim_validate({ input: "C:/x/deck_anim.pptx" })
→ 結構校驗通過 / 列出問題
指定預設與切換效果示例:
pptx_animate({ input: "...", preset: "cards", transition: "fade" })
若用 python-pptx 生成內容並希望控制播放順序,可在寫形狀時命名:
shape = slide.shapes.add_textbox(...)
shape.name = 's01'
適用場景與注意¶
適合已經用 python-pptx(或等價流程)產出靜態 .pptx、希望在 agent 工作流裏一步生成帶進入動畫與切換的新文件的場景;與 DSH「一切皆插件」的生態一致——能力通過工具暴露,由智能體或腳本編排調用。
使用時注意:源文件不會被原地覆蓋;結構上不把手寫 p:timing 插在 p:transition 之前(插件已按正確順序生成)。SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係,安裝來源以 README 與倉庫爲準。
結尾¶
dsh-pptx-anim 把「靜態 programmatic deck」和「文件內嵌的真實 timing/transition」連在一起,並附帶校驗與環境探測,便於在自動化流水線裏復現。目錄頁:https://www.skillhub.cn/plugins/ZSX-114514/dsh-pptx-anim;GitHub:https://github.com/ZSX-114514/dsh-pptx-anim。