【问题标题】:Converting images from word document into bitmap object将 word 文档中的图像转换为位图对象
【发布时间】:2011-06-19 16:59:30
【问题描述】:

根据项目要求,我们需要将图像从 word 文档转换为位图对象。为此,我们尝试将 Microsoft.Office.Interop.Word dll 中的 inlineshape 对象转换为位图。但是无法成功,将剪贴板对象设为空。请找到我们尝试过的代码如下;

using System.Drawing;
using Microsoft.Office.Interop.Word;
namespace WordApp1
{
    class Program
    {
        static void Main(string[] args)
        {
           Application wordApp = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
           Documents documents = wordApp.Documents;

           Document d = null;
           foreach (Document document in documents)
           {
              if (document.ActiveWindow.Caption.Contains("{Word document name}"))
              {
                 d = document;
              }
           }

           foreach (InlineShape shape in d.InlineShapes)
           {
              shape.Range.Select();
              d.ActiveWindow.Selection.Range.CopyAsPicture();
              System.Windows.Forms.IDataObject dobj = System.Windows.Forms.Clipboard.GetDataObject();  //Getting clipboard object as null
              if(dobj.GetDataPresent(typeof(System.Drawing.Bitmap)))
              {
                 Bitmap bmp;
                 System.IO.MemoryStream ms = new System.IO.MemoryStream();
                 bmp = (Bitmap)dobj.GetData(typeof(System.Drawing.Bitmap));
              }
            }
        }        
     }
 }

有没有人致力于将文字图像转换为位图?如果您能指导我们如何继续将图像从 word 文档转换为位图对象,那将是非常有帮助的。

【问题讨论】:

    标签: c# .net image interop ms-word


    【解决方案1】:

    试试这个。

    foreach (InlineShape shape in d.InlineShapes)             
    { 
        if (shape != null)
        {
            shape.Range.Select(); 
            d.ActiveWindow.Selection.Copy();
            Bitmap bitmap = new Bitmap(Clipboard.GetImage());
        }
    }
    

    【讨论】:

      【解决方案2】:

      已在此帖子中解决:https://stackoverflow.com/a/7937590/1071212 这是 STAThread 的问题:

      Thread thread = new Thread([Method]);
      thread.SetApartmentState(ApartmentState.STA);
      thread.Start();
      thread.Join();
      

      【讨论】:

        【解决方案3】:

        有两个剪贴板。

        通常我们会使用System.Windows.Forms.Clipboard,但这很糟糕。

        改用System.Windows.Clipboard,只需将 PresentationCore 添加到您的引用中。

        (在我的例子中,C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\PresentationCore.dll)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-04
          • 2014-11-20
          • 1970-01-01
          • 2019-08-02
          • 2013-10-10
          • 2010-12-04
          • 2015-02-23
          • 2015-06-28
          相关资源
          最近更新 更多