Commit Graph
18 Commits
Author SHA1 Message Date
李进 5035647c91 fix: TEXT 被 IMAGE 包含时也移除(aria-label 等隐藏文字) 2026-07-24 18:29:06 +08:00
李进 d4d86eb1da fix: IMAGE 覆盖的 TEXT 节点自动移除
当 TEXT 节点和 IMAGE 节点同坐标同尺寸时,移除 TEXT(图片替代文字)
2026-07-24 18:27:12 +08:00
李进 8ab3f479a7 feat: 图片自动下载 + 重叠去重 bug 修复
- IMG 标签自动从 src URL 下载图片并嵌入 PPT
- URL 拼接用 origin 而非完整 pageUrl(修复 404)
- collectSlideChildren 补全 backgroundImages 字段传递
- 重叠去重 key 加 type,避免不同类型节点被误删
- 三个 PPT 都验证通过
2026-07-24 18:25:01 +08:00
李进 f3853e31d4 feat: z-index排序 + 重叠去重 + overflow裁剪 + 图片支持
- z-index 排序:兄弟节点按 zIndex 排序,高层在上
- 重叠去重:同坐标完全相同的节点只保留后者
- overflow:hidden:用 clipRect 裁剪,完全在区域外的节点跳过
- 图片支持:RECTANGLE 有 backgroundImages 的也作为图片渲染
- 三个 PPT 都验证通过
2026-07-24 18:05:41 +08:00
李进 0ed04eb3ea refactor: 背景色兜底用 canvas 背景色替代硬编码 2026-07-24 17:36:07 +08:00
李进 8f507256ef fix: 合并文本框宽度用 rect.w 而非 parentW
合并节点的 parentW 继承自第一个子节点(如 strong 的窄宽度),
导致文本框太窄。改为用合并后的 rect.w。
2026-07-24 17:25:12 +08:00
李进 f4adac77c5 feat: TEXT 节点合并 — 同 y 坐标的内联文本合并为富文本
- 同 y(误差<5px)且 x 相邻或重叠的 TEXT 节点合并
- 合并后保留 bold/italic/color 等格式差异
- 用 pptxgenjs 原生富文本支持渲染
- 16个合并对象,不影响其他独立文本框
2026-07-24 17:16:07 +08:00
李进 58ee40f71a fix: slide name 正则精确匹配 — 排除 page-info/page-num
- /^(slide([- ]\w+)*|page)$/i
- slide / slide-1 / slide hero dark active 都匹配
- page-info / page-num 不匹配
- 三个 PPT 都正确识别
2026-07-24 16:47:52 +08:00
李进 aaa28f1bd8 refactor: TEXT 宽度通用化 — 去掉 depth===1 硬编码
- parentW 超过 contentW 的 80% 时视为顶层,用 contentW
- 否则用 parentW(表格单元格等嵌套容器)
- 不再依赖 _depth 字段判断层级
2026-07-24 16:44:54 +08:00
李进 dd916dcf9e feat: 补全 styles 映射 — opacity/lineHeight/letterSpacing/textDecoration/display/visibility
TEXT 新增:
- textDecorationLine → underline/strike
- letterSpacing → charSpacing
- opacity → transparency
- lineHeight → lineSpacingMultiple
- display:none / visibility:hidden → 跳过

Shape 新增:
- opacity → transparency
- display:none / visibility:hidden → 跳过

PPTX 渲染端同步传递所有新属性
2026-07-24 16:44:19 +08:00
李进 0e60f7525b refactor: 通用化背景色逻辑
- 去掉 dark/light 关键词硬编码
- 优先级:styles.backgroundColor → 文字颜色反推 → canvas.backgroundColor
- 文字颜色反推:亮度>128用深色背景,否则用浅色背景
- 两个 PPT 都正确识别背景色
2026-07-24 16:40:50 +08:00
李进 a2c7f23107 refactor: 通用化 slide 识别和游离节点收集
- findSlides(): 不靠命名,靠结构识别(面积/children/已知模式)
- collectOrphans(): 用 slide 子树 id 集合判断,不靠名字前缀
- 先递归子节点,子节点有 slide 则父节点是容器
- 7月汇报(6 slide) 和 A2A(7 slide) 都正确识别
2026-07-24 16:36:51 +08:00
李进 d079a4b4cc fix: 文本框宽度/阴影/边框/背景/去重 — 通用化前稳定版
- 文本框宽度:contentW 从 slide 子节点推算,排除游离节点
- TEXT 宽度:顶层用 contentW,嵌套用 parentW,最小1.5in,x+w≤slideW
- collectSlideChildren 新增 _depth 参数标记层级
- boxShadow 正确传给 pptxgenjs(之前 addShape 只传了 fill)
- 单边 border 不加 shape line,由四周边框线逻辑单独处理
- shape 默认 line: { type: 'none' } 去掉 pptxgenjs 默认边框
- 背景色:从 slide name 推断 dark/light 兜底
- findSlides 支持 'slide ' 前缀
- collectOrphans 跳过 'slide ' 子树(修复文字重复)
- 新增 docs/ 目录:映射分析和通用架构文档
2026-07-24 16:30:24 +08:00
李进 56daab6b67 fix: frame before text for proper z-order, remove 1.2x width multiplier 2026-07-24 14:05:14 +08:00
李进 8802b00bdc feat: complete web-to-pixso JSON mapping - border sides, image assets, orphan nodes, slide container borders 2026-07-24 13:22:28 +08:00
李进 7735bb75de feat: extract all 4 border sides, border-radius, box-shadow from web-to-pixso nodes 2026-07-24 12:33:33 +08:00
李进 46ecb17956 fix: traverse all nodes, use slide container size for canvas, extract slide bg color 2026-07-24 10:07:00 +08:00
oldliandClaude Sonnet 5 eec8c8c215 feat: add web-to-pixpo JSON to Schema JSON converter
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 20:03:24 +08:00