从word文件中提取图像

本文关键字:提取 图像 文件 word | 更新日期: 2023-09-27 18:12:39

我一直在尝试以下c#代码从文档文件中提取图像,但它不工作:

object missing = System.Reflection.Missing.Value;            
            Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document oDoc = new Microsoft.Office.Interop.Word.Document();
            oWord.Visible = false;
            object str1 = "C:''doc.doc";
            oDoc = oWord.Documents.Open(ref str1, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
            if (oDoc.InlineShapes.Count > 0)            {

                for (int j = 0; j < oDoc.InlineShapes.Count; j++)
                {  
                    oWord.ActiveDocument.Select();
                    oDoc.ActiveWindow.Selection.CopyAsPicture();
                    IDataObject data = Clipboard.GetDataObject();                    
                    if (data.GetDataPresent(typeof(System.Drawing.Bitmap)))
                    {
                        object bm = data.GetData(DataFormats.Bitmap);
                        Bitmap bmp;
                        bmp = (Bitmap)data.GetData(typeof(System.Drawing.Bitmap));
                        bmp.Save("C:''test.bmp");
                    }

                }

谁能给适当的代码提取图像从word文件?

从word文件中提取图像

using System;
using System.Drawing;
using System.IO;
using System.Threading;
using Page = System.Web.UI.Page;
using Microsoft.Office.Interop.Word;
using Microsoft.VisualBasic.Devices;
public partial class ReadIMG : System.Web.UI.Page
{   
    private Application m_word;
    private int m_i;
    protected void Page_Load(object sender, EventArgs e)
    {
        object missing = Type.Missing;
        object FileName = Server.MapPath("~/LectureOrig/Word.docx");
        object readOnly = true;
        m_word = new Application();
        m_word.Documents.Open(ref FileName,
                                ref missing, ref readOnly, ref missing, ref missing,
                                ref missing, ref missing, ref missing, ref missing,
                                ref missing, ref missing, ref missing, ref missing, ref missing,ref missing,ref missing);
        try
        {
            for (int i = 1; i <= m_word.ActiveDocument.InlineShapes.Count; i++)
            {
                m_i = i;
               // CopyFromClipboardShape();
                Thread thread = new Thread(CopyFromClipbordInlineShape);
                thread.SetApartmentState(ApartmentState.STA);
                thread.Start();
                thread.Join();
            }
        }
        finally
        {
            object save = false;
            m_word.Quit(ref save, ref missing, ref missing);
            m_word = null;
        }
    }
    protected void CopyFromClipbordInlineShape()
    {   
        InlineShape inlineShape = m_word.ActiveDocument.InlineShapes[m_i];
        inlineShape.Select();
        m_word.Selection.Copy();
        Computer computer = new Computer();
        //Image img = computer.Clipboard.GetImage();
        if (computer.Clipboard.GetDataObject() != null)
        {
            System.Windows.Forms.IDataObject data = computer.Clipboard.GetDataObject();
            if (data.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap))
            {
                Image image = (Image)data.GetData(System.Windows.Forms.DataFormats.Bitmap, true);                
                image.Save(Server.MapPath("~/ImagesGet/image.gif"), System.Drawing.Imaging.ImageFormat.Gif);
                image.Save(Server.MapPath("~/ImagesGet/image.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else
            {
                LabelMessage.Text="The Data In Clipboard is not as image format";
            }
        }
        else
        {
            LabelMessage.Text="The Clipboard was empty";
        }
    }

如何从c#中提取Doc (Word)文件中的图像的代码副本?

如果是.docx文件,另一个选项:

  1. 将文件重命名为.zip
  2. 提取内容
  3. 在解压的文件夹word/media
  4. 中查找以下目录

是的,这不是c#的方式来做到这一点,但即使编写代码来执行上面的3个步骤将是一种自动化的过程,如果这是你正在寻找的。

这是一个本地/非网页版本

大部分代码是从:http://www.csharphelp.com/2007/05/save-picture-from-clipboard-to-file-using-c/——加上Ekk的回答中的几行。

InlineShape inlineShape = m_word.ActiveDocument.InlineShapes[m_i];
inlineShape.Select();
m_word.Selection.Copy();
if (Clipboard.GetDataObject() != null)
{
    IDataObject data = Clipboard.GetDataObject();
    if (data.GetDataPresent(DataFormats.Bitmap))
    {
        Image image = (Image)data.GetData(DataFormats.Bitmap,true);
        image.Save("image.bmp",System.Drawing.Imaging.ImageFormat.Bmp);
        image.Save("image.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
        image.Save("image.gif",System.Drawing.Imaging.ImageFormat.Gif);
    }
    else
    {
        MessageBox.Show("The Data In Clipboard is not as image format");
    }
}
else
{
    MessageBox.Show("The Clipboard was empty");
}

我有同样的问题,我使用尖顶库,我得到了解决方案,我给的链接库使用只是添加dll文件在你的visual studio和复制下面的代码:

enter code here

        if (file.ShowDialog() == DialogResult.OK) //if there is a file choosen by the user  
        {
            object path = file.FileName; //get the path of the file  
            object readOnly = true;
            Spire.Doc.Document document = new Spire.Doc.Document(file.FileName);
            int index = 1;
            //Get Each Section of Document  
            foreach (Spire.Doc.Section section in document.Sections)
            {
                //Get Each Paragraph of Section  
                foreach (Spire.Doc.Documents.Paragraph paragraph in section.Paragraphs)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine(paragraph.Text);//storing the text of word in string builder
                    Console.WriteLine(sb);
                    //Get Each Document Object of Paragraph Items  
                    foreach (DocumentObject docObject in paragraph.ChildObjects)
                    {
                        //If Type of Document Object is Picture, Extract.  
                        if (docObject.DocumentObjectType == DocumentObjectType.Picture)
                        {
                            DocPicture pic = docObject as DocPicture;
                            String imgName = String.Format(@"E:'C#'OnlineExam'Question'{0}.png", index);
                            //Save Image  
                            pic.Image.Save(imgName, System.Drawing.Imaging.ImageFormat.Png);
                            index++;
                        }
                    }
                }
            }}

你可以从这个链接找到dll文件