Install
$ agentstack add skill-devexpress-agent-skills-devexpress-office-file-api-presentation ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
DevExpress Presentation API
The Presentation API is a cross-platform .NET library for creating, loading, modifying, saving, and printing PowerPoint presentations in code — without requiring Microsoft Office. It supports PPTX, PPTM, POTX, and POTM formats and can export to PDF. You can use it in console, desktop, and web applications targeting .NET 6+.
When to Use This Skill
Use this skill when you need to:
- Create PowerPoint presentations (.pptx) programmatically without Microsoft Office
- Load and read existing .pptx/.pptm/.potx/.potm files
- Modify existing presentations (add/remove slides, update shapes and text)
- Manage slides: add, remove, reorder, clone, or copy slides between presentations
- Work with shapes: add geometric shapes, picture shapes, and configure fill and outline
- Add and format text inside shapes (paragraphs, runs, bullets, font settings)
- Create and customize tables on slides (rows, columns, cells, styles, borders)
- Set slide backgrounds (solid color, gradient, pattern, picture)
- Configure slide masters and layouts for consistent presentation design
- Export presentations to PDF with options (security, image quality, signatures)
- Merge or split presentations
- Add, read, or remove speaker notes
- Configure headers and footers on slides
- Search, replace, or remove text across a presentation
- Extract text and images from presentation slides
- Print presentations
- Configure themes, view settings, and document properties
Prerequisites & Installation
NuGet Packages
| Package | Purpose | |---------|---------| | DevExpress.Docs.Presentation | Core presentation processing (create, load, edit, save, export) |
.NET (6/7/8+)
dotnet add package DevExpress.Docs.Presentation
Important: All DevExpress packages in a project must share the same version number. A valid DevExpress license is required.
Before You Start — Ask the Developer
Before generating code, ask these questions to avoid rework:
General Questions
- Target framework: Are you using .NET 8+, .NET 6/7, or .NET Framework 4.x?
- New or existing project?: Are you creating a new project or adding to an existing one?
- Hosting model: Console app, ASP.NET Core, Blazor, MAUI, WinForms, WPF, or something else?
Presentation-Specific Questions
- Operation type: Create new presentation / read existing / modify slides / merge-split / export to PDF?
- Features needed: Slides / shapes / text / tables / backgrounds / themes / notes / headers-footers?
- Output: Do you need to extract content or produce a .pptx / PDF?
> Rule: If the developer's answer is ambiguous or missing, ask before generating code. Do not guess.
Component Overview
The Presentation API provides:
- Document management: Create, load, and save presentations (
Presentation,DocumentFormat) - Slide management: Add, remove, reorder, clone, and copy slides (
Slide,SlideCollection) - Masters and layouts: Define consistent slide designs (
SlideMaster,SlideLayout,SlideLayoutType) - Shapes and text: All shape types, text areas, paragraphs, runs, and formatting (
Shape,TextArea,TextParagraph,TextRun) - Tables: Create and customize slide tables (
Table,TableCell,TableRow,TableColumn) - Export and print: PDF export with options, printing (
ExportToPdf,PdfExportOptions,PrintOptions)
Core Entry Point
using DevExpress.Docs.Presentation;
// Create a new presentation (contains one default slide)
Presentation presentation = new Presentation();
// Load from file
using FileStream fs = File.OpenRead("input.pptx");
Presentation loaded = new Presentation(fs);
// Load from byte array
Presentation fromBytes = new Presentation(File.ReadAllBytes("input.pptx"));
// Save
using FileStream output = new FileStream("output.pptx", FileMode.Create);
presentation.SaveDocument(output);
// Export to PDF
presentation.ExportToPdf("output.pdf");
Documentation & Navigation Guide
Getting Started
Refer to [references/getting-started.md](references/getting-started.md)
When you need to:
- Set up the Presentation API for the first time
- Understand NuGet packages and assembly references
- Create your first .pptx presentation
- Load an existing presentation from a file or stream
- See a complete working example
Slides and Shapes
Refer to [references/slides-and-shapes.md](references/slides-and-shapes.md)
When you need to:
- Add, remove, reorder, clone, or copy slides
- Add geometric shapes, picture shapes, or group shapes to a slide
- Position and size shapes (X, Y, Width, Height in document units)
- Configure shape fill (solid, gradient, pattern, picture) and outline
- Add and format text inside shapes (paragraphs, runs, font, bullets)
- Create and customize tables (rows, columns, cells, styles, borders)
- Set slide backgrounds
- Configure slide masters and layouts
Charts (v26.1+)
Refer to [references/charts.md](references/charts.md)
When you need to:
- Add a standard chart (bar, line, pie, scatter, area, etc.) to a slide
- Add an Office 2016+ chart type (waterfall, funnel, treemap, sunburst, etc.)
- Configure chart data series with
ChartStringDataandChartNumericData - Choose between
Chart(standard types) andChartEx(Office 2016+ types) - Customize individual data points (
CustomDataPoints,DataPoint,Marker,MarkerStyle) - Configure the chart legend (position, appearance, custom entries)
Export
Refer to [references/export.md](references/export.md)
When you need to:
- Export a presentation to PDF
- Configure PDF export options (security, image optimization, signatures, attachments)
- Export slides to images (
DXImage[]) with configurable resolution (v26.1+) - Merge two or more presentations
- Split a presentation into separate files
- Print a presentation
Advanced Features
Refer to [references/advanced-features.md](references/advanced-features.md)
When you need to:
- Add, edit, or remove speaker notes
- Configure slide headers and footers (footer text, date, slide number)
- Search, replace, or remove text across the presentation or a specific slide
- Extract text or images from slides programmatically
- Customize presentation themes (color scheme, font scheme)
- Configure view settings (active view, grid spacing, normal view layout)
- Read or set document properties (title, author, keywords, custom properties)
Quick Start Example
Create a presentation with a title slide and one content slide:
using DevExpress.Docs.Office;
using DevExpress.Docs.Presentation;
using System.Drawing;
// Create a new presentation
Presentation presentation = new Presentation();
// Remove the default slide
presentation.Slides.Clear();
// Access the default slide master and its Title layout
SlideMaster master = presentation.SlideMasters[0];
master.Background = new CustomSlideBackground(new SolidFill(Color.FromArgb(230, 240, 255)));
// Add a title slide
Slide titleSlide = new Slide(master.Layouts.Get(SlideLayoutType.Title));
foreach (Shape shape in titleSlide.Shapes) {
if (shape.PlaceholderSettings.Type is PlaceholderType.CenteredTitle)
shape.TextArea = new TextArea("My Presentation");
if (shape.PlaceholderSettings.Type is PlaceholderType.Subtitle)
shape.TextArea = new TextArea("Created with DevExpress Presentation API");
}
presentation.Slides.Add(titleSlide);
// Add a content slide
Slide contentSlide = new Slide(master.Layouts.GetOrCreate(SlideLayoutType.Object));
foreach (Shape shape in contentSlide.Shapes) {
if (shape.PlaceholderSettings.Type is PlaceholderType.Title)
shape.TextArea = new TextArea("Key Points");
if (shape.PlaceholderSettings.Type is PlaceholderType.Body) {
TextArea body = new TextArea();
body.Paragraphs.Clear();
body.Paragraphs.Add(new TextParagraph("First bullet point"));
body.Paragraphs.Add(new TextParagraph("Second bullet point"));
body.Paragraphs.Add(new TextParagraph("Third bullet point"));
shape.TextArea = body;
}
}
presentation.Slides.Add(contentSlide);
// Add footer with slide numbers
presentation.HeaderFooterManager.AddSlideNumberPlaceholder(presentation.Slides);
// Save as .pptx
using FileStream outStream = new FileStream("output.pptx", FileMode.Create);
presentation.SaveDocument(outStream);
What This Does
Creates a two-slide presentation with a styled blue background. The first slide is a title slide; the second slide has a title and a bullet list. The result is saved as output.pptx.
Key Properties & API Surface
Presentation
| Property/Method | Type | Description | |----------------|------|-------------| | Slides | SlideCollection | Access all slides in the presentation | | SlideMasters | SlideMasterCollection | Access slide masters | | SlideSize | SlideSize | Get or set slide dimensions and orientation | | HeaderFooterManager | HeaderFooterManager | Manage headers and footers | | NotesMaster | NotesMaster | Access the notes master layout | | ViewProperties | ViewProperties | Configure view settings | | DocumentProperties | DocumentProperties | Access metadata (title, author, etc.) | | SaveDocument(Stream) | void | Save presentation to a stream | | ExportToPdf(string) | void | Export to PDF file path | | ExportToPdf(Stream, PdfExportOptions) | void | Export to PDF with options | | Print() | void | Print with default printer | | Print(PrintOptions) | void | Print with specified options | | FindText(string, TextSearchOptions) | IList | Search text across all slides | | ReplaceText(string, string, TextSearchOptions) | void | Replace text across all slides | | GetActualShapeBounds(Slide, Shape) | RectangleF | Get effective bounds of a shape |
Slide
| Property/Method | Type | Description | |----------------|------|-------------| | Shapes | ShapeCollection | Shapes on this slide | | Background | SlideBackground | Slide background fill | | Notes | NotesSlide | Speaker notes for this slide | | Visible | bool | Whether the slide is shown during presentation | | ShowMasterShapes | bool | Whether master/layout shapes are inherited | | Clone() | Slide | Create a copy of this slide | | FindText(string, TextSearchOptions) | IList | Search text within this slide | | ReplaceText(string, string, TextSearchOptions) | void | Replace text within this slide | | ActualFooterPlaceholder | Shape | Footer placeholder shape | | ActualSlideNumberPlaceholder | Shape | Slide number placeholder shape | | ActualDateTimePlaceholder | Shape | Date/time placeholder shape |
Shape
| Property/Method | Type | Description | |----------------|------|-------------| | X, Y | float | Top-left position in document units (1/300 inch) | | Width, Height | float | Size in document units | | Fill | OfficeFill | Fill style (SolidFill, GradientFill, etc.) | | Outline | LineStyle | Border/outline style | | TextArea | TextArea | Text content and formatting | | PlaceholderSettings | PlaceholderSettings | Placeholder type, index, size | | Effects | ShapeEffectProperties | Visual effects (shadow, glow, etc.) | | Name | string | Shape name |
Common Patterns
Add a Text Shape to a Slide
Shape shape = new Shape(ShapeType.Rectangle, x: 100, y: 100, width: 2000, height: 600);
shape.Fill = new SolidFill(Color.LightBlue);
shape.Outline = new LineStyle { Fill = new SolidFill(Color.SteelBlue), Width = 2 };
shape.TextArea = new TextArea("Hello, Presentation API!");
slide.Shapes.Add(shape);
Add a Table to a Slide
// Table(rows, columns, x, y, width, height)
Table table = new Table(3, 4, 100f, 200f, 3000f, 1200f);
table.Style = new ThemedTableStyle(TableStyleType.LightStyle1Accent4);
table[0, 0].TextArea.Text = "Header 1";
table[0, 1].TextArea.Text = "Header 2";
table.HasHeaderRow = true;
slide.Shapes.Add(table);
Load, Modify, Save
Presentation presentation = new Presentation(File.ReadAllBytes("input.pptx"));
Slide slide = presentation.Slides[0];
foreach (Shape shape in slide.Shapes) {
if (shape is Shape s && s.TextArea != null)
s.TextArea.ReplaceText("old text", "new text");
}
using FileStream fs = new FileStream("output.pptx", FileMode.Create);
presentation.SaveDocument(fs);
Troubleshooting
| Symptom | Cause | Solution | |---------|-------|----------| | PresentationUnsupportedFormatException | File is not a valid PPTX/PPTM/POTX/POTM | Verify file format; only Open XML formats are supported | | InvalidOperationException on save | SlideMasters collection is empty | Always keep at least one SlideMaster in the presentation | | ArgumentOutOfRangeException on table access | Row or column index is out of range | Check table.Rows.Count and table.Columns.Count before indexing | | SmartArt/Charts not in PDF export | Known limitation: these elements are not exported | Accepted limitation; use image workarounds if needed | | Version mismatch error at build | Mixed DevExpress package versions | Ensure all DX packages use the exact same version (e.g., all 25.2.x) | | License error at runtime | Missing or invalid DevExpress license | Register license key per the DevExpress installation guide | | Shapes not visible on exported slide | Shape coordinates exceed slide bounds | Check Presentation.SlideSize and adjust shape X/Y/Width/Height |
Constraints & Rules
CRITICAL — follow these rules in every interaction:
- Build verification: After making changes, verify the project builds with
dotnet build. Check for errors before reporting success. - NuGet packages: Use
DevExpress.Docs.Presentationfor core features. Do not guess other package names. - Namespace imports: Always include
using DevExpress.Docs.Presentation;andusing DevExpress.Docs.Office;(for text types, fills, and effects). AddDevExpress.Docs.Presentation.ExportandDevExpress.Docs.Presentation.Printingas needed. - Version consistency: All DevExpress packages must use the same version.
- License: DevExpress requires a valid license. Remind the developer if they encounter license-related errors.
- No destructive changes: Preserve existing code structure. Only add or modify what is necessary.
- Framework detection: Check the project's .csproj for target framework. The Presentation API supports .NET 6+ and .NET Framework 4.6.2+.
- Coordinate units: Shape position and size values use document units (1/300 inch). Use appropriate values for visible placement on a typical widescreen slide (default: ~4000 x 2250 units).
Using DevExpress Documentation MCP
If the DxDocs MCP server is available, use it to supplement this skill:
- Search: Use
devexpress_docs_searchwith technology "Presentation API" and your question. - Fetch: Use
devexpress_docs_get_contentwith a documentation URL to get full article content.
When to use MCP vs. built-in references:
- Built-in references: Getting started, common patterns, key properties, troubleshooting.
- MCP search: Advanced scenarios not covered here, version-specific changes, uncommon features, or when the developer asks about something outside this skill's references.
- Always MCP for: Exact method signatures, event args, or enum values when you are not 100% certain.
Next Steps
Start with [Getting Started](references/getting-started.md) to install and configure the Presentation API, then explore specific features through the navigation guide above.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: DevExpress
- Source: DevExpress/agent-skills
- License: MIT
- Homepage: https://www.devexpress.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.