Как добавить внешнее изображение в документ Word с помощью OpenXml?

Я пытаюсь использовать С# и Open XML для вставки изображения из URL-адреса в документ. Изображение может измениться, поэтому я не хочу его загружать, я хочу, чтобы оно оставалось внешней ссылкой.

Я нашел несколько примеров, подобных этому, которые позволяют мне добавить локальное изображение:

http://msdn.microsoft.com/en-us/library/bb497430.aspx

Как я могу адаптировать это для получения URI? Или вообще есть другой подход?


person brendan    schedule 26.09.2012    source источник


Ответы (1)


Вы можете добавить внешнее изображение в документ Word через поле быстрых частей. Описание см. в следующем ответе на суперпользователь.

Чтобы реализовать описанные шаги программно, вы должны использовать внешнюю связь для включения изображения из URL-адреса.

Вот шаги для достижения этого:

  1. Создайте экземпляр класса Picture.
  2. Добавьте форму, чтобы указать стиль изображения (ширину/высоту).
  3. Используйте класс ImageData, чтобы указать идентификатор внешней связи.
  4. Добавьте внешнюю связь к основной части документа. Дайте внешней связи тот же идентификатор, который вы указали на шаге 3.

Следующий код просто реализует шаги, описанные выше. Изображение добавляется в первый абзац документа Word.

using (WordprocessingDocument newDoc = WordprocessingDocument.Open(@"c:\temp\external_img.docx", true))
{
    var run = new Run();

    var picture = new Picture();

    var shape = new Shape() { Id = "_x0000_i1025", Style = "width:453.5pt;height:270.8pt" };
    var imageData = new ImageData() { RelationshipId = "rId56" };

    shape.Append(imageData);

    picture.Append(shape);

    run.Append(picture);

    var paragraph = newdoc.MainDocumentPart.Document.Body.Elements<Paragraph>().FirstOrDefault();

    paragraph.Append(run);      

    newDoc.MainDocumentPart.AddExternalRelationship(
       "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
       new System.Uri("<url to your picture>", System.UriKind.Absolute), "rId56");
}

В приведенном выше коде я пропустил код для определения типа формы. Я советую вам использовать такой инструмент, как средство повышения производительности OpenXML SDK для проверки документа Word с внешней связью с изображением.

person Hans    schedule 30.09.2012