• 如何通过C#/VB.NET从PowerPoint文档中提取图片


    PowerPoint是用于制作幻灯片(演示文稿)的应用软件,每张幻灯片中都可以包含文字、图形、图形、表格、声音和影像等多种信息。有时候我们发现在PPT里面有一些精美的图片,或者其他原因想要把PPT里面的图片保存下来。但如果PowerPoint文档中包含大量图片,一张张保存未免太费时间及精力。那有什么办法可以高效便捷地提取出PPT中的图片呢?在这篇文章中,您将学习如何以编程方式从PowerPoint文档中提取图片。下面是我整理的步骤及方法,并附上C#/VB.NET代码供大家参考。

    • 从整个演示文稿中提取图像
    • 从特定演示幻灯片中提取图像

    程序环境:

    本次测试时,在程序中引入 Free Spire.Presentation.dll 文件。

    方法1

    ​Free Spire.Presentation for .NET​​ 下载到本地,解压,找到 BIN 文件夹下的 Spire.Presentation.dll。然后在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径 BIN 文件夹下的 dll 文件添加引用至程序。

    方法2:

    通过 ​NuGet​​安装。可通过以下 2 种方法安装:

      1. 可以在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理 NuGet 包”,然后搜索“Free Spire.Presentation”,点击“安装”。等待程序安装完成。

      2. 将以下内容复制到 PM 控制台安装。

    Install-Package FreeSpire.Presentation -Version 7.8

    从整个演示文稿中提取图像

    • 初始化 Presentation 类的一个实例。
    • 使用 Presentation.LoadFromFile() 方法加载 PowerPoint 演示文稿。
    • 通过 Presentation.Images 属性获取演示文稿中所有图片的集合。
    • 遍历集合,调用ImageCollection[int].Image.Save()方法将集合中的图片保存到图片文件中。

    完整代码

    C#

    复制代码
    using Spire.Presentation;
    using Spire.Presentation.Collections;
    using System.Drawing;
    
    namespace ExtractImagesFromPresentation
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                //初始化Presentation类的实例
                Presentation ppt = new Presentation();
    
                //加载PowerPoint演示文稿
                ppt.LoadFromFile("示例文档.pptx");
    
                //获取演示文稿的图像集
                ImageCollection imageCollection = ppt.Images;
    
                //遍历集合中的图像
                for (int i = 0; i < imageCollection.Count; i++)
                {
                    //提取图像
                    imageCollection[i].Image.Save(string.Format("Presentation\\图片{0}.png", i));
                }
    
                ppt.Dispose();
            }
        }
    }
    复制代码

    VB.NET

    复制代码
    Imports Spire.Presentation
    Imports Spire.Presentation.Collections
    
    Namespace ExtractImagesFromPresentation
        Friend Class Program
            Private Shared Sub Main(ByVal args As String())
                '初始化Presentation类的实例
                Dim ppt As Presentation = New Presentation()
    
                '加载PowerPoint演示文稿
                ppt.LoadFromFile("示例文档.pptx")
    
                '获取演示文稿的图像集
                Dim imageCollection As ImageCollection = ppt.Images
    
                '遍历集合中的图像
                For i As Integer = 0 To imageCollection.Count - 1
                    '提取图像
                    imageCollection(i).Image.Save(String.Format("Presentation\图片{0}.png", i))
                Next
    
                ppt.Dispose()
            End Sub
        End Class
    End Namespace
    复制代码

    效果图

    从特定演示幻灯片中提取图像

    • 初始化 Presentation 类的一个实例。
    • 使用 Presentation.LoadFromFile() 方法加载 PowerPoint 演示文稿。
    • 通过 Presentation.Slides[int] 属性按索引获取特定幻灯片。
    • 遍历幻灯片上的所有形状。
    • 检查形状是否为 SlidePicture 或 PictureShape 类型。 如果结果为真,则使用 SlidePicture.PictureFill.Picture.EmbedImage.Image.Save()或 PictureShape.EmbedImage.Image.Save() 方法将图像保存到图像文件。

    完整代码

    C#

    复制代码
    using Spire.Presentation;
    
    namespace ExtractImagesFromSlide
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                //初始化 Presentation 类的一个实例
                Presentation ppt = new Presentation();
                //加载 PowerPoint 演示文稿
                ppt.LoadFromFile("示例文档.pptx");
    
                //获取指定幻灯片
                ISlide slide = ppt.Slides[1];
    
                int i = 0;
                //遍历指定幻灯片上的所有形状
                foreach (IShape s in slide.Shapes)
                {
                    //检查形状是否为SlidePicture类型
                    if (s is SlidePicture)
                    {
                        //提取图像
                        SlidePicture ps = s as SlidePicture;
                        ps.PictureFill.Picture.EmbedImage.Image.Save(string.Format(@"D:\.NET\提取图片\bin\Debug\Slide\图像{0}.png", i));
                        i++;
                    }
                    //检查形状是否为 PictureShape 类型
                    if (s is PictureShape)
                    {
                        //提取图像
                        PictureShape ps = s as PictureShape;
                        ps.EmbedImage.Image.Save(string.Format(@"D:\.NET\提取图片\bin\Debug\Slide\图像{0}.png", i));
                        i++;
                    }
                }
            }
        }
    }
    复制代码

    VB.NET

    复制代码
    Imports Spire.Presentation
    
    Namespace ExtractImagesFromSlide
        Friend Class Program
            Private Shared Sub Main(ByVal args As String())
                '初始化 Presentation 类的一个实例
                Dim ppt As Presentation = New Presentation()
                '加载 PowerPoint 演示文稿
                ppt.LoadFromFile("示例文档.pptx")
    
                '获取指定幻灯片
                Dim slide As ISlide = ppt.Slides(1)
    
                Dim i = 0
                '遍历指定幻灯片上的所有形状
                For Each s As IShape In slide.Shapes
                    '检查形状是否为SlidePicture类型
                    If TypeOf s Is SlidePicture Then
                        '提取图像
                        Dim ps As SlidePicture = TryCast(s, SlidePicture)
                        ps.PictureFill.Picture.EmbedImage.Image.Save(String.Format("D:\.NET\提取图片\bin\Debug\Slide\图像{0}.png", i))
                        i += 1
                    End If
                    '检查形状是否为 PictureShape 类型
                    If TypeOf s Is PictureShape Then
                        '提取图像
                        Dim ps As PictureShape = TryCast(s, PictureShape)
                        ps.EmbedImage.Image.Save(String.Format("D:\.NET\提取图片\bin\Debug\Slide\图像{0}.png", i))
                        i += 1
                    End If
                Next
            End Sub
        End Class
    End Namespace
    复制代码

    效果图

    —本文完—

  • 相关阅读:
    Java后端面试该复习什么?只需一张图
    内网离线安装docker并配置使用nexus为docker私服
    【ASM】字节码操作 ClassWriter 类介绍与使用
    idea热加载,JRebel 插件是目前最好用的热加载插件,它支持 IDEA Ultimate 旗舰版、Community 社区版
    主流架构(gcc、msvc、x86、x64、arm)中double与float浮点数保留精度(末尾清零)
    Linux常见指令(1)
    golang gin ShouldBindHeader绑定请求头数据:`header:“Referer“ binding:“required“`
    【中秋】ijoc论文20230929
    代码行统计工具---cloc(Count Lines of Code)
    悬赏任务兼职众人帮蚂蚁帮扶任务平台
  • 原文地址:https://www.cnblogs.com/Carina-baby/p/17211465.html