PumlVisio 时序图转换器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_36a5ac61/puml-to-visio。
技能介绍
解决什么问题
导出时序图时常见的妥协是:PNG 无法编辑,SVG 在 Visio 里一改就散架,而给甲方交付的又必须是能在 Visio 里继续改的 .vsdx。这个技能解决的是 PlantUML 源码到原生 Visio Shape 的转换——生成的不是截图或嵌入图,每个参与者头部、生命线、箭头、注释框都是独立的 Shape 对象,可直接拖动、改色、删改。
工作原理
核心流程分四步:
- 解析 PUML 源码 — 提取参与者定义(
participant、actor、database等)、消息序列(->>、-->、-->>)、阶段分隔条(== 标题 ==)、条件与循环帧(alt/loop,支持任意深度嵌套)、注释框及富文本染色标记 - 布局计算 — 每个参与者分配精确的 X 坐标(
PX[name]),消息按垂直间距逐行排布;激活条用栈管理:实线箭头压栈、虚线箭头弹栈,天然支持嵌套调用 - 调用 Visio COM 绘制 — 通过
pywin32驱动本机 Visio 绘制头部、生命线、箭头、帧、注释等 Shape,并显式处理 Z-order:生命线SendToBack()、头部BringToFront() - 保存与防锁 — 保存前遍历
visio.Documents,先标记Saved = True抑制弹窗,关闭同名文档后删除旧文件再SaveAs
几个关键坑已在实现中处理:
- 箭头端点严格使用
PX[from]到PX[to]的坐标,避免箭头"悬空" - 所有
Cells()调用经_safe()包装,Char.Bold等缺失单元格不中断流程 - 富文本染色必须在所有全局
Char格式设置之后执行,并按 Visio 归一化后的字符索引建立映射,否则Characters.Begin/End会错位 - Visio 类型库的
Characters没有Char属性,需通过Characters.CharProps()新建字符 run,再写FormulaU自定义 RGB
适用边界
- 仅支持 Windows + 已安装 Visio,依赖
pywin32 - 只处理时序图,类图、活动图等其他 PUML 图类型不在范围内
entity/queue/control/boundary/collections均按普通蓝色方框渲染,不做特殊形状- 别名必须正确绑定:若消息中使用了未绑定的别名,会被误判为独立参与者
- 样式参数集中在
VisioSequenceRenderer构造函数(页面尺寸、间距、头部宽高),颜色在_draw_*方法中搜索RGB(修改
使用场景
- 后端工程师要在方案评审前把系统间调用的时序图转成甲方可直接编辑文字的 .vsdx,而非发截图
- 外包团队完成接口联调后,需向甲方提交含 alt 分支和循环帧的可编辑时序图,元素必须是 Visio Shape
- 技术方案或投标文档中嵌有带阶段分隔条、注释框的复杂时序图,需要转成 Visio 原生格式后微调文字颜色
- 团队已有 .puml 时序图需按甲方 Visio 模板交付,要求参与者头部、箭头、生命线都能单独拖动改色
适合人员
- 后端开发工程师:方案评审前要把 .puml 时序图转成甲方可编辑的 .vsdx,而不是发一张截图
- 技术文档或投标方案撰写者:文档中嵌有时序图,需要转成 Visio 格式后微调文字和颜色再定稿
- 外包交付团队:甲方明确要求 .vsdx 交付物,且所有元素必须是可拖动编辑的 Visio Shape 对象
- 架构师或技术负责人:团队维护的时序图要导出成可交付、后续能在 Visio 中继续维护的格式