简体   繁体   中英

How can I add an external image to a word document using OpenXml?

I am trying to use C# and Open XML to insert an image from a url into a doc. The image may change so I don't want to download it, I want it to remain an external reference.

I've found several examples like this one that allow me to add a local image:

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

How can I adapt that to take a URI? Or is there another approach altogether?

You can add an external image to an word document via a quick parts field. For a description please see the following answer on superuser .

To realize the described steps programmatically you have to use an external releationship to include an image from an URL.

Here are the steps to accomplish this:

  1. Create an instance of the Picture class.
  2. Add a Shape to specify the style of the picture (width/height).
  3. Use the ImageData class to specify the ID of the external releationship.
  4. Add an external releationship to the main document part. Give the external releationship the same ID you specified in step 3.

The following code just implements the steps described above. The image is added to the first paragraph in the word document.

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

In the code above I've omitted the code to define the shape type. I advise you to use a tool like the OpenXML SDK productivity tool to inspect a word document with an external releationship to an image.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM