如何使用C#从word文档中提取图片

要从Word文档中提取图片,可以使用C#语言中的Microsoft Office Interop库来实现。这个库提供了访问Office文件和应用程序的接口,可以用于创建、读取、编辑和保存Word文档等各种操作。这里我们将讲解如何使用C#从Word文档中提取图片,具体步骤如下:

步骤1:引用Interop库

首先,需要设置项目的引用,以便可以在C#中使用Office Interop库。右击项目,在弹出的菜单中选择“添加引用”,然后在弹出的对话框中选择“COM”选项卡,找到并勾选“Microsoft Word yy.y Object Library”(其中yy.y为Office版本号),点击“确定”按钮完成引用。

步骤2:打开Word文档

接下来,需要打开Word文档。在代码中创建一个Application对象来打开Word程序,然后使用这个对象来打开Word文档,如下所示:

Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
Document doc = app.Documents.Open(filename);

其中filename为要打开的Word文档的路径。

步骤3:遍历文档中的图片

打开Word文档后,就可以遍历文档中的所有图片,并将它们提取出来。遍历过程中,可以使用InlineShape对象来表示文档中的图片,并使用Range对象来表示图片所在的范围。代码示例如下:

foreach (InlineShape shape in doc.InlineShapes)
{
    if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
    {
        Range range = shape.Range;
        string filename = range.Text.Trim();
        if (string.IsNullOrEmpty(filename))
        {
            filename = "picture" + DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".jpg";
        }
        shape.Select();
        Selection sel = app.Selection;
        sel.CopyAsPicture();
        Image image = Clipboard.GetImage();
        if (image != null)
        {
            string filepath = Path.Combine(outputDir, filename);
            image.Save(filepath);
        }
    }
}

上述代码中,我们首先对文档中所有的InlineShape进行遍历,并判断每个InlineShape是否为图片类型。如果是图片类型,则创建一个Range对象,代表图片所在的文本范围。然后,我们进行一些细节处理,比如得到图片文件名、选中图片、复制图片、获取剪贴板中的图片等等。最终,我们将得到的图片保存到指定的输出目录(outputDir)中。

示例1:将Word文档中的所有图片提取出来并保存到本地

下面是一个完整的示例,演示了如何将Word文档中的所有图片提取出来并保存到本地。

using System;
using System.Drawing;
using System.IO;
using Microsoft.Office.Interop.Word;

namespace WordPictureExtractor
{
    class Program
    {
        static void Main(string[] args)
        {
            string inputFilename = "D:\\word.docx";
            string outputDir = "D:\\images";

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }

            Application app = new Application();
            Document doc = app.Documents.Open(inputFilename);

            int count = 0;
            foreach (InlineShape shape in doc.InlineShapes)
            {
                if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
                {
                    Range range = shape.Range;
                    string filename = range.Text.Trim();
                    if (string.IsNullOrEmpty(filename))
                    {
                        filename = "picture" + (++count).ToString() + ".jpg";
                    }
                    shape.Select();
                    Selection sel = app.Selection;
                    sel.CopyAsPicture();
                    Image image = Clipboard.GetImage();
                    if (image != null)
                    {
                        string filepath = Path.Combine(outputDir, filename);
                        image.Save(filepath);
                    }
                }
            }

            if (doc != null)
            {
                doc.Close();
                doc = null;
            }
            if (app != null)
            {
                app.Quit();
                app = null;
            }
        }
    }
}

示例2:将Word文档中的图片提取为Base64编码字符串

下面是另一个示例,演示了如何将Word文档中的图片提取出来,并将其编码为Base64字符串。

using System;
using System.IO;
using System.Drawing;
using Microsoft.Office.Interop.Word;

namespace WordPictureExtractor
{
    class Program
    {
        static void Main(string[] args)
        {
            string inputFilename = "D:\\word.docx";

            Application app = new Application();
            Document doc = app.Documents.Open(inputFilename);

            int count = 0;
            foreach (InlineShape shape in doc.InlineShapes)
            {
                if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
                {
                    Range range = shape.Range;
                    string filename = range.Text.Trim();
                    if (string.IsNullOrEmpty(filename))
                    {
                        filename = "picture" + (++count).ToString();
                    }
                    shape.Select();
                    Selection sel = app.Selection;
                    sel.CopyAsPicture();
                    Image image = Clipboard.GetImage();
                    if (image != null)
                    {
                        MemoryStream stream = new MemoryStream();
                        image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
                        byte[] buffer = stream.ToArray();
                        string base64 = Convert.ToBase64String(buffer);
                        Console.WriteLine("Picture {0}:\r\n{1}\r\n", count, base64);
                    }
                }
            }

            if (doc != null)
            {
                doc.Close();
                doc = null;
            }
            if (app != null)
            {
                app.Quit();
                app = null;
            }
        }
    }
}

上述代码中,我们使用MemoryStream对象将图片转换为二进制数据,并使用Convert.ToBase64String方法将其编码为Base64字符串。最后,我们将得到的Base64字符串输出到控制台中。

注意:这里我们仅使用了部分代码,如果要完整运行代码,请将其放入适当的类中,并添加必要的命名空间。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用C#从word文档中提取图片 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • c# 网络编程之tcp

    C# 网络编程之TCP TCP是传输控制协议,是一种无连接的、可靠的、基于字节流的传输协议,它能够在网络上确保数据的可靠传输。在C#/.NET中,我们可以使用System.Net.Sockets命名空间下的TcpClient和TcpListener类来实现TCP网络编程。 TCP客户端 连接服务器 要建立一个TCP连接,需要指定服务器的IP地址和端口号,并使…

    C# 2023年5月31日
    00
  • ASP.NET操作MySql数据库的实例代码讲解

    下面是ASP.NET操作MySql数据库的实例代码讲解的完整攻略。这里以Visual Studio 2019为开发工具,使用Mysql.Data和Mysql.Data.Entity框架为例。 准备工作 首先,我们需要安装一个MySql数据库,并创建一个数据库和一个数据表。在Visual Studio 2019中,选择在解决方案资源管理器中的项目上单击右键,然…

    C# 2023年5月31日
    00
  • c#实现用SQL池,多线程定时批量执行SQL语句的方法

    实现用SQL池、多线程定时批量执行SQL语句的方法,可以避免单线程执行SQL语句时的性能瓶颈。以下是具体的实现步骤: 步骤一:创建连接池 安装 System.Data.SqlClient NuGet 包,用于创建 SQL Server 数据库连接 。 使用 SqlConnection 类创建一个数据库连接对象,并使用 SqlConnectionStringB…

    C# 2023年5月31日
    00
  • ASP.NET数据绑定的记忆碎片实现代码

    ASP.NET数据绑定的记忆碎片实现代码的攻略主要包括以下几个步骤: 设置控件的ViewStateMode属性为Enabled <asp:DropDownList ID="DropDownList1" runat="server" ViewStateMode="Enabled"> Vie…

    C# 2023年5月31日
    00
  • c# SendMail发送邮件实例代码

    下面详细讲解一下“c# SendMail发送邮件实例代码”的完整攻略。 什么是SendMail? SendMail是c#中一个邮件发送类,可以方便地实现发送邮件的功能。它的使用方法较为简单,只需要按照一定格式配置SMTP服务器和发件人信息,即可完成邮件的发送。 SendMail使用教程 配置SMTP服务器 在使用SendMail发送邮件前,需要首先配置SMT…

    C# 2023年6月7日
    00
  • C#基于WinForm实现串口通讯

    下面是详细的C#基于WinForm实现串口通讯的攻略,包括必要的示例代码和步骤。 1. 前置知识 在进行串口通讯之前,需要掌握以下基本知识: 串口的通信原理和相关协议 C#的基本语法和WinForm编程基础 .NET Framework中用于串口通讯的命名空间SerialPort的相关使用方法 2. 创建WinForm应用程序 首先,我们需要在Visual …

    C# 2023年5月15日
    00
  • 一步步打造简单的MVC电商网站BooksStore(3)

    一步步打造简单的MVC电商网站BooksStore(3) 在这一部分中,我们将继续完善我们的MVC电商网站开发计划,包括:数据库设计,模型开发和控制器开发。 数据库设计 在我们的电商网站开发中,我们将使用MySQL数据库来存储数据。我们需要设计一些数据表来存储用户信息、产品信息、订单信息等。 具体来说,我们需要至少设计三个表:一个用户信息表,一个产品信息表和…

    C# 2023年5月31日
    00
  • Ubuntu16.04系统配置.net core环境

    Ubuntu16.04系统配置.Net Core环境 在Ubuntu16.04系统中,可以通过以下步骤配置.Net Core环境。 1. 安装依赖 在Ubuntu16.04系统中,需要安装以下依赖才能安装.Net Core。可以按照以下步骤操作: 打开终端。 输入以下命令,安装依赖。 sudo apt-get update sudo apt-get inst…

    C# 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部