Version: 1.0 Platform: OutSystems Forge Underlying Library: PPTXGenJS
PowerPoint Orchestrator is an OutSystems Forge component that enables browser-side generation of rich PowerPoint (.pptx) files without any server-side processing. It wraps the PPTXGenJS library as a suite of OutSystems Client Actions, giving developers a structured, composable API to build presentations programmatically — including support for text, images, tables, bullet lists, master slides, and RTL layouts.
All generation happens entirely in the browser. The final output is triggered as a standard file download via the DownloadPresentation action.
DownloadPresentation
ToObject()
osUnwrap()
Presentation
CreatePresentation
pres._slides[index]
pres._theme
Place the Initiator block once on any screen that uses PowerPoint Orchestrator Client Actions. It is an invisible initializer that loads the PPTXGenJS library into the browser at render time.
The block uses an Always False condition so it never renders visible content — it exists purely to guarantee the script is available before any generation action runs.
Usage: Drag it onto the screen, typically near the top of the layout. One instance per screen is sufficient.
Actions follow a create → build → render → download lifecycle:
CreatePresentation └─ CreateSlide ├─ AddTextToSlide ├─ AddImageToSlide ├─ AddShapeToSlide ├─ AddTableToSlide └─ AddBulletsToSlide DownloadPresentation
The entry point of the PowerPoint Orchestrator engine. Initializes a new, isolated PPTXGenJS instance in memory, resolves layout dimensions, handles branding and background media fallback logic, and configures localization parameters such as RTL mode.
Returns a Presentation object reference that must be passed into every subsequent action.
PresentationConfig
PresentationConfig Attributes
LayoutId
"LAYOUT_16x9"
"LAYOUT_16x10"
"LAYOUT_4x3"
"LAYOUT_WIDE"
Width
Height
Title
Author
PrimaryColor
"4C3BAF"
#
FontFace
"Arial"
IsRTL
False
ar-SA
BgColor
0
Appends a new slide to the presentation. Accepts optional background overrides at the slide level, which take precedence over the defaults established in CreatePresentation.
SlideConfig
SlideConfig Attributes
BgImageUrl
BgImageBinary
MasterName
SlideIndex
Places a styled text block onto a slide at a specified position.
TextIn
TextIn Attributes
Text
X
Y
FontSize
Bold
Italic
Color
Align
"left"
"center"
"right"
"justify"
Places an image onto a slide at a specified position and size. Accepts binary data, data URLs, or plain URLs.
ImageConfig
ImageConfig Attributes
ImageBinary
ImageUrl
Draws a built-in PPTXGenJS shape (rectangle, ellipse, line, etc.) onto a slide with optional fill, border, and text overlay.
ShapeConfig
ShapeConfig Attributes
ShapeType
"rect"
"ellipse"
"line"
FillColor
LineColor
LineWidth
Registers a named master slide on the presentation. Slides can reference this master by name via SlideConfig.MasterName to inherit background, font, and layout defaults.
SlideConfig.MasterName
MasterConfig
MasterConfig Attributes
CreateSlide
Initializes an empty table object with defined column structure. Follow this with AddRowToTable calls in a loop, then AddTableToSlide to render.
AddRowToTable
AddTableToSlide
TableConfig
TableConfig Attributes
ColWidths
HasHeaderRow
HeaderFillColor
HeaderFontColor
AutoPage
AutoPageRepeatHeader
NewSlideStartY
TableObject
Appends a row of cells to a table object. Call in a loop for each data row.
CreateTable
RowData
Renders a completed table object onto a slide at a specified position.
Initializes an empty bullet list object with shared styling. Follow this with AddItemToBulletList calls, then AddBulletsToSlide.
AddItemToBulletList
AddBulletsToSlide
BulletConfig
BulletConfig Attributes
BulletStyleId
BulletListObject
Appends a single item to a bullet list. Each item advances the indent level automatically. Call in a loop.
CreateBulletList
AddTextToSlide
Renders a completed bullet list onto a slide at a specified position.
Triggers a browser file download of the finalized presentation as a .pptx file. Call this as the final step after all slides and content have been added.
.pptx
FileName
"presentation"
None. The browser initiates the file download directly.
Returns static reference data used by the component, including available layout identifiers, bullet style entities, and shape type identifiers. Useful for populating dropdowns in builder UIs.
None.
LayoutIds
BulletStyleIds
ShapeTypes
Below is a minimal flow for generating a single-slide presentation with a title text block and a table.
1. Place Initiator block on the screen (once). 2. CreatePresentation PresentationConfig.Title = "Q3 Report" PresentationConfig.PrimaryColor = "1A73E8" PresentationConfig.IsRTL = False → Presentation 3. CreateSlide Presentation = Presentation SlideConfig.BgColor = "FFFFFF" → Presentation, SlideIndex (= 0) 4. AddTextToSlide Presentation = Presentation SlideIndex = 0 TextIn.Text = "Quarterly Results" TextIn.X = 0.5, TextIn.Y = 0.3 TextIn.Width = 9, TextIn.Height = 1 TextIn.FontSize = 32, TextIn.Bold = True → Presentation 5. CreateTable TableConfig.ColWidths = [2.5, 2.5, 2.5, 2.5] TableConfig.HasHeaderRow = True TableConfig.HeaderFillColor = "1A73E8" TableConfig.HeaderFontColor = "FFFFFF" → Presentation, TableObject 6. AddRowToTable (loop for each row) TableObject = TableObject RowData = [cell1, cell2, cell3, cell4] → TableObject 7. AddTableToSlide Presentation = Presentation SlideIndex = 0 TableObject = TableObject X = 0.5, Y = 1.5 → Presentation 8. DownloadPresentation Presentation = Presentation FileName = "Q3_Report"
RTL (Right-To-Left) support is available at multiple levels:
PresentationConfig.IsRTL = True
TextIn.IsRTL = True
IsRTL = True
BulletConfig.IsRTL = True
When IsRTL is enabled at the presentation level, the Arabic (ar-SA) localization profile is registered automatically.
Table cell RTL — implementation note: PPTXGenJS does not accept rtlMode as a direct cell property. RTL is applied at the cell level by structuring the cell content as an array where the text string is the first element and the options object (containing rtlMode: true) is the second. This workaround is handled internally by AddRowToTable — consumers simply set IsRTL = True on the cell's TextIn entry as normal.
rtlMode
rtlMode: true