PowerPoint Presentations
Edit on GitHubOverview of the OfficeIMO.PowerPoint package for generating .pptx decks with slides, text, tables, charts, and notes.
PowerPoint Presentations
OfficeIMO.PowerPoint lets you build .pptx presentations from a higher-level object model instead of stitching raw Open XML parts together yourself. It is designed for generated decks, reporting pipelines, demo content, and repeatable presentation output that needs to stay readable in source control.
Good fit scenarios
- Create status decks, release reviews, and customer reports from application data.
- Generate training material or runbook slides as part of CI, build, or scheduled jobs.
- Reuse the same source data across Word, Excel, PowerPoint, and Reader pipelines.
- Produce presentations on servers, containers, or developer machines without PowerPoint installed.
Core building blocks
| Type | Purpose |
|---|---|
PowerPointPresentation | Root document for creating, loading, saving, and organizing slides |
PowerPointSlide | Individual slide surface for titles, text boxes, tables, charts, images, and notes |
PowerPointTextBox | Rich text container with bullets, formatted runs, margins, and auto-fit |
PowerPointTable | Strongly typed table surface with styles, column widths, row heights, and merged cells |
PowerPointChart | Chart host for series-driven visualizations inside a slide |
PowerPointNotes | Speaker notes attached to a slide |
PowerPointLayoutBox | Measurement helper for content regions, columns, and spacing |
PowerPointDesignBrief | Brand, purpose, palette, and design preferences used to generate alternatives |
PowerPointDeckPlan | Semantic sequence of designer slides that can be scored before rendering |
Designer decks
For decks that should look intentional without hand-positioning every object, use designer briefs and semantic deck plans. A brief can propose several visual directions from the same brand, while a deck plan lets the library score how well those directions fit the content before rendering editable slides.

PowerPointDesignBrief brief = PowerPointDesignBrief
.FromBrand("#008C95", "client-demo", "technical rollout proposal")
.WithIdentity("Client Theme", footerLeft: "CLIENT", footerRight: "Service deck")
.WithVariety(PowerPointDesignVariety.Exploratory);
PowerPointDeckPlan plan = new PowerPointDeckPlan()
.AddSection("Service proposal", "Generated from a semantic plan.")
.AddProcess("Implementation path", "The selected design handles layout.",
new[] {
new PowerPointProcessStep("Discover", "Collect constraints."),
new PowerPointProcessStep("Design", "Choose the target model."),
new PowerPointProcessStep("Roll out", "Deliver in waves.")
});
var best = brief.DescribeDeckPlanAlternatives(plan, 3)
.OrderByDescending(alternative => alternative.ContentFitScore)
.First();
using var presentation = PowerPointPresentation.Create("proposal.pptx");
presentation.SlideSize.SetPreset(PowerPointSlideSizePreset.Screen16x9);
presentation.UseDesigner(brief, best.Index).AddSlides(plan);
presentation.Save();
Designer Decks shows design recommendations, deck-plan scoring, raw composition primitives, and screenshots from runnable examples.
Quick start
using OfficeIMO.PowerPoint;
using var presentation = PowerPointPresentation.Create("status-update.pptx");
const double marginCm = 1.5;
var content = presentation.SlideSize.GetContentBoxCm(marginCm);
var slide = presentation.AddSlide();
var title = slide.AddTitleCm(
"Weekly Status",
content.LeftCm,
content.TopCm,
content.WidthCm,
1.4);
if (title.Paragraphs.Count > 0)
{
PowerPointTextStyle.Title.WithColor("1F4E79").Apply(title.Paragraphs[0]);
}
var agenda = slide.AddTextBoxCm(
string.Empty,
content.LeftCm,
content.TopCm + 2.0,
content.WidthCm,
content.HeightCm - 2.0);
agenda.AddBullets(new[]
{
"Deployment completed successfully",
"Customer onboarding toolkit updated",
"Performance metrics improved week over week"
});
presentation.Save();
Recommended workflow
- Create a presentation and get a content box from
SlideSizeso positioning stays consistent. - Add slides and establish structure with title, body, and supporting shapes or tables.
- Populate content from your domain data, not from hard-coded presentation markup.
- Add speaker notes, sections, theme tweaks, or layout helpers when the deck grows.
- Save the file and ship it as a build artifact, report attachment, or generated deliverable.
Layout and content model
- Use
SlideSize.GetContentBoxCm(...)to reserve consistent margins around the live slide area. - Use
GetColumnsCm(...)when you want balanced two- or three-column compositions. - Work in centimeters, points, or EMUs through the built-in unit helpers depending on the scenario.
- Add titles, text boxes, tables, charts, images, and notes to the same
PowerPointSlidesurface.
Related workflows
- Pair
OfficeIMO.PowerPointwithOfficeIMO.Excelwhen chart/table data already exists in workbook form. - Use
OfficeIMO.Readerwhen the same pipeline later needs extraction or chunking from generated decks. - Use PSWriteOffice when you want the same presentation automation from PowerShell rather than C#.
Further reading
- Slides -- Creating slides with text boxes, shapes, images, and charts.
- Designer Decks -- Build visually structured decks with design briefs, recommendations, semantic plans, and screenshots.
- PSWriteOffice PowerPoint Cmdlets -- Build decks from PowerShell with DSL aliases and cmdlets.
- OfficeIMO.PowerPoint product page -- Package-level overview, install command, and positioning.