Skip to content

PPTX API

PPTX API 通过 widget.render() 返回的 app 调用:

ts
const { widget } = await OfficeSdk.openfile({ docId: "demo-pptx", fileName: "demo.pptx", file });
const app = await widget.mount("#office-container").render();

组件

Component说明
Document页码、缩放、布局、导出、只读状态
Paragraph文本字体、颜色、字号、加粗、斜体、下划线、删除线、段落水平对齐
TextBox文本框垂直对齐
Player幻灯片播放、全屏播放
Selection选区类型、文本样式查询、选区变化事件
Viewer获取缩略图区域当前活动目标。
UndoRedo撤销、重做和可用状态

快速示例

ts
app.Document.setZoom(120);
app.Document.goToSlide(2);

app.Paragraph.setFontName("Arial");
app.Paragraph.setBold(true);
app.Paragraph.setAlignment(2);

app.TextBox.setVerticalAlignment(1);
app.Player.play(1);

事件示例:

ts
function onSelectionChange(info) {
  console.log(info.selectType);
}

app.Selection.addEventListener("SELECTION_CHANGE", onSelectionChange);

Document

方法签名返回说明
getSlideInfo(): { total: number; current: number }{ total; current }获取总页数与当前页,页码从 1 开始。
getCurrentSlideIndex(): numbernumber获取当前页码,页码从 1 开始。
getSlideCount(): numbernumber获取总页数。
getZoom(): numbernumber获取缩放比例。
setZoom(value: number): voidvoid设置缩放比例,常用值如 80100120
autoZoom(): voidvoid自动缩放。
focusEditor(): voidvoid当前 PPTX 实现为空操作。
updateVisibleArea(): voidvoid重新计算可视区域。
goToSlide(slideNum: number): voidvoid跳转到幻灯片,slideNum1 开始。
deleteSlides(slides?: number[]): voidvoid删除指定幻灯片索引;不传时删除当前选中的幻灯片。slides 使用从 0 开始的索引。
addSlide(layout?: SlideLayoutRef, position?: number): voidvoid插入新幻灯片;layout 使用布局索引,position 是从 0 开始的插入位置。不传 layout 时沿用当前选区附近的布局。
getSlideLayouts(force?: boolean): SlideLayoutItem[][]SlideLayoutItem[][]按母版分组获取布局列表;force = true 时刷新缓存。
exportDocument(): Promise<void>Promise<void>导出 PPTX 原文件。
exportPdf(printOptions?: unknown): Promise<void>Promise<void>按打印配置导出 PDF。
copy(): Promise<void>Promise<void>复制当前选区。
cut(): Promise<void>Promise<void>剪切当前选区。
paste(): Promise<void>Promise<void>粘贴到当前选区。
getColorPalette(): { theme: unknown[]; standard: unknown[] }{ theme; standard }获取主题色和标准色。
startReadOnly(): voidvoid进入只读状态。
endReadOnly(): voidvoid退出只读状态。
isReadOnly(): booleanboolean当前是否只读。
isDisable(): booleanboolean当前编辑器是否处于禁用状态。
ts
type SlideLayoutRef = {
  masterIndex: number;
  layoutIndex: number;
};

type SlideLayoutItem = {
  img: unknown;
  name: string;
  xmlName: string;
  id: string | number;
  layoutIndex: number;
  slideMasterIndex: number;
};

goToSlide(slideNum) 使用从 1 开始的展示页码;deleteSlides(slides)addSlide(layout, position) 使用从 0 开始的底层索引。

Document 示例:

ts
const pages = app.Document.getSlideInfo();
console.log(pages.current, pages.total);

app.Document.goToSlide(1);
const layoutGroups = app.Document.getSlideLayouts();
const layout = layoutGroups[0][0];
app.Document.addSlide(
  {
    masterIndex: layout.slideMasterIndex,
    layoutIndex: layout.layoutIndex
  },
  1
);
app.Document.deleteSlides([0]);

await app.Document.exportDocument();
await app.Document.exportPdf();

Document 支持的组件事件:

事件名payload说明
DOCUMENT_READY事件参数透传文档 ready。
DOCUMENT_EXPORT_READY事件参数透传导出完成。
DOCUMENT_EDITING_ENABLED文档进入可编辑状态。
DOCUMENT_EDITING_DISABLED文档退出可编辑状态。
PPTX_SLIDES_CHANGED(currentPage: number, totalPages: number)当前页或页数变化。
PPTX_ZOOM_CHANGE(zoom: number)缩放变化。
PPTX_FIRST_PAGE_LOADED第一页加载完成。
PPTX_START_LOADING开始加载。

exportPdf(...) 需要安全上下文(例如 HTTPS 或 localhost)、window.queryLocalFonts 和本地字体访问权限。不满足条件时当前实现不会执行 PDF 导出。

Paragraph

方法签名返回说明
setFontName(value: string): voidvoid设置字体。
setFontColor(value: string | { hex: string; [key: string]: unknown }): voidvoid设置字体颜色。推荐传入包含 hex 的对象;字符串形式当前在任一颜色通道为 0 时存在解析限制。
setFontSize(value: number | string): voidvoid设置字号。
setBold(value: boolean): voidvoid设置粗体。
setItalic(value: boolean): voidvoid设置斜体。
setUnderline(value: boolean): voidvoid设置下划线。
setStrikeThrough(value: boolean): voidvoid设置删除线。
setAlignment(value: 0 | 1 | 2 | 3 | 4): voidvoid设置段落水平对齐。
decreaseFontSize(): voidvoid减小字号。
increaseFontSize(): voidvoid增大字号。

setAlignment(value) 枚举:

说明
0右对齐
1左对齐
2居中
3两端对齐
4分散对齐

Paragraph 示例:

ts
app.Paragraph.setFontName("Microsoft YaHei");
app.Paragraph.setFontColor({ hex: "#4472C4" });
app.Paragraph.setFontSize(18);
app.Paragraph.setBold(true);
app.Paragraph.setItalic(false);
app.Paragraph.setUnderline(true);
app.Paragraph.setStrikeThrough(false);
app.Paragraph.setAlignment(2);
app.Paragraph.increaseFontSize();

TextBox

方法签名返回说明
setVerticalAlignment(value: 0 | 1 | 2 | 3 | 4): voidvoid设置文本框垂直对齐。

setVerticalAlignment(value) 枚举:

说明
0顶部
1居中
2底部
3两端分布
4分散分布

示例:

ts
app.TextBox.setVerticalAlignment(1);

Player

方法签名返回说明
playFirst(): voidvoid播放第一页。
playLast(): voidvoid播放最后一页。
play(fromType: 1 | 2): voidvoid播放幻灯片。
playPrevious(): voidvoid播放上一页。
playNext(): voidvoid播放下一页。
enterFullScreen(fromType: 1 | 2): voidvoid进入全屏。
exitFullScreen(): voidvoid退出全屏。

fromType

说明
1从头开始
2从当前页开始

示例:

ts
app.Player.play(2);
app.Player.enterFullScreen(1);
app.Player.exitFullScreen();

Selection

方法签名返回说明
isTextSelected(): booleanboolean当前是否选中文本。
isTableSelected(): booleanboolean当前是否选中表格。
isShapeSelected(): booleanboolean当前是否选中图形。
isSmartArtSelected(): booleanboolean当前是否选中 SmartArt。
isChartSelected(): booleanboolean当前是否选中图表。
isUnderline(): booleanboolean当前文本是否为单下划线。
isStrikeThrough(): booleanboolean当前文本是否为单删除线。
getFontSize(): stringstring获取当前字号;混合字号时返回最小字号加 +
getFontName(): string | nullstring | null获取当前字体;混合字体时返回空字符串。
isBold(): boolean | 0 | nullboolean | 0 | null获取粗体状态;混合状态时返回 0
isItalic(): boolean | 0 | nullboolean | 0 | null获取斜体状态;混合状态时返回 0
getFontColor(): stringstring获取字体颜色,当前返回 rgba(...) 字符串;alpha 值来自底层数据,不能假定已归一化到 CSS 的 01
getAlignment(): "default" | "right" | "left" | "center" | "justify" | "distribute" | "nil"string获取段落水平对齐。
getVerticalAlignment(): "top" | "center" | "bottom" | "default" | "NIL" | undefinedstring | undefined获取文本框垂直对齐。

Selection 示例:

ts
if (app.Selection.isTextSelected()) {
  console.log(app.Selection.getFontName());
  console.log(app.Selection.getFontColor());
}

getAlignment() 返回值:

说明
"default"默认对齐。
"right"右对齐。
"left"左对齐。
"center"居中。
"justify"两端对齐。
"distribute"分散对齐。
"nil"多选内容没有统一水平对齐值。

getVerticalAlignment() 返回值:

说明
"top"顶部。
"center"居中。
"bottom"底部。
"default"默认垂直对齐。
"NIL"多选内容没有统一垂直对齐值。
undefined当前没有可识别的垂直对齐值。

Selection 支持的组件事件:

事件名payload
SELECTION_CHANGEPptxSelectionChange
ts
type PptxSelectionChange = {
  selectType: number;
  bold?: boolean | 0 | null;
  italic?: boolean | 0 | null;
  fontName?: string | null;
  fontSize?: string;
  fontColor?: string;
  underline?: boolean;
  strikeout?: boolean;
  alignHorizontal?: string;
  alignVertical?: string;
  canCopy: boolean;
};

selectType 是位标记,可通过按位或组合:

说明
0无稳定选区
1表格
2图形
4文本
6图形 + 文本
8SmartArt
16图表
32图片

常见组合值:

说明
6图形 + 文本

Viewer

方法签名返回说明
getActiveZoom(): null | "" | "Thumbnail" | "ThumbnailGapLine"string | null获取缩略图区域当前活动目标;首次收到活动目标事件前返回 null

返回值:

说明
null尚未收到活动目标事件。
""当前没有稳定目标。
"Thumbnail"缩略图。
"ThumbnailGapLine"缩略图间隔线。

UndoRedo

方法签名返回说明
undo(): voidvoid撤销。
redo(): voidvoid重做。
canUndo(): booleanboolean是否可撤销。
canRedo(): booleanboolean是否可重做。

UndoRedo 支持的组件事件:

事件名payload
UNDO_REDO_STATE_CHANGE事件参数透传

示例:

ts
if (app.UndoRedo.canUndo()) {
  app.UndoRedo.undo();
}