Files
html2pptx/docs/web-to-ppt-mapping.md
T
李进 f7307a0891 refactor: web-to-pixso → web-to-ppt 全面改名
- 目录 web-to-pixso/ → web-to-ppt/
- 所有代码引用:PIXSO → WEB_TO_PPT, webToPixso → webToPPT
- 数据格式:pixso-design-capture → web-to-ppt-capture
- CSS 选择器:__web_to_pixso_ → __web_to_ppt_
- README 重写,移除 Pixso 相关描述
- docs/web-to-pixso-mapping.md → docs/web-to-ppt-mapping.md
2026-07-27 14:12:44 +08:00

5.6 KiB
Raw Blame History

web-to-ppt → PPT 映射分析

1. JSON 结构总览

顶层字段

字段 说明
canvas 画布尺寸 {width, height, x, y, backgroundColor}
nodes 根节点树(type=FRAME, name=html
assets 图片资源 {key: base64}
fonts 字体列表
schemaVersion JSON 版本号

节点类型

类型 数量 说明
FRAME 471 HTML 容器(div, section, table, header 等)
TEXT 393 文字节点
RECTANGLE 10 截图底图(comparison layer,用于视觉对比)

节点属性

type          - FRAME/TEXT/RECTANGLE
rect          - {x, y, width, height} 像素坐标
styles        - 57个CSS属性(见下表)
name          - HTML元素名或文字内容
tag           - HTML标签名(HTML/DIV/TABLE/TR/TD/SPAN/#text等)
text / src    - 文字内容(TEXT节点用text,收集时映射为src
layerGroup    - editable/text/comparison
backgroundImages - 图片资源引用数组
clipRect      - 裁剪区域
visibleRect   - 可见区域
clipped       - 是否被裁剪
id            - 节点ID
section       - document
visualRole    - layout-wrapper/text-node/raster-fallback

2. 57个 styles 字段分类

已处理(15个)

字段 用途 当前处理方式
backgroundColor 背景色 → shape fill
backgroundImage 渐变背景 → 提取起始色做纯色 fill
borderTopWidth/Color/Style 顶部边框 → shape line(四边都有时)或单独线条
borderBottomWidth/Color/Style 底部边框 同上
borderLeftWidth/Color/Style 左边框 同上
borderRightWidth/Color/Style 右边框 同上
borderTopLeftRadius 圆角 → rectRadius
boxShadow 阴影 → shadow
fontSize 字号 → fontSizept
fontFamily 字体 → fontFace
color 文字颜色 → color
fontWeight 粗体 → bold
fontStyle 斜体 → italic
textAlign 对齐 → align

未处理(42个)

字段 重要性 说明
opacity 元素透明度,PPT支持 opacity
lineHeight 行高,影响文字换行和间距
letterSpacing 字间距,PPT支持 charSpacing
textDecorationLine 下划线/删除线
textTransform 大小写转换
whiteSpace 控制换行行为(nowrap等)
wordBreak 断词规则
visibility visible/hidden
display none时不渲染
transform 旋转/缩放/位移
transformOrigin 变换原点
zIndex 层级顺序
overflow 溢出处理
clipPath 裁剪路径
filter CSS滤镜
borderTopRightRadius 右上圆角(目前只用左上)
borderBottomLeftRadius 左下圆角
borderBottomRightRadius 右下圆角
backgroundPosition 背景定位
backgroundSize 背景尺寸
backgroundRepeat 背景重复
backgroundClip 背景裁剪
backgroundOrigin 背景原点
position 定位方式
objectFit 图片适配
objectPosition 图片定位
maskImage/MaskPosition/MaskSize 遮罩
webkitMaskImage/MaskPosition/MaskSize 遮罩(webkit
backdropFilter 背景滤镜

3. 映射优先级

P0(必须处理)

  1. opacity → shape/text 的 opacity 属性
  2. whiteSpace → 控制文字是否换行
  3. zIndex → 调整 objects 数组顺序(后渲染在上层)
  4. lineHeight → 文字行高(paraSpaceBefore/after 或 lineSpacingMultiple

P1(应该处理)

  1. letterSpacing → charSpacing(字符间距)
  2. textDecorationLine → underline/strike
  3. display:none → 跳过该节点
  4. visibility:hidden → 跳过该节点
  5. 四个圆角独立处理 → 当前只用了 borderTopLeftRadius

P2(可以处理)

  1. transform → rotate 属性
  2. wordBreak → 辅助判断换行
  3. overflow → 辅助判断裁剪
  4. filter → 特殊效果(大部分PPT不支持)

4. 当前代码架构

HTML → web-to-ppt 插件 → JSON
                              ↓
                        convert-w2p.js(提取+映射)
                              ↓
                        Schema JSON
                              ↓
                        pptxgenjs(渲染)
                              ↓
                        .pptx 文件

convert-w2p.js 处理流程

  1. findSlides() — 找 page/slide-N 容器
  2. collectSlideChildren() — 递归提取子节点(保留层级)
  3. collectOrphans() — 收集游离节点归入最近 slide
  4. 排序:FRAME 在前,TEXT 在后
  5. 映射循环:遍历每个子节点
    • TEXT → text 对象(含字号/字体/颜色/粗体/对齐)
    • IMAGE → image 对象
    • FRAME with bg → shape 对象(含 fill/border/shadow/rectRadius
    • 四边 border → 独立线条 shape
  6. 输出 Schema JSON + 调用 pptxgenjs 生成 PPTX

5. 下一步行动

短期(本次迭代)

  • 实现 P0opacity、whiteSpace、zIndex、lineHeight
  • 实现 P1letterSpacing、textDecoration、display/visibility 过滤

中期

  • 建立 web-to-ppt JSON 的完整字段文档
  • 验证不同 HTML 结构的 JSON 输出一致性
  • 处理 transform(旋转)

长期

  • 参考设计稿,实现高度还原的 PPT 输出
  • 处理复杂布局(grid/flex 嵌套)