圖案與文字

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.