使用 C# 编程生成 PPT 演示文稿

在企业自动化报告、批量生成教学课件、数据可视化输出等场景中,通过代码动态生成 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 文档的创建与编辑,适用于服务端批量生成、自动化报告输出等场景。实际项目中可结合业务数据,进一步扩展模板替换、图表动态绑定等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值