PPTX APIs are called through the app returned by widget.render():
const { widget } = await OfficeSdk.openfile({ docId: "demo-pptx", fileName: "demo.pptx", file });
const app = await widget.mount("#office-container").render();
Components#
| Component | Description |
|---|---|
Document |
Page number, zoom, layout, export, and read-only state |
Paragraph |
Text font, color, size, bold, italic, underline, strikethrough, and horizontal paragraph alignment |
TextBox |
Text box vertical alignment |
Player |
Slide playback and full-screen playback |
Selection |
Selection type, text style queries, and selection change events |
Viewer |
Current active target in the thumbnail area |
UndoRedo |
Undo, redo, and availability state |
Quick Example#
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);
Event example:
function onSelectionChange(info) {
console.log(info.selectType);
}
app.Selection.addEventListener("SELECTION_CHANGE", onSelectionChange);
Document#
| Method | Signature | Returns | Description |
|---|---|---|---|
getSlideInfo |
(): { total: number; current: number } |
{ total; current } |
Gets total slide count and current slide. Page numbers start from 1. |
getCurrentSlideIndex |
(): number |
number |
Gets current page number. Page numbers start from 1. |
getSlideCount |
(): number |
number |
Gets total slide count. |
getZoom |
(): number |
number |
Gets zoom percentage. |
setZoom |
(value: number): void |
void |
Sets zoom percentage. Common values include 80, 100, and 120. |
autoZoom |
(): void |
void |
Adjusts the zoom automatically. |
focusEditor |
(): void |
void |
Currently a no-op in the PPTX implementation. |
updateVisibleArea |
(): void |
void |
Recalculates the visible area. |
goToSlide |
(slideNum: number): void |
void |
Goes to a slide. slideNum starts from 1. |
deleteSlides |
(slides?: number[]): void |
void |
Deletes specified slide indexes. If omitted, deletes the currently selected slide. slides uses zero-based indexes. |
addSlide |
(layout?: SlideLayoutRef, position?: number): void |
void |
Inserts a new slide. layout uses layout indexes, and position is the zero-based insert position. If layout is omitted, the layout near the current selection is reused. |
getSlideLayouts |
(force?: boolean): SlideLayoutItem[][] |
SlideLayoutItem[][] |
Gets layouts grouped by slide master. When force = true, refreshes the cache. |
exportDocument |
(): Promise<void> |
Promise<void> |
Exports the original PPTX file. |
exportPdf |
(printOptions?: unknown): Promise<void> |
Promise<void> |
Exports PDF with print options. |
copy |
(): Promise<void> |
Promise<void> |
Copies the current selection. |
cut |
(): Promise<void> |
Promise<void> |
Cuts the current selection. |
paste |
(): Promise<void> |
Promise<void> |
Pastes into the current selection. |
getColorPalette |
(): { theme: unknown[]; standard: unknown[] } |
{ theme; standard } |
Gets theme colors and standard colors. |
startReadOnly |
(): void |
void |
Enters read-only state. |
endReadOnly |
(): void |
void |
Exits read-only state. |
isReadOnly |
(): boolean |
boolean |
Whether the current state is read-only. |
isDisable |
(): boolean |
boolean |
Whether the current editor is disabled. |
type SlideLayoutRef = {
masterIndex: number;
layoutIndex: number;
};
type SlideLayoutItem = {
img: unknown;
name: string;
xmlName: string;
id: string | number;
layoutIndex: number;
slideMasterIndex: number;
};
goToSlide(slideNum) uses display page numbers starting from 1; deleteSlides(slides) and addSlide(layout, position) use zero-based underlying indexes.
Document example:
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 component events:
| Event Name | Payload | Description |
|---|---|---|
DOCUMENT_READY |
Raw event parameters | Document ready. |
DOCUMENT_EXPORT_READY |
Raw event parameters | Export completed. |
DOCUMENT_EDITING_ENABLED |
None | The document entered editable state. |
DOCUMENT_EDITING_DISABLED |
None | The document exited editable state. |
PPTX_SLIDES_CHANGED |
(currentPage: number, totalPages: number) |
Current page or page count changed. |
PPTX_ZOOM_CHANGE |
(zoom: number) |
Zoom changed. |
PPTX_FIRST_PAGE_LOADED |
None | First page loaded. |
PPTX_START_LOADING |
None | Loading started. |
exportPdf(...) requires a secure context (normally HTTPS or localhost), window.queryLocalFonts, and permission to access local fonts. If these requirements are not met, the current implementation does not perform the PDF export.
Paragraph#
| Method | Signature | Returns | Description |
|---|---|---|---|
setFontName |
(value: string): void |
void |
Sets font family. |
setFontColor |
(value: string \| { hex: string; [key: string]: unknown }): void |
void |
Sets font color. Prefer an object containing hex; the current string parser has a known limitation when any color channel is 0. |
setFontSize |
(value: number \| string): void |
void |
Sets font size. |
setBold |
(value: boolean): void |
void |
Sets bold. |
setItalic |
(value: boolean): void |
void |
Sets italic. |
setUnderline |
(value: boolean): void |
void |
Sets underline. |
setStrikeThrough |
(value: boolean): void |
void |
Sets strikethrough. |
setAlignment |
(value: 0 \| 1 \| 2 \| 3 \| 4): void |
void |
Sets horizontal paragraph alignment. |
decreaseFontSize |
(): void |
void |
Decreases font size. |
increaseFontSize |
(): void |
void |
Increases font size. |
setAlignment(value) enum:
| Value | Description |
|---|---|
0 |
Right |
1 |
Left |
2 |
Center |
3 |
Justified |
4 |
Distributed |
Paragraph example:
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#
| Method | Signature | Returns | Description |
|---|---|---|---|
setVerticalAlignment |
(value: 0 \| 1 \| 2 \| 3 \| 4): void |
void |
Sets text box vertical alignment. |
setVerticalAlignment(value) enum:
| Value | Description |
|---|---|
0 |
Top |
1 |
Center |
2 |
Bottom |
3 |
Justified distribution |
4 |
Distributed |
Example:
app.TextBox.setVerticalAlignment(1);
Player#
| Method | Signature | Returns | Description |
|---|---|---|---|
playFirst |
(): void |
void |
Plays from the first slide. |
playLast |
(): void |
void |
Plays the last slide. |
play |
(fromType: 1 \| 2): void |
void |
Starts slide playback. |
playPrevious |
(): void |
void |
Plays the previous slide. |
playNext |
(): void |
void |
Plays the next slide. |
enterFullScreen |
(fromType: 1 \| 2): void |
void |
Enters full-screen playback. |
exitFullScreen |
(): void |
void |
Exits full screen. |
fromType:
| Value | Description |
|---|---|
1 |
From beginning |
2 |
From current slide |
Example:
app.Player.play(2);
app.Player.enterFullScreen(1);
app.Player.exitFullScreen();
Selection#
| Method | Signature | Returns | Description |
|---|---|---|---|
isTextSelected |
(): boolean |
boolean |
Whether text is currently selected. |
isTableSelected |
(): boolean |
boolean |
Whether a table is currently selected. |
isShapeSelected |
(): boolean |
boolean |
Whether a shape is currently selected. |
isSmartArtSelected |
(): boolean |
boolean |
Whether SmartArt is currently selected. |
isChartSelected |
(): boolean |
boolean |
Whether a chart is currently selected. |
isUnderline |
(): boolean |
boolean |
Whether the current text has single underline. |
isStrikeThrough |
(): boolean |
boolean |
Whether the current text has single strikethrough. |
getFontSize |
(): string |
string |
Gets current font size. For mixed font sizes, returns the minimum font size plus +. |
getFontName |
(): string \| null |
string \| null |
Gets current font family. For mixed fonts, returns an empty string. |
isBold |
(): boolean \| 0 \| null |
boolean \| 0 \| null |
Gets bold state. Returns 0 for mixed states. |
isItalic |
(): boolean \| 0 \| null |
boolean \| 0 \| null |
Gets italic state. Returns 0 for mixed states. |
getFontColor |
(): string |
string |
Gets font color as an rgba(...) string. The alpha value comes from underlying data and must not be assumed to be CSS-normalized to 0 through 1. |
getAlignment |
(): "default" \| "right" \| "left" \| "center" \| "justify" \| "distribute" \| "nil" |
string |
Gets horizontal paragraph alignment. |
getVerticalAlignment |
(): "top" \| "center" \| "bottom" \| "default" \| "NIL" \| undefined |
string \| undefined |
Gets text box vertical alignment. |
Selection example:
if (app.Selection.isTextSelected()) {
console.log(app.Selection.getFontName());
console.log(app.Selection.getFontColor());
}
getAlignment() return values:
| Value | Description |
|---|---|
"default" |
Default alignment. |
"right" |
Right. |
"left" |
Left. |
"center" |
Center. |
"justify" |
Justified. |
"distribute" |
Distributed. |
"nil" |
Multiple selected contents do not share one horizontal alignment value. |
getVerticalAlignment() return values:
| Value | Description |
|---|---|
"top" |
Top. |
"center" |
Center. |
"bottom" |
Bottom. |
"default" |
Default vertical alignment. |
"NIL" |
Multiple selected contents do not share one vertical alignment value. |
undefined |
No recognizable vertical alignment value currently. |
Selection component events:
| Event Name | Payload |
|---|---|
SELECTION_CHANGE |
PptxSelectionChange |
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 is a bit flag and can be combined with bitwise OR:
| Value | Description |
|---|---|
0 |
No stable selection |
1 |
Table |
2 |
Shape |
4 |
Text |
6 |
Shape + text |
8 |
SmartArt |
16 |
Chart |
32 |
Image |
Common combined values:
| Value | Description |
|---|---|
6 |
Shape + text |
Viewer#
| Method | Signature | Returns | Description |
|---|---|---|---|
getActiveZoom |
(): null \| "" \| "Thumbnail" \| "ThumbnailGapLine" |
string \| null |
Gets the current active target in the thumbnail area. Returns null before the first active-target event. |
Return values:
| Value | Description |
|---|---|
null |
No active-target event has been received yet. |
"" |
No stable target currently. |
"Thumbnail" |
Thumbnail. |
"ThumbnailGapLine" |
Gap line between thumbnails. |
UndoRedo#
| Method | Signature | Returns | Description |
|---|---|---|---|
undo |
(): void |
void |
Undo. |
redo |
(): void |
void |
Redo. |
canUndo |
(): boolean |
boolean |
Whether undo is available. |
canRedo |
(): boolean |
boolean |
Whether redo is available. |
UndoRedo component events:
| Event Name | Payload |
|---|---|
UNDO_REDO_STATE_CHANGE |
Raw event parameters |
Example:
if (app.UndoRedo.canUndo()) {
app.UndoRedo.undo();
}