Сохранение математических уравнений из файла .doc MS Word и их восстановление

Я обрабатываю файлы Microsoft Word, которые содержат математические уравнения и изображения. Мне нужно получить эти объекты InlineShapes и сохранить их как есть, а затем восстановить их при необходимости.

Я знаю, как получить InlineShape объектов из файла, проблема в том, как их сохранить. Сохранение их как изображений не вариант!


person chingi3    schedule 20.08.2012    source источник
comment
Вы думали о том, чтобы хранить их в файле ресурсов или в базе данных?   -  person MethodMan    schedule 20.08.2012
comment
Не могли бы вы показать какой-нибудь соответствующий код, который вы используете до сих пор. Тогда будет легче понять вашу проблему.   -  person Petr Abdulin    schedule 20.08.2012
comment
Можете ли вы хранить объекты inlineshape в памяти?   -  person JohnZaj    schedule 20.08.2012
comment
@DJKRAZE, я хочу сохранить их в базе данных, если это возможно   -  person chingi3    schedule 20.08.2012
comment
Chingi3 Я добавил другое решение, см. пример ниже.   -  person MethodMan    schedule 20.08.2012
comment
@DJKRAZE еще раз спасибо. посмотрите, есть ли другой способ сохранить встроенную форму, кроме сохранения их в виде изображений ??   -  person chingi3    schedule 20.08.2012
comment
это для приложения winforms или webforms ..? вы можете хранить и загружать файл в виде байтов изображений, а также у вас есть настройка базы данных с правильным типом данных ..? varBinaryMax будет работать в отношении настройки типа базы данных   -  person MethodMan    schedule 20.08.2012
comment
в любом случае результатом является изображение, я имел в виду, могу ли я сохранить объект «InlineShape» как объект со всеми его свойствами, чтобы восстановить его, когда мне нужно.   -  person chingi3    schedule 20.08.2012


Ответы (1)


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

Копия кода из Как извлечь изображения из файла Doc (Word) в C#?

Преобразование изображений из документа Word в растровое изображение

person MethodMan    schedule 20.08.2012
comment
Я думал, что сохранение встроенных фигур в виде изображений невозможно? - person JohnZaj; 20.08.2012
comment
@jJack, вы правы, это не вариант. @DJKRAZE спасибо за код, но я могу хранить встроенные формы в виде растровых изображений, и мне нужно как-то сохранить их как есть. - person chingi3; 20.08.2012