从word文件中提取图像

我一直在尝试以下C#代码从doc文件中提取图像,但它不起作用:

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文件中提取图像的正确代码吗?

 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中查找以下目录

是的,这不是C#的方式来发布它,但即使编写代码执行上述3个步骤将是一种自动化过程的方式,如果这是你正在寻找的。

这是本地/非网页版本。

大部分代码都是从以下url复制而来的: 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"); }