前言¶
在 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。