李进
|
c9924d0737
|
fix: boxShadow opacity 从 rgba alpha 提取,不再硬编码 0.5
|
2026-07-27 17:33:10 +08:00 |
|
李进
|
d4e492351b
|
fix: 无 slide 容器时 fallback 到 body
测试页没有 page/slide-* 命名的容器,findSlides 返回 0。
新增 fallback:自动用 body 元素作为 slide 容器。
|
2026-07-27 17:25:37 +08:00 |
|
李进
|
ce89ee1b4d
|
feat: 四圆角独立处理 + transform rotate
- 圆角:取四角最大值(PPT只支持统一圆角)
- 旋转:CSS transform:rotate → pptxgenjs rotate
- 两个文件同步
|
2026-07-27 17:16:21 +08:00 |
|
李进
|
d3bb1fe952
|
fix: SVG currentColor 替换为实际计算颜色
|
2026-07-27 16:58:21 +08:00 |
|
李进
|
f0e82341b8
|
sync: convert-browser.js 同步 SVG 图标相关改动
- collectSlideChildren 保留 RECTANGLE+backgroundImages
- imageRects 包含 RECTANGLE+backgroundImages
- 图片处理:data URL 直接使用
|
2026-07-27 16:50:54 +08:00 |
|
李进
|
49944c9d03
|
fix: SVG 图标覆盖的文字自动移除
imageRects 现在包含 RECTANGLE+backgroundImages 的节点(SVG 图标),
覆盖检测正确识别图标与文字的重叠。
|
2026-07-27 16:47:38 +08:00 |
|
李进
|
b5f4217302
|
fix: SVG 图标正确渲染
- collectSlideChildren 保留有 backgroundImages 的 RECTANGLE 节点
- 图片处理:data URL 直接使用,不查找 assets
- Gitea 测试:24 个 SVG 图标成功渲染
|
2026-07-27 16:44:28 +08:00 |
|
李进
|
7bb5b81fbd
|
feat: SVG 图标序列化为图片(第三版)
- 不修改 backgroundUrls(const)
- 节点创建后直接修改 node.backgroundImages
- XMLSerializer + btoa 序列化 SVG
|
2026-07-27 16:36:02 +08:00 |
|
李进
|
5a3fa6bf20
|
fix: convert-browser.js 画布尺寸和 convert-w2p.js 同步
多slide用容器尺寸,单slide用canvas(限制140cm)
|
2026-07-27 16:29:43 +08:00 |
|
李进
|
3c346e43e5
|
fix: 恢复 JSON 保存供调试
|
2026-07-27 16:22:26 +08:00 |
|
李进
|
00b3150d1c
|
fix: 不用 saveAs,直接下载到默认文件夹
Chrome Bug 417112:saveAs 在'下载前询问'开启时不可靠。
这是 Chrome 扩展的已知限制,官方无解决方案。
|
2026-07-27 15:25:26 +08:00 |
|
李进
|
0ce890f45e
|
fix: background 用 saveAs 下载,兼容下载前询问设置
原版插件模式:采集和下载在 background 同一 async 函数中执行,
background 上下文一直活着,saveAs 弹框不会被 popup 关闭打断。
|
2026-07-27 15:23:32 +08:00 |
|
李进
|
06e63fbe3e
|
fix: 去掉 saveAs,显示下载位置
|
2026-07-27 15:20:12 +08:00 |
|
李进
|
df699f1134
|
fix: saveAs 优先,失败 fallback 直接下载
先尝试弹出保存对话框(saveAs: true),如果和 Chrome 设置冲突
则 fallback 到直接下载到默认文件夹。兼容所有 Chrome 设置。
|
2026-07-27 15:16:33 +08:00 |
|
李进
|
20458d16ab
|
fix: 清理调试日志,确认下载机制
根因:Chrome '下载前询问保存位置' 设置与 saveAs 冲突。
关闭该设置后下载正常。background 通过 storage.session 传 base64 并下载。
|
2026-07-27 15:13:56 +08:00 |
|
李进
|
e19b80de47
|
debug: background 下载日志
|
2026-07-27 15:12:32 +08:00 |
|
李进
|
984b03c3d6
|
fix: 用 chrome.storage.session 传 base64,background 下载
|
2026-07-27 15:07:51 +08:00 |
|
李进
|
7b8b560dc0
|
debug: 下载日志
|
2026-07-27 14:57:08 +08:00 |
|
李进
|
42a869aaaf
|
fix: popup 直接下载,不通过 background
|
2026-07-27 14:49:58 +08:00 |
|
李进
|
224983c790
|
fix: background 完整重写,添加下载日志
|
2026-07-27 14:47:53 +08:00 |
|
李进
|
aeb75c746c
|
refactor: popup 流程简化 — 采集→获取→转化→background下载
|
2026-07-27 14:45:09 +08:00 |
|
李进
|
3f7c9648d2
|
fix: 下载移到 background.js 执行,和原插件一致
|
2026-07-27 14:43:29 +08:00 |
|
李进
|
1df8a826c4
|
fix: 用 data URL 下载,和原插件方式一致
|
2026-07-27 14:41:31 +08:00 |
|
李进
|
87f191e27f
|
debug: 添加下载过程日志
|
2026-07-27 14:36:08 +08:00 |
|
李进
|
6e9bec5856
|
fix: 去掉 saveAs,保证下载可用
|
2026-07-27 14:34:29 +08:00 |
|
李进
|
558f4aba4c
|
fix: 加回 saveAs,依赖 Chrome 设置
|
2026-07-27 14:31:05 +08:00 |
|
李进
|
18b5f63fc7
|
fix: 去掉 saveAs 测试下载是否正常
|
2026-07-27 14:27:42 +08:00 |
|
李进
|
75e0268a35
|
fix: 加回 saveAs,不自动关闭 popup
|
2026-07-27 14:25:37 +08:00 |
|
李进
|
119f406a75
|
fix: 去掉 saveAs,直接下载;延迟 revoke URL
|
2026-07-27 14:23:08 +08:00 |
|
李进
|
dca8a40508
|
fix: 去掉自动下载 JSON,只下载 PPTX
|
2026-07-27 14:21:13 +08:00 |
|
李进
|
f20f256197
|
fix: 浏览器端用 pres.write() 替代 pres.writeFile()
writeFile 在浏览器中直接下载文件,不返回 buffer。
改用 write({ outputType: 'arraybuffer' }) 返回数据供后处理。
|
2026-07-27 14:17:43 +08:00 |
|
李进
|
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 |
|
李进
|
e1c8b3d94e
|
feat: v2.0 — 插件改造,集成 PPTX 导出
改造内容:
- 改名 Web to Pixso → Web to PPT
- 删除 pixso-plugin/、element-picker.js、popup-panel.js
- 新增 convert-browser.js(浏览器版转化逻辑)
- 新增 lib-pptxgen.js(pptxgenjs 浏览器 bundle)
- 重写 popup.js(触发捕获→转化→下载)
- 重写 background.js(缓存采集数据,支持 WEB_TO_PPT_GET_DATA)
- manifest.json 改名 + 添加 default_popup
流程:popup 点击导出 → background 抓取 DOM → popup 运行转化 → chrome.downloads 下载 PPTX
|
2026-07-27 13:54:11 +08:00 |
|
李进
|
330f4e96ce
|
feat: 加入 web-to-pixso 插件源码
Chrome 扩展,用于从网页提取 DOM 树为 JSON 格式。
核心文件:capture.js(76KB,提取逻辑)
v1.0
|
2026-07-27 12:22:27 +08:00 |
|
李进
|
a10969b562
|
feat: jszip 后处理注入 type=custom + 画布高度限制140cm
- 用 jszip 原地修改 PPTX 的 sldSz,加 type=custom(WPS 识别自定义尺寸)
- 画布最大高度限制 140cm(WPS 上限)
- zip 命令行打包会破坏 PPTX 结构,改用 jszip 保证完整性
|
2026-07-27 12:20:22 +08:00 |
|
李进
|
f3d60360ac
|
fix: 画布尺寸 — 多slide用容器rect,单slide用canvas
- PPT设计稿(多slide):用容器rect,每页独立尺寸
- 网页(单slide):用canvas尺寸,确保内容不溢出
|
2026-07-27 12:00:07 +08:00 |
|
李进
|
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 |
|