From 39ef4038423873af608a000a18a162a6a082c0d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=9B?= Date: Wed, 22 Jul 2026 17:54:46 +0800 Subject: [PATCH] add: requirements doc for HTML-to-PPTX export engine --- REQUIREMENTS.md | 115 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 REQUIREMENTS.md diff --git a/REQUIREMENTS.md b/REQUIREMENTS.md new file mode 100644 index 0000000..bc2dcbb --- /dev/null +++ b/REQUIREMENTS.md @@ -0,0 +1,115 @@ +# HTML to PPTX 导出引擎 + +## 背景 + +DashiAI PPT Skill 中包含一个 `html-deck-to-pptx` 导出子包,能将 HTML 演示文稿导出为可编辑的 PPTX 文件。该子包目前为专有组件(非开源),但其核心逻辑可复刻。 + +我们需要一个独立、可控的导出引擎,集成到现有工作流中。凡是 Hermes/Agogent 生成的 HTML PPT,都能一键导出为**文字可编辑、布局可还原**的 PPTX 文件。 + +--- + +## 需求 + +### 输入 + +- 一个 HTML 文件(含完整 CSS 内联或外联),结构为横向翻页的演示文稿 +- 每页用 `
` 或特定容器标识 +- 样式通过 CSS 定义(font-size, color, font-weight, text-align, background-color 等) + +### 输出 + +- 一个标准的 `.pptx` 文件,可用 Microsoft PowerPoint / WPS / Keynote 打开 +- **文字必须可编辑**(双击修改字体、大小、颜色) +- **形状/框线/背景色保持矢量**(可拖动、缩放) +- **排版布局按原始位置还原**(x, y, width, height 尽可能一致) + +### 可放弃的特性(第一期不做) + +- JS 图表(ECharts/Chart.js)→ 导出为截图占位或忽略 +- CSS 渐变/阴影/圆角 → 简化或忽略 +- 入场/翻页动画 → 忽略 +- Web 字体 → 映射为 Office 相近字体 +- 响应式布局 → 固定一宽高比 + +--- + +## 技术方案 + +### 架构 + +``` +HTML 文件 + ↓ +启动本地 HTTP 服务(Node.js http-server 或 express) + ↓ +Chrome headless(通过 playwright)打开页面 + ↓ +遍历 DOM,提取每页每个元素: + - 位置(offsetLeft, offsetTop, offsetWidth, offsetHeight) + - 文字内容(innerText) + - 样式(font-size, color, font-weight, text-align, background-color 等) + ↓ +pptxgenjs 按页创建 slide,按坐标绘制 TextBox / Shape + ↓ +输出 .pptx 文件 +``` + +### 核心依赖 + +| 依赖 | 用途 | 备注 | +|------|------|------| +| `playwright` | 控制 Chrome headless 渲染页面、提取 DOM 信息 | 你的环境已有 Chrome | +| `pptxgenjs` | 生成 PPTX 文件(OOXML) | 纯 JS,不依赖 Office | +| `http-server` 或 express | 本地静态文件服务 | | + +### 可选升级 + +- 支持 PNG/JPEG 图片的提取与还原 +- 表格结构识别(`` → PPT 表格) +- 列表识别(`