宣讲稿 → 政务红金 PPT
目的
把一份宣讲/竞聘/汇报文稿转成可直接上台的 PPT,并在用户手工微调后继续做增量修改。核心不是"生成好看的页面",而是三件难事:内容零失真、版式可延续、背景可定制。
五条铁律(违反会直接返工)
- 内容严格框定文稿。 不检索、不补充、不扩写、不改口径;只做版式化排布。文稿没有的数据一律不放。
- 先对齐页数口径再动手。 docx 没有分页符时,用户通常以【】块、① ② 编号、段落小标题作为页边界。开工前先报出页数与分页对照表让用户确认;用户说"一共 10 页"就是 10 页,禁止按语义合并。
- 用户手调过的 PPTX 是唯一基线。 一旦用户在编辑器里改过版式,磁盘上的 pptx 就是权威源。历史源码(如
slides/*.slide)作废,只做单页增量补丁,绝不整篇重生成覆盖。 - 全篇背景必须完全一致。 同一张底图 + 同一套叠加层 + 同一裁切;仅在图片密集页加深一层暗幕。
- 先读出现状,再改。 改任何既有文件前先解析出真实坐标/字体/颜色;编辑器会话可能已关闭,用
scripts/dump_pptx_layout.py直接读 pptx 比依赖实时接口可靠。
工作流
1. 解析素材
- docx:本机常无 python-docx 且 pip 被封。用
zipfile+ElementTree直读word/document.xml(段落顺序)、word/_rels/document.xml.rels(media/*映射),按出现位置插[IMG:media/xxx.png]标记。逐张 Read 核对图片内容再决定用途。 - 已存在的 pptx:用
scripts/dump_pptx_layout.py导出每页形状的类型/坐标(pt)/字号/字体/填充色/图片引用,作为"现状基线"。 - 详见
references/source-parsing.md。
2. 确认分页并出对照表
列出「页号|文稿原文|页面功能」三列表,交给用户确认后再生成。
3. 建立版式规范
按 references/layout-spec.md 的红金政务风基线执行(网格、字号阶梯、色板、组件、逐页坐标)。生成后把实测规范写进项目 DESIGN.md,作为后续修改的唯一依据。
4. 背景图处理(本次会话沉淀的核心能力)
- 去水印:AI 生图常在右下角带平台文字。定位后从上方取干净像素修补 + 接缝渐隐,不要用"盖黑块"(盖不住)。
- 主题元素:按文稿主题绘制矢量质感元素(车票主题 → 铁轨 + 高铁),2 倍超采样抗锯齿,颜色压在"背景层"强度。
- 无 Pillow 时全流程纯 Python 完成(PNG 解码/编码、透视绘制、alpha 合成),方法与坑见
references/no-pillow-image.md。 - 脚本:
scripts/png_toolkit.py(库)、scripts/railway_background.py(铁轨+列车场景,参数化 CLI)。
5. 全篇统一替换背景
10 页通常共享同一个 media 文件(如 ppt/slides/media/image1.png)。只替换这一个媒体条目即可全篇生效,版式 XML 一个字节不动——这是最安全的改背景方式。用 scripts/replace_pptx_media.py(自动备份、检测文件锁定、校验 zip 完整性)。
若被预览窗口锁定无法原地覆盖,另存为新文件并请用户关闭旧预览后再合并。
6. 学习用户手调
用户说"学习我调整后的排版"时:解析 pptx 取全部页面实测值 → 归纳规则(左对齐轴向、单一主角字号、缩进错位、金线锚点、暗块聚光、署名位置)→ 写入 DESIGN.md → 后续只做增量补丁。
资源
| 文件 | 用途 |
|---|---|
scripts/dump_pptx_layout.py |
解析 pptx 每页版式(EMU→pt),输出形状/文字/字号/字体/填充色/图片引用 |
scripts/png_toolkit.py |
纯 Python PNG 解码/编码 + 覆盖层绘制(线段胶囊、多边形、椭圆、预乘 alpha 合成、降采样、区域修补) |
scripts/railway_background.py |
参数化生成「铁轨 + 高铁剪影」背景(CLI 可调消失点、出画点、列车位置与尺寸) |
scripts/replace_pptx_media.py |
备份并替换 pptx 内指定媒体,处理文件锁定与 zip 完整性校验 |
references/layout-spec.md |
红金政务风完整版式规范:网格、字号阶梯、色板、页脚/图卡/标题栏组件、逐页实测坐标 |
references/no-pillow-image.md |
无 Pillow 环境下的图像处理工作流与 alpha 合成踩坑清单 |
references/source-parsing.md |
无 python-docx 时解析 docx、无实时接口时解析 pptx 的方法 |
高频踩坑
- pip 装不上任何包(网络封锁):不要反复重试,直接走纯 Python 方案。
- 写 pptx 前先备份:用户可能已在编辑器里手调,覆盖后无法找回。
- 修改前先 Read:编辑工具要求先读过目标文件;源码与设计文档都要先读。
- 编辑器实时接口可能返回 0 页(会话关闭):改用解析 pptx 文件本身。
- 图片水印"看起来淡"不代表能盖住:投影时会被放大,必须像素级修补。