Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Agent 启动时的**当前工作区根目录就是当前 deck 根目录**,不

- 唯一导出链路是 **editable HTML → EditableSlideScene → OOXML**。每页严格为 **1280px × 720px**,不得建议或设计第二条导出链路。
- 只使用 solid color;不得生成 CSS gradient 或 `background-image`。背景、border、圆角只放在 `div` 等几何容器,文字标签不得承载 background、border 或 shadow。
- `box-shadow` 只支持单层 outer、非 inset、zero spread;多层、inset、blur+spread 等不支持形态必须 blocking。`text-shadow` 任何非 `none` 形态均必须 blocking
- `box-shadow` 只支持单层 outer、非 inset、zero spread 的原生映射;多层 shadow 只取首个可用层,负 spread 按 0 近似,inset 等其余不支持形态导出时自动移除,不得依赖。`text-shadow` 任何非 `none` 形态在导出时一律自动移除,不得依赖其呈现层次
- HTML 文字只可放在 `<p>`、`<h1>`–`<h6>`、`<li>` 中;`span` 只作这些标签内的文本 run,不得生成 `div` 裸文字。
- 禁止 CSS `filter`、`mask`、generated content、animation、外部资源和复杂/filled SVG path;禁止任意顶点/非严格对称 polygon,仅允许严格对称 triangle/diamond。
- 线与曲线优先直接生成 `line` 或 `polyline`;只有确有必要时才写兼容边界所列的 path 子集。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@

- 每页严格为 **1280px × 720px**。只使用 solid color;不得生成 CSS gradient 或 `background-image`。
- HTML 文字只可放在 `<p>`、`<h1>`–`<h6>`、`<li>` 中;`span` 只作文本 run,不得生成 `div` 裸文字。
- `box-shadow` 只支持单层 outer、非 inset、zero spread;多层、inset、blur+spread 等不支持形态必须 blocking。`text-shadow` 任何非 `none` 形态均必须 blocking
- `box-shadow` 只支持单层 outer、非 inset、zero spread 的原生映射;多层 shadow 只取首个可用层,负 spread 按 0 近似,inset 等其余不支持形态导出时自动移除,不得依赖。`text-shadow` 任何非 `none` 形态在导出时一律自动移除,不得依赖其呈现层次
- 图表、流程箭头、虚线和曲线必须使用支持的可编辑原语;线与曲线优先直接生成 `line` 或 `polyline`。
- 条形、柱形、进度、堆叠条使用纯色 shape;点图使用 ellipse;目标线、坐标轴和连接线使用 line。
- Authoring 流程箭头只由 editable line + CSS border triangle,或 SVG line + strict symmetric triangle polygon 构成。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ PPT Live 的唯一导出链路是 **editable HTML → EditableSlideScene → OOX
- 每页严格为 **1280px × 720px**。只使用 solid color;不得生成 CSS gradient 或 `background-image`,即使 converter 对部分旧输入有兼容重写能力。
- HTML 文字只可放在 `<p>`、`<h1>`–`<h6>`、`<li>` 中;`span` 只作这些标签内的文本 run。不得生成 `div` 裸文字。
- 背景、border、圆角只放在 `div` 等几何容器;文字标签不得承载 background、border 或 shadow。
- `box-shadow` 只支持单层 outer、非 inset、zero spread;多层、inset、blur+spread 等不支持形态必须 blocking。`text-shadow` 任何非 `none` 形态均必须 blocking
- `box-shadow` 只支持单层 outer、非 inset、zero spread 的原生映射;多层 shadow 只取首个可用层,负 spread 按 0 近似,inset 等其余不支持形态导出时自动移除,不得依赖。`text-shadow` 任何非 `none` 形态在导出时一律自动移除,不得依赖其呈现层次
- 禁止 CSS `filter`、`mask`、generated content、animation、外部资源和复杂/filled SVG path;禁止任意顶点/非严格对称 polygon,仅允许严格对称 triangle/diamond。
- 线与曲线优先直接生成 `line` 或 `polyline`;只有确有必要时才写兼容边界所列的 path 子集,且最终仍须成为独立 editable line。
- Authoring 流程箭头只由 editable line + CSS border triangle,或 SVG line + strict symmetric triangle polygon 构成。
Expand Down Expand Up @@ -76,8 +76,8 @@ body {
## 3. Solid、Background 与 Border

- 所有 fill、background 和 border 都必须是纯色;禁止 CSS gradient、纹理、图案填充和半透明叠图模拟。
- 背景、边框和圆角只放在 `<div>` 等几何容器上。`box-shadow` 的精确可编辑子集仅为单层 outer shadow、非 inset、zero spread;多层、inset、blur+spread 或其他不支持形态必须 blocking。converter 可将 legacy hard ring(`0 0 0 Npx`)重写为同心可编辑 shape,但 authoring 不得依赖该 rewrite。
- 文字标签不得有 background、border、border-radius 或 box-shadow;`text-shadow` 任何非 `none` 形态都必须 blocking,禁止静默丢失
- 背景、边框和圆角只放在 `<div>` 等几何容器上。`box-shadow` 的精确可编辑子集为单层 outer shadow、非 inset、zero spread 的原生映射;多层 shadow 只取首个可用层,负 spread 按 0 近似,inset 等其余不支持形态导出时自动移除。converter 可将 legacy hard ring(`0 0 0 Npx`)重写为同心可编辑 shape,但 authoring 不得依赖该 rewrite。
- 文字标签不得有 background、border、border-radius 或 box-shadow;`text-shadow` 任何非 `none` 形态在导出时一律自动移除,不得依赖其呈现层次
- `background-image` 在任何元素上都禁止。
- 数据条、色带和热力档位用多个离散纯色几何元素表达。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ pub const BUILTIN_APPS: &[BuiltinMiniAppBundle] = &[
},
BuiltinMiniAppBundle {
id: "builtin-ppt-live",
version: 231,
version: 232,
meta_json: include_str!("builtin/assets/ppt-live/meta.json"),
html: include_str!("builtin/assets/ppt-live/index.html"),
css: include_str!("builtin/assets/ppt-live/style.css"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ ppt-live/
├── export-deck-host.js # 导出函数的 re-export 壳(ui.js 通过它引入导出能力)
├── export-deck-browser.js # EditableSlideScene/PDF/PNG 导出实现
├── export-slide-browser.js # 幻灯片预处理编排(挂载 DOM → sanitize → scene)
├── preflight-slide-audit.js # sanitizer 前可见元素、CSS paint/text-shadow fail-close
├── export-degrade.js # 导出降级层(剥样式 / 移除元素 / 简化页面,代替阻断)
├── editable-slide-normalize.js # HTML/SVG/table → EditableSlideScene
├── editable-slide-scene.js # 可编辑场景契约、校验与结构化错误
├── html2pptx-dom-core.js # DOM 几何与原生元素提取辅助
Expand Down Expand Up @@ -109,8 +109,11 @@ PPT Live 只有一条 PPTX 导出管线:HTML 幻灯片和旧 element-model 幻
映射为 PowerPoint 原生文本、形状、线、表格和有明确用户图片意图的 picture。

`EditableSlideScene` 不接受栅格兜底、整页截图、SVG 图片层或降级成功状态。可确定重写的
CSS/SVG 构造会转换为原生节点;无法表示的输入会携带页码、source id 和错误码阻止导出。
表格通过 `addTable` 写为原生 `a:tbl`,生成的几何不得产生 `p:pic` 或媒体关系。
CSS/SVG 构造会转换为原生节点;其余无法表示的输入由导出降级层(`export-degrade.js`)处理:
不支持的样式(box-shadow、text-shadow、filter、mask、background-image、动画等)被剥离,
无法表示的元素被移除,仍失败的页面被替换为简化可编辑场景——所有降级都会记录在导出摘要中,
单个元素或单页问题不再阻断整个导出。表格通过 `addTable` 写为原生 `a:tbl`,生成的几何不得产生
`p:pic` 或媒体关系。

DOM 几何来自 `getBoundingClientRect()`(border-box),以 `px / 96` 转换为英寸。
CSS padding 会成为文本框或表格单元格 inset;垂直对齐由可表示的布局属性推导。
Expand All @@ -130,10 +133,14 @@ prepareEditableSlides(slides, options)
→ loadHtmlInExportRoot(html) // 挂载到离屏 shadow-DOM div (1280×720)
→ sanitizeSlideDocumentRoot(doc) // 净化 HTML
→ waitForExportPaint() // 等待两帧渲染
→ normalizeDocumentToEditableScene(doc)
→ normalizeWithDegradation(...) // 严格 normalize + 有界降级修复循环
→ buildSimplifiedEditableScene() // 单页最终兜底(保留页数与文字)
→ 返回 EditableSlideScene[]
```

`options.onDegrade(record)` 逐条收集降级记录(剥样式 / 移除元素 / 简化页面),
由 `summarizePptxExportDiagnostics(scenes, degradations)` 合并进导出摘要展示给用户。

旧 element-model 页面通过 `normalizeElementSlideToEditableScene` 进入同一 scene 契约。
`exportEditablePptx(deck, scenes)` 逐页调用唯一 serializer 生成最终 PPTX;流程为顺序执行,
不插入人工延时。
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"schemaVersion": 1,
"id": "builtin-ppt-live",
"version": 231
"version": 232
}
Loading
Loading