Формат документа.OpenXML Добавление изображения в документ word

#c# #asp.net #openxml #openxml-sdk

#c# #asp.net #openxml #openxml-sdk

Вопрос:

Я создаю простой документ word, используя OpenXML SDK. Пока это работает. Теперь, как я могу добавить изображение из моей файловой системы в этот документ? Мне все равно, где оно находится в документе, лишь бы оно было там. Спасибо! Вот что у меня есть на данный момент.

  string fileName = "proposal" dealerId  Guid.NewGuid().ToString() ".doc";
       string filePath = @"C:DWSApplicationFilesWord"   fileName;
       using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(filePath, WordprocessingDocumentType.Document, true))
       {
           MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();

           mainPart.Document = new Document();
           //create the body
           Body body = new Body();
           DocumentFormat.OpenXml.Wordprocessing.Paragraph p = new DocumentFormat.OpenXml.Wordprocessing.Paragraph();
           DocumentFormat.OpenXml.Wordprocessing.Run runParagraph = new DocumentFormat.OpenXml.Wordprocessing.Run();         

           DocumentFormat.OpenXml.Wordprocessing.Text text_paragraph = new DocumentFormat.OpenXml.Wordprocessing.Text("This is a test");
           runParagraph.Append(text_paragraph);
           p.Append(runParagraph);
           body.Append(p);
           mainPart.Document.Append(body);
           mainPart.Document.Save();              
       }
  

Ответ №1:

Вот метод, который может быть проще, чем тот, который описан на странице msdn, опубликованной выше, этот код написан на C / CLI, но, конечно, вы можете написать эквивалент на C#

 WordprocessingDocument^ doc = WordprocessingDocument::Open(doc_name, true);
FileStream^ img_fs = gcnew FileStream(image_path, FileMode::Open);
ImagePart^ image_part = doc->MainDocumentPart->AddImagePart(ImagePartType::Jpeg);
image_part->FeedData(img_fs);
Run^ img_run = doc->MainDocumentPart->Document->Body->AppendChild(gcnew Paragraph())->AppendChild(gcnew Run());
Vml::ImageData^ img_data = img_run->AppendChild(gcnew Picture())->AppendChild(gcnew Vml::Shape())->AppendChild(gcnew Vml::ImageData());
img_data->RelationshipId = doc->MainDocumentPart->GetIdOfPart(image_part);
doc->Close();
  

Ответ №2:

Этот код сработал для меня:http://msdn.microsoft.com/en-us/library/bb497430.aspx

Ваш код добавляет изображение в ваш пакет docx, но для того, чтобы увидеть его в документе, вы должны объявить его в своем document.xml т.е. свяжите его с вашим физическим изображением. Вот почему вы должны написать эту функцию long, указанную в ссылке msdn.

Моя проблема заключается в том, как добавлять эффекты к изображениям (редактирование, обрезка, удаление фона). Если вы знаете, как это сделать, я был бы признателен за вашу помощь 🙂

Ответ №3:

Как: Добавить часть изображения в пакет Office Open XML с помощью Open XML API

http://msdn.microsoft.com/en-us/library/bb497430 (v=office.12).aspx

 public static void AddImagePart(string document, string fileName)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        MainDocumentPart mainPart = wordDoc.MainDocumentPart;

        ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);

        using (FileStream stream = new FileStream(fileName, FileMode.Open))
        {
            imagePart.FeedData(stream);
        }
    }
}
  

Комментарии:

1. вместо того, чтобы просто размещать ссылку, лучше поместить заголовок и цитату для ссылки.

2. Что это за ссылка? Я знаю, что MS опубликовала подобный код, но это не добавляет изображение. На сайте MS есть другая версия, которая выглядит примерно так, но включает в себя все остальное, и это намного больше. Это неверный ответ.