Преобразование изображений из текстового документа в растровый объект - PullRequest
5 голосов
/ 02 февраля 2011

В соответствии с требованиями проекта нам необходимо преобразовать изображения из текстового документа в растровый объект.Чтобы добиться этого, мы попытались преобразовать объект inlineshape из dll Microsoft.Office.Interop.Word в растровое изображение.Однако не удалось добиться успеха, получив объект буфера обмена как нулевой.Пожалуйста, найдите код, который мы попробовали, как показано ниже:

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));
              }
            }
        }        
     }
 }

Кто-нибудь работал над преобразованием слов в растровое изображение?Было бы очень полезно, если бы вы помогли нам преобразовать изображения из текстового документа в растровый объект.

Ответы [ 3 ]

2 голосов
/ 25 января 2012

Решено в этом посте: https://stackoverflow.com/a/7937590/1071212 Это проблема с STAThread:

Thread thread = new Thread([Method]);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
0 голосов
/ 14 марта 2012

Там два буфера обмена.

Обычно мы используем System.Windows.Forms.Clipboard, но это отстой.

Вместо этого используйте System.Windows.Clipboard, просто добавьте PresentationCore к своим ссылкам.

(в моем случае C: \ Program Files \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ PresentationCore.dll)

0 голосов
/ 07 февраля 2011

Попробуйте это.

foreach (InlineShape shape in d.InlineShapes)             
{ 
    if (shape != null)
    {
        shape.Range.Select(); 
        d.ActiveWindow.Selection.Copy();
        Bitmap bitmap = new Bitmap(Clipboard.GetImage());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...