title: 设计工具与工具箱业务逻辑 date: 2026-08-27 tags:
- AiPPT
- 设计工具
- 工具箱
- 收藏 status: active
设计工具与工具箱业务逻辑
快速认识
设计工具有两类入口:
- Ribbon上的独立按钮;
- 工具箱中的功能卡片。
页面、协议和宿主实现分开维护。一个功能出现在工具箱里,不代表所有平台都能执行。
WPS能力状态摘要:
- 已实现:对齐、分布、文本对齐、图层顺序、翻转旋转、成组、AutoSize和布尔运算等基础排版经工具箱可用,部分没有顶层Ribbon按钮;
- 有页面、没有Handler:智能透视、渐变蒙版、形状圆角、PPT压缩和PPT清理,调用返回未实现错误;
- 明确不支持:
convertToFreeForm、combineShapes、splitShapes、convertTextToVector等命令。
Windows和macOS的设计页面共用同一套TypeScript协议,由各自Native层执行。
PPT清理当前放在测试环境AiPPT(feature) → 扩展,使用独立按钮btn_assist_7。Windows和macOS已实现,WPS入口未开放。
1. 工具箱页面
入口:
pages/offline/bag-zone主要组件:
FunctionPanel
MainLayout
DraggableNavItem
ContentPanel
CardWrapper
Card
AddPlan
EditCardWindows使用CTP或窗口,macOS使用NSPanel,私有化WPS使用TaskPane。
2. 独立设计页面
| 功能 | 页面 | 协议模块 |
|---|---|---|
| 统一字体 | uniform-font | UniformFont |
| 统一颜色 | uniform-color | UniformColor |
| 一键Logo | shape-logo | ShapeLogo |
| 环形布局 | circular-layout | CircularLayout |
| 阵列布局 | matrix-layout | MatrixLayout |
| 智能缩放 | intelligent-scale | ShapeScale |
| 圆角 | shape-corners-rounded | ShapeCornersRounded |
| 渐变 | shape-gradient | ShapeGradientMask |
| 智能透视 | intelligent-perspective | Shape3DTransform |
| 重设主题色 | reset-theme-color | Application/主题色接口 |
| PPT清理 | ppt-cleanup | PptCleanup |
页面存在只表示UI和前端调用存在。平台支持还要检查Handler。
PPT清理
页面:
pages/offline/ppt-cleanup协议:
PptCleanup.Scan
PptCleanup.Remove范围:
currentSlide
allSlides只处理普通文本框。文本仅含空格、Tab、CR或LF时判定为空;占位符、自选图形、组合、表格、SmartArt、图片和线条全部保留。
流程:
选择当前页或全部页
→ Scan返回受影响页数和文本框数
→ 用户二次确认
→ Remove重新扫描并删除
→ 返回实际删除页数和文本框数平台状态:
| 平台 | 状态 | 实现 |
|---|---|---|
| Windows PowerPoint | 已实现 | C# WebviewJsCallback/PptCleanup,Office Interop |
| macOS PowerPoint | 已实现 | Swift Native/PptCleanup,PowerPoint AppleScript |
| 私有化WPS | 未实现 | 无dispatcher Handler,测试Ribbon不勾选Wps |
3. WPS已实现但没有顶层Ribbon按钮
| 能力 | 当前入口 |
|---|---|
| Shape对齐和分布 | 工具箱 |
| 文本对齐 | 工具箱 |
| 图层顺序 | 工具箱 |
| 翻转和旋转 | 工具箱 |
| 成组和取消成组 | 工具箱 |
| AutoSize | 工具箱 |
| 布尔运算 | 工具箱,依赖WPS API |
| 图形连接线 | Handler存在,顶层Ribbon未展示 |
| 显示/隐藏Shape | Handler存在,当前白名单未展示 |
Ribbon不是能力全集。功能盘点要同时检查Ribbon、工具箱、页面和Handler。
4. WPS有页面但没有实现
下面的页面和TypeScript调用存在,但WPS dispatcher没有对应Handler:
智能透视
渐变蒙版
形状圆角
PPT压缩
PPT清理调用会返回未实现错误,不能标记为WPS已支持。
5. WPS明确不支持
designTools.convertToFreeForm
designTools.combineShapes
designTools.splitShapes
designTools.convertTextToVector
designTools.releaseCompoundPath
designTools.position
designTools.dockShape
DesignTools.MoveShapeToLayout边缘裁切是条件支持:
ShapeRange.MergeShapes
→ 失败后ExecuteMso ShapesIntersect
→ 两条路径都失败则返回不支持6. 三端调用
Windows
Web页面
→ impl/cpp.ts
→ WebView2消息
→ C# WebviewJsCallback
→ Office InteropmacOS
Web页面
→ impl/cpp.ts
→ Swift Bridge
→ Swift/VBA/AppleScriptWPS
Web页面
→ impl/wps.ts或wps-dispatcher.ts
→ window.Application7. WPS工具箱白名单
代码:
bag-zone/components/Layout/DefaultData.ts允许的方法:
designTools.align
designTools.distribute
designTools.textAlign
designTools.mergeShapes
designTools.zOrder
designTools.shapeAutoSize
ShapeConnector.AddShapeConnector
designTools.group
designTools.ungroup
application.commandBars.ExecuteMso
designTools.rotate
designTools.flip排除的WPS命令:
FontDialog
ParagraphDialog
ObjectFormatDialog
SelectionPane原因是目标WPS版本不能稳定执行这些ExecuteMso命令。
8. 工具箱窗口模式
| 平台 | 容器 | 是否原生停靠 |
|---|---|---|
| Windows | Custom Task Pane或WPF窗口 | CTP是 |
| macOS | NSPanel | 否 |
| 私有化WPS | CreateTaskPane | 是 |
macOS工具箱支持在线方案和收藏。私有化WPS固定为本地卡片,不应把两者写成同一种功能。
9. 基础排版工具
协议:
designTools.align
designTools.distribute
designTools.textAlign
designTools.zOrder
designTools.flip
designTools.rotate
designTools.group
designTools.ungroup
designTools.shapeAutoSize
designTools.mergeShapes
designTools.showOrHideShapes
DesignTools.DuplicateShape功能:
- 相对选中Shape或Slide对齐;
- 水平和垂直分布;
- 文本左中右、两端和分散对齐;
- 上移、下移、置顶和置底;
- 水平和垂直翻转;
- 旋转;
- 成组和取消成组;
- 文本自动换行和固定宽高;
- Shape布尔运算;
- 显示和隐藏;
- 原位复制。
10. 收藏数据模型
SolutionVo
└── CardVo
└── RibbonInfoVo| 类型 | 含义 |
|---|---|
SolutionVo | 一套工具箱方案 |
CardVo | 一个可布局的功能卡片 |
RibbonInfoVo | 卡片中的具体功能 |
FunctionVo | 可加入卡片的候选功能 |
功能项包含:
ribbonId
label
image/svgCode
action.method
action.params
sort点击功能项时,工具箱直接发送action.method和action.params,与Ribbon使用同一协议。
11. 收藏接口
config/solution/list
config/solution/add
config/solution/update
config/solution/sort
config/solution/icons
config/card/list
config/card/drag
config/solution/updateBatch
config/pocket/function/list
config/solution/quota公网Windows/macOS工具箱把方案和卡片保存在服务端。
私有化WPS当前使用固定本地工具箱:
loadLocalToolbox
→ defaultCardDataWPS不加载用户自定义方案,也不请求在线口袋功能列表。
12. 新增工具的检查项
- 页面或卡片入口;
action.method和参数;- Windows Handler;
- macOS Handler;
- WPS Handler;
- WPS白名单;
- Ribbon配置;
- 选区类型和空选区处理;
- 撤销或状态恢复;
- 目标Office/WPS版本验证。
13. 代码位置
pages/offline/bag-zone/
pages/offline/uniform-font/
pages/offline/uniform-color/
pages/offline/circular-layout/
pages/offline/matrix-layout/
pages/offline/intelligent-scale/
common/client-communication/
common/http/BagZone.ts相关文档: