形状与文本

Slides 使用共享 Shape 引擎提供可编辑形状、连接线和形状文本。FSlide.insertShape() 返回由 Slides 命令管线驱动的形状 Facade。

插入形状

TypeScript
const slide = univerAPI.getActivePresentation()?.getActiveSlide()if (!slide) {  throw new Error('No active slide')}const shape = slide.insertShape({  shapeType: univerAPI.Enum.ShapeTypeEnum.RoundRect,  transform: { left: 80, top: 64, width: 320, height: 120 },  visible: true,  selectable: true,  shapeData: {    fill: {      fillType: univerAPI.Enum.ShapeFillEnum.SolidFill,      color: '#dbeafe',    },  },})

Shape 宿主适配器不可用或输入无法创建时,insertShape() 可能返回 null。插入形状前,请注册 Slides 配置所需的 Shape 依赖。

添加富文本

TypeScript
if (shape) {  const richText = univerAPI.newRichText()    .text('Quarterly ')    .bold('review')  shape.getText()    .setRichText(richText)    .setHorizontalAlign(univerAPI.Enum.HorizontalAlign.CENTER)    .setVerticalAlign(univerAPI.Enum.VerticalAlign.MIDDLE)}

使用 slide.getShape(id) 或 slide.getShapes() 获取形状。通用元素方法可更新位置、尺寸、可见性、名称和描述;slide.deleteElement(shape) 会删除形状。

编辑形状文字

使用下方或前面示例中 insertShape() 返回的形状对象。getText() 返回实时的 FShapeText 对象,可通过 getPlainText() 读取纯文本、setText() 替换全部文字,并设置字体、颜色和对齐方式。

TypeScript
if (!shape) throw new Error('Shape is not available')const shapeText = shape.getText()console.log(shapeText.getPlainText())shapeText  .setText('Quarterly review')  .setFontSize(18)  .setColor('#2563eb')  .setBold(true)  .setHorizontalAlign(univerAPI.Enum.HorizontalAlign.CENTER)  .setVerticalAlign(univerAPI.Enum.VerticalAlign.MIDDLE)

setText() 会替换已有文字;同一形状需要多种文字样式时,使用 setRichText()。编辑现有富文本时,先调用 getRichText()?.copy(),修改构建器后再传给 setRichText(),仅修改构建器不会自动写回。更多选项见文字样式和文本框内边距与布局。

TypeScript
const richText = univerAPI.newRichText()  .text('Quarterly ')  .bold('review')shapeText.setRichText(richText)

形状格式刷

选中源形状,启用格式刷,再选择目标形状。格式刷复制填充、描边、效果及受支持的文字格式,保留目标的标识、几何信息、文字内容和公式绑定。清除格式会恢复插入时的默认样式。SmartArt 不参与此操作;对应的形状 UI 插件会自动注册该行为。

合并形状

在同一幻灯片上选择 2–10 个受支持的对象,然后使用「合并形状」。支持 union(联合全部区域)、combine(排除重叠区域)、intersect(保留公共区域)、subtract(从主对象减去其他对象)和 fragment(拆分为多个区域)。结果使用主对象的格式。合并会替换选中对象,支持撤销、重做和协同。

以下命令使用当前选区;无法应用选区或操作时,merged 为 false。对象必须可编辑且处于同一分组层级。连接线、SmartArt、OLE 对象、图表和表格不能参与合并;部分效果、动画和复杂文本布局也会阻止合并。

文本框参与合并时会转换为轮廓,之后不能再作为文本编辑。合并需要读取实际渲染字体。UniverSlidesUIPlugin 可解析受支持的已加载 Web 字体;其他字体来源可通过配置项 mergeShapeFontResolver(font, unitId, text) 提供。返回匹配字体的 ArrayBuffer 或其 Promise,需对应正确的字重、样式和回退字体;无法提供精确匹配时返回 undefined。缺失字体时会拒绝合并并保留原对象。

TypeScript
import { MergeSlideShapesCommand } from '@univerjs-pro/slides-ui'const merged = await univerAPI.executeCommand(MergeSlideShapesCommand.id, {  operation: 'union',})

你觉得这篇文档如何?

© 2026 DreamNum Co., Ltd.