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

yizhihongxing

要从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日

相关文章

  • ASP.NET Ref和Out关键字区别分析

    ASP.NET中的Ref和Out关键字都是用来传递参数的,但它们之间的区别是很明显的。 Ref关键字 Ref关键字用于向方法中传递参数。使用该关键字传递参数意味着你正在传递参数的引用(内存地址),而不是参数本身。因此,任何对参数的更改也会对变量本身产生影响。 Ref示例: public void Modify(ref int num) { num += 10…

    C# 2023年5月31日
    00
  • Winform学生信息管理系统各子窗体剖析(3)

    首先需要明确一下,这篇文章是对Winform学生信息管理系统中各子窗体的剖析,本文分析的是第三部分,主要涉及的子窗体包括“学生公寓管理”、“学生缴费管理”、“学生考勤管理”和“学生成绩管理”。 学生公寓管理 学生公寓管理子窗体主要用于管理学生的住宿信息,包括宿舍楼、房间、住宿人员等信息。具体的功能如下: 宿舍楼管理:可以添加、修改、删除宿舍楼信息; 房间管理…

    C# 2023年6月2日
    00
  • c#调用vc写的ocx控件示例

    C# 调用 VC 写的 OCX 控件需要使用 COM 互操作技术来实现,这里提供一份完整攻略,包含如下步骤: 编写 VC 的 OCX 控件首先需要使用 VC 编写一个 OCX 控件,在编写过程中需要注意接口设计,以便在后续的调用中能够顺利确定方法和参数。实现后,需要注册控件并生成 TLB 文件。 引入 TLB 文件在 C# 项目中引入生成的 TLB 文件,以…

    C# 2023年6月7日
    00
  • C# 使用Dictionary复制克隆副本及比较是否相等

    下面我将详细讲解“C# 使用Dictionary复制克隆副本及比较是否相等”的完整攻略。 1. 使用Dictionary类型 首先,我们需要使用 C# 中的 Dictionary 类型来存储数据,这个类型可以看做是一种键值对的映射关系,其中的键和值均可以是任意类型。对于复制克隆副本和比较是否相等的操作,我们需要熟悉以下几个方法: 1.1. Add 方法 该方…

    C# 2023年5月31日
    00
  • c#异步操作async await状态机的总结(推荐)

    关于”c#异步操作async await状态机的总结(推荐)”这篇文章,我们首先需要了解一些基础知识。 什么是异步操作? 异步操作通常是指当一个操作(例如读取文件或从数据库中检索数据)正在执行时,代码不会阻塞(即等待该操作完成后才继续执行),而是在操作执行的同时继续执行其他代码。异步操作对于UI线程来说尤为重要,因为我们不希望用户界面因为耗时的操作而变得不响…

    C# 2023年6月6日
    00
  • C# Entity Framework中的IQueryable和IQueryProvider详解

    C# Entity Framework中的IQueryable和IQueryProvider详解 什么是IQueryable和IQueryProvider 在C#的Entity Framework中,IQueryable和IQueryProvider是两个重要的接口,它们负责处理LINQ查询操作和将其转换为的SQL语句。 简单来说,IQueryable表示一…

    C# 2023年6月1日
    00
  • .NET WinFrom中给文本框添加拖放事件的代码

    下面是 “.NET WinFrom中给文本框添加拖放事件的代码” 的攻略,包含了步骤和示例。 添加控件和事件 首先,我们需要在 WinForm 窗体中添加一个文本框控件,并且为其注册拖放事件。 // 在窗体代码中声明文本框控件 private TextBox textBox1; // 在窗体的构造函数中初始化文本框控件并注册拖放事件 public Form1…

    C# 2023年6月7日
    00
  • 一些值得一看的代码asp

    下面是“一些值得一看的代码 ASP”完整攻略。 提供什么内容 这个网页中提供一些 ASP 代码片段,以及相关说明和示例。这些代码片段涉及到 ASP 中的各种功能和技术,包括表单处理、文件上传、数据库操作等等。每个代码片段都有详细的注释,帮助读者理解它们的作用和使用方法。 如何使用 读者可以根据自己的需要,选择其中的一个或多个代码片段,将它们复制到自己的 AS…

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