在企业自动化报告、批量生成教学课件、数据可视化输出等场景中,通过代码动态生成 PowerPoint 文档能够显著提升工作效率。本文将介绍如何基于 .NET 平台,使用 Free Spire.Presentation 组件以 C# 代码方式创建和编辑 PPTX 文档,涵盖幻灯片管理、文本、图片、形状等核心元素的操作方法。

一、环境准备

1.1 组件安装

在 Visual Studio 中,推荐通过 NuGet 包管理器引入组件。在包管理器控制台执行以下命令:

Install-Package FreeSpire.Presentation

或使用 .NET CLI:

dotnet add package FreeSpire.Presentation

安装完成后,在代码文件顶部引入所需命名空间:

using Spire.Presentation;
using Spire.Presentation.Drawing;
using System.Drawing;

1.2 核心对象模型

组件的 API 设计与 PowerPoint 原生对象模型对应,主要包含以下核心类:

  • Presentation:表示整个演示文稿文档,是所有操作的入口
  • ISlide:表示单张幻灯片,通过 Presentation.Slides 集合访问
  • IAutoShape:表示形状对象,文本内容通过 TextFrame 属性承载
  • IEmbedImage:表示嵌入到幻灯片中的图片对象

二、创建演示文稿与幻灯片管理

2.1 新建空白演示文稿

实例化 Presentation 对象时,会自动包含一张空白幻灯片。如果需要从零构建幻灯片集合,可以先移除默认页:

// 创建演示文稿实例
Presentation ppt = new Presentation();

// 移除默认的空白幻灯片(可选)
ppt.Slides.RemoveAt(0);

2.2 添加与插入幻灯片

// 在末尾追加空白幻灯片
ISlide slide1 = ppt.Slides.Append();

// 在指定索引位置插入幻灯片(索引从0开始)
ISlide slide2 = ppt.Slides.Insert(1);

// 获取幻灯片总数
int slideCount = ppt.Slides.Count;

2.3 设置幻灯片尺寸

默认幻灯片尺寸为标准 16:9 宽屏,可根据需求调整:

// 设置为 4:3 比例
ppt.SlideSize.Type = SlideSizeType.Screen4x3;

// 自定义尺寸(单位:磅)
ppt.SlideSize.Size = new SizeF(1024, 768);

三、添加文本内容

PowerPoint 中的文本承载于形状之内,通过添加矩形形状并设置其文本框架即可实现文本框效果。

3.1 基础文本框

// 获取第一张幻灯片
ISlide slide = ppt.Slides[0];

// 定义文本框位置和大小 (x, y, 宽度, 高度)
RectangleF textRect = new RectangleF(100, 100, 500, 80);

// 添加矩形形状作为文本框
IAutoShape textShape = slide.Shapes.AppendShape(ShapeType.Rectangle, textRect);

// 设置形状无填充、无边框
textShape.Fill.FillType = FillFormatType.None;
textShape.ShapeStyle.LineColor.Color = Color.Transparent;

// 设置文本内容
textShape.TextFrame.Text = "C# 编程创建 PowerPoint 演示文稿";

3.2 文本格式设置

// 获取文本范围对象
TextRange textRange = textShape.TextFrame.TextRange;

// 设置字体
textRange.LatinFont = new TextFont("微软雅黑");
textRange.FontHeight = 32;
textRange.IsBold = TriState.True;

// 设置文字颜色
textRange.Fill.FillType = FillFormatType.Solid;
textRange.Fill.SolidColor.Color = Color.FromArgb(30, 80, 160);

// 设置对齐方式
textShape.TextFrame.Paragraphs[0].Alignment = TextAlignmentType.Center;

3.3 多段落文本

对于包含多个段落的内容,可通过段落集合进行管理:

TextFrame textFrame = textShape.TextFrame;
textFrame.Paragraphs.Clear();

// 添加第一个段落
TextParagraph para1 = new TextParagraph();
para1.Text = "第一段落内容";
para1.Alignment = TextAlignmentType.Left;
textFrame.Paragraphs.Append(para1);

// 添加第二个段落
TextParagraph para2 = new TextParagraph();
para2.Text = "第二段落内容";
para2.FirstLineIndent = 30; // 首行缩进
textFrame.Paragraphs.Append(para2);

四、插入图片

4.1 嵌入本地图片

// 定义图片显示区域
RectangleF imageRect = new RectangleF(150, 200, 400, 250);

// 从本地文件嵌入图片
IEmbedImage image = slide.Shapes.AppendEmbedImage(
ShapeType.Rectangle,
@"C:\images\sample.png",
imageRect
);

// 移除图片边框
image.Line.FillFormat.FillType = FillFormatType.None;

4.2 设置幻灯片背景

// 设置背景类型为自定义
slide.SlideBackground.Type = BackgroundType.Custom;
slide.SlideBackground.Fill.FillType = FillFormatType.Picture;
slide.SlideBackground.Fill.PictureFill.FillType = PictureFillType.Stretch;

// 加载背景图片
Image bgImage = Image.FromFile(@"C:\images\background.jpg");
slide.SlideBackground.Fill.PictureFill.Picture.EmbedImage =
ppt.Images.Append(bgImage);

五、保存与导出

5.1 保存为 PPTX 格式

// 保存为 PowerPoint 2019 格式
ppt.SaveToFile("output.pptx", FileFormat.Pptx2019);

5.2 导出为其他格式

// 导出为 PDF
ppt.SaveToFile("output.pdf", FileFormat.PDF);

// 将单张幻灯片导出为图片
Image slideImage = ppt.Slides[0].SaveAsImage();
slideImage.Save("slide_0.png", System.Drawing.Imaging.ImageFormat.Png);

六、完整示例

以下是一个综合示例,创建包含封面页和内容页的演示文稿:

using Spire.Presentation;
using Spire.Presentation.Drawing;
using System.Drawing;

namespace PptGenerator
{
class Program
{
static void Main(string[] args)
{
Presentation ppt = new Presentation();
ppt.Slides.RemoveAt(0);

// ===== 第1页:封面 =====
ISlide coverSlide = ppt.Slides.Append();

// 标题
IAutoShape titleShape = coverSlide.Shapes.AppendShape(
ShapeType.Rectangle,
new RectangleF(120, 180, 520, 80)
);
titleShape.Fill.FillType = FillFormatType.None;
titleShape.ShapeStyle.LineColor.Color = Color.Transparent;
titleShape.TextFrame.Text = "技术方案汇报";
TextRange titleRange = titleShape.TextFrame.TextRange;
titleRange.LatinFont = new TextFont("微软雅黑");
titleRange.FontHeight = 44;
titleRange.IsBold = TriState.True;
titleRange.Fill.SolidColor.Color = Color.FromArgb(30, 60, 120);
titleShape.TextFrame.Paragraphs[0].Alignment = TextAlignmentType.Center;

// 副标题
IAutoShape subtitleShape = coverSlide.Shapes.AppendShape(
ShapeType.Rectangle,
new RectangleF(120, 280, 520, 50)
);
subtitleShape.Fill.FillType = FillFormatType.None;
subtitleShape.ShapeStyle.LineColor.Color = Color.Transparent;
subtitleShape.TextFrame.Text = "——基于 .NET 平台的自动化方案";
TextRange subRange = subtitleShape.TextFrame.TextRange;
subRange.LatinFont = new TextFont("微软雅黑");
subRange.FontHeight = 20;
subRange.Fill.SolidColor.Color = Color.Gray;
subtitleShape.TextFrame.Paragraphs[0].Alignment = TextAlignmentType.Center;

// ===== 第2页:内容页 =====
ISlide contentSlide = ppt.Slides.Append();

// 页面标题
IAutoShape pageTitle = contentSlide.Shapes.AppendShape(
ShapeType.Rectangle,
new RectangleF(50, 40, 600, 50)
);
pageTitle.Fill.FillType = FillFormatType.None;
pageTitle.ShapeStyle.LineColor.Color = Color.Transparent;
pageTitle.TextFrame.Text = "核心功能模块";
TextRange pageTitleRange = pageTitle.TextFrame.TextRange;
pageTitleRange.FontHeight = 28;
pageTitleRange.IsBold = TriState.True;

// 项目列表
string[] items = { "数据采集模块", "分析处理引擎", "可视化输出", "报表自动生成" };
for (int i = 0; i < items.Length; i++)
{
IAutoShape itemShape = contentSlide.Shapes.AppendShape(
ShapeType.Rectangle,
new RectangleF(80, 120 + i * 50, 500, 40)
);
itemShape.Fill.FillType = FillFormatType.None;
itemShape.ShapeStyle.LineColor.Color = Color.Transparent;
itemShape.TextFrame.Text = $"• {items[i]}";
itemShape.TextFrame.TextRange.FontHeight = 20;
}

// 保存文件
ppt.SaveToFile("presentation_demo.pptx", FileFormat.Pptx2019);
}
}
}


通过以上方法,可以在不安装 Microsoft Office 的环境下,以纯代码方式完成 PowerPoint 文档的创建与编辑,适用于服务端批量生成、自动化报告输出等场景。实际项目中可结合业务数据,进一步扩展模板替换、图表动态绑定等功能。