{"id":2890,"date":"2016-03-19T04:37:12","date_gmt":"2016-03-19T04:37:12","guid":{"rendered":"http:\/\/www.ericwhite.com\/home2\/bm8qcmjy\/public_html\/blog\/?page_id=2890"},"modified":"2016-03-19T04:37:12","modified_gmt":"2016-03-19T04:37:12","slug":"inserting-an-image-into-a-bookmark-in-an-openxml-wordprocessingml-document","status":"publish","type":"page","link":"https:\/\/www.ericwhite.com\/blog\/inserting-an-image-into-a-bookmark-in-an-openxml-wordprocessingml-document\/","title":{"rendered":"Inserting an Image into a Bookmark in an OpenXML WordprocessingML Document"},"content":{"rendered":"<p>Bookmarks provide a convenient way in WordprocessingML to provide insertion points for various items, such as text, images, etc.&nbsp; Previously, I have outlined how to programmatically <a href=\"http:\/\/openxmldeveloper.org\/home2\/bm8qcmjy\/public_html\/blog\/b\/openxmldeveloper\/archive\/2011\/09\/01\/how-to-retrieve-the-text-of-a-bookmark-from-an-openxml-wordprocessingml-document.aspx\">retrieve<\/a> and <a href=\"http:\/\/openxmldeveloper.org\/home2\/bm8qcmjy\/public_html\/blog\/b\/openxmldeveloper\/archive\/2011\/09\/06\/replacing-text-of-a-bookmark-in-an-openxml-wordprocessingml-document.aspx\">replace<\/a> text within a bookmark.&nbsp; In a recent project, a client wanted to use bookmarks as insertion points for one or more images.&nbsp; Using with the replace bookmark text sample code as a starting point, I extended it to include image insertion.&nbsp; There are a number of additional steps to create an Open XML<br \/>\npackage that contains a properly inserted image. The main points are described below and sample code is attached.<\/p>\n<p>In a recent <a href=\"http:\/\/openxmldeveloper.org\/home2\/bm8qcmjy\/public_html\/blog\/b\/openxmldeveloper\/archive\/2013\/01\/19\/screen-cast-images-in-wordprocessingml.aspx\">screencast<\/a>, I discuss the mechanics of how images are handled in OpenXml.&nbsp; At the end of that screencast, I show how to manually insert an image into a word document package.&nbsp; In order to implement this in code, the following steps are performed:<\/p>\n<ol>\n<li>Flatten the paragraphs<\/li>\n<li>Create a resource ID for the image<\/li>\n<li>Create the image XElement<\/li>\n<li>Insert the image element into the bookmark<\/li>\n<li>Move the bookmark<\/li>\n<li>Create a new image part and stream the image into that part<\/li>\n<\/ol>\n<h2>Flattening the paragraphs<\/h2>\n<p>Flattening the paragraphs is a technique that I use in order to simplify XML operations.&nbsp; It creates temporarily invalid WordprocessingML, but is useful as an intermediate step.&nbsp; For example, it is valid for bookmarks to span different levels in the XML hierarchy.&nbsp; However, for inserting an image in between bookmark start and end tags, our job is significantly easier if the bookmarks are at the same level of hierarchy in the XML.&nbsp; &nbsp;<\/p>\n<h2>Create a Resource ID for the Image<\/h2>\n<p>The resource ID links the image part to the main document part. The only constraint for the image resource ID is that it must be unique.&nbsp; To create a resource ID, the code uses a GUID, strips out the dashes and prepends the number with \u201cr\u201d.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"prettyprint\"><span class=\"kwd\">string<\/span><span class=\"pln\"> imageRId <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"r\"<\/span><span class=\"pln\"> <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Guid<\/span><span class=\"pun\">.<\/span><span class=\"typ\">NewGuid<\/span><span class=\"pun\">().<\/span><span class=\"typ\">ToString<\/span><span class=\"pun\">().<\/span><span class=\"typ\">Replace<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"-\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">String<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Empty<\/span><span class=\"pun\">);<\/span><span class=\"pln\"> &nbsp;<\/span><\/pre>\n<p>&nbsp;<\/p>\n<h2>Create the Image XElement<\/h2>\n<p>There is no easy way to create the markup for the image other than hand-coding the image element tree.&nbsp; In order to see this markup, I created a Word document, inserted an image, saved the document, opened it in the <a href=\"http:\/\/visualstudiogallery.msdn.microsoft.com\/450a00e3-5a7d-4776-be2c-8aa8cec2a75b\">Open<br \/>\nXML Package Editor Power Tool for Visual Studio 2010<\/a>, and then examined the markup for the image.&nbsp; A fragment of the markup is shown below.&nbsp; We can see that the markup for the image is below a w:r element and begins with the w:drawing element:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"prettyprint\"><span class=\"tag\">&lt;w:r&gt;<\/span><span class=\"pln\"><br>&nbsp; <\/span><span class=\"tag\">&lt;w:drawing&gt;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"tag\">&lt;wp:inline<\/span><span class=\"pln\"> <\/span><span class=\"atn\">distT<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">distB<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">distL<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">distR<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"tag\">&gt;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; <\/span><span class=\"tag\">&lt;wp:extent<\/span><span class=\"pln\"> <\/span><span class=\"atn\">cx<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"2314575\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">cy<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"1647825\"<\/span><span class=\"pln\"> <\/span><span class=\"tag\">\/&gt;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; <\/span><span class=\"tag\">&lt;wp:effectExtent<\/span><span class=\"pln\"> <\/span><span class=\"atn\">l<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">t<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">r<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">b<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"0\"<\/span><span class=\"pln\"> <\/span><span class=\"tag\">\/&gt;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; <\/span><span class=\"tag\">&lt;wp:docPr<\/span><span class=\"pln\"> <\/span><span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"1\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">name<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"Image1\"<\/span><span class=\"pln\"> <\/span><span class=\"tag\">\/&gt;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; <\/span><span class=\"tag\">&lt;wp:cNvGraphicFramePr&gt;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"tag\">&lt;a:graphicFrameLocks<\/span><span class=\"pln\"> <\/span><span class=\"atn\">xmlns:a<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"http:\/\/schemas.openxmlformats.org\/drawingml\/2006\/main\"<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"atn\">noChangeAspect<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"1\"<\/span><span class=\"pln\"> <\/span><span class=\"tag\">\/&gt;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; <\/span><span class=\"tag\">&lt;\/wp:cNvGraphicFramePr&gt;<\/span><\/pre>\n<p>Using the <a href=\"https:\/\/github.com\/OfficeDev\/Open-Xml-PowerTools\">PowerTools for OpenXml<\/a> utility PtOpenXmlUtil.cs, which contains the intialized XName objects for WordprocessingML, I created an image element that produces similar image markup, as shown below.<\/p>\n<pre class=\"prettyprint\"><span class=\"typ\">XElement<\/span><span class=\"pln\"> imageElement <\/span><span class=\"pun\">=<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">W<\/span><span class=\"pun\">.<\/span><span class=\"pln\">drawing<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">WP<\/span><span class=\"pun\">.<\/span><span class=\"kwd\">inline<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"distT\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"distB\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"distL\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"distR\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">WP<\/span><span class=\"pun\">.<\/span><span class=\"pln\">extent<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"cx\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> imageWidthExtent<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"cy\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> imageHeightExtent<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">WP<\/span><span class=\"pun\">.<\/span><span class=\"pln\">effectExtent<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"l\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"t\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"r\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"b\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">WP<\/span><span class=\"pun\">.<\/span><span class=\"pln\">docPr<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"id\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"1\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"> &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"name\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> name<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">WP<\/span><span class=\"pun\">.<\/span><span class=\"pln\">cNvGraphicFramePr<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">graphicFrameLocks<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"typ\">XNamespace<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Xmlns<\/span><span class=\"pln\"> <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"a\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">a<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"noChangeAspect\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"1\"<\/span><span class=\"pun\">))<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">graphic<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"typ\">XNamespace<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Xmlns<\/span><span class=\"pln\"> <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"a\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">a<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">graphicData<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"uri\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">pic<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">_pic<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"typ\">XNamespace<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Xmlns<\/span><span class=\"pln\"> <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"pic\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">pic<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">nvPicPr<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">cNvPr<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"id\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"name\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">cNvPicPr<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">blipFill<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">blip<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"pln\">R<\/span><span class=\"pun\">.<\/span><span class=\"pln\">r <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"embed\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> imageRId<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">stretch<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">fillRect<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Pic<\/span><span class=\"pun\">.<\/span><span class=\"pln\">spPr<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">xfrm<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">off<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"x\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"y\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"0\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">ext<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"cx\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> imageWidth<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"cy\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> imageHeight<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">prstGeom<\/span><span class=\"pun\">,<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XAttribute<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"prst\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"rect\"<\/span><span class=\"pun\">),<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">XElement<\/span><span class=\"pun\">(<\/span><span class=\"pln\">A<\/span><span class=\"pun\">.<\/span><span class=\"pln\">avLst<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"pun\">);<\/span><\/pre>\n<p>There are several input parameters for this image element: the image dimensions, the dimensions of the space reserved for the image (extent), and the resource ID. &nbsp;The image name is not critical as the image part is referenced by the resource ID, not the image name.<\/p>\n<p>The height and width of the image and the dimensions reserved for it are defined by the attributes in the A:ext and wp:extent elements, respectively.&nbsp; These values are in EMUs, English Metric Units, where 1 EMU = 1\/914400 inch = 1\/360000 cm.&nbsp; In this sample code, the image to be inserted is passed in as a Bitmap object.&nbsp; The methods that return the width and height for a Bitmap object return the values in a different unit, where 1 unit = 1\/96 inch.&nbsp; Thus, the Bitmap image width and height are first converted into EMUs and then assigned as attribute values in the A:ext and wp:extent elements.&nbsp; &nbsp;<\/p>\n<p>To understand how these dimensions effect the layout, see the examples below:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.ericwhite.com\/blog\/wp-content\/uploads\/2016\/03\/1207.Img1_.png\" border=\"0\" alt=\" \"><\/p>\n<table class=\"MsoTableGrid\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" style=\"border-collapse:collapse;border:none;\">\n<tbody>\n<tr>\n<td width=\"91\" valign=\"top\" style=\"width:.95in;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;\">\n<p align=\"center\" style=\"margin-bottom:.0001pt;text-align:center;line-height:normal;\">Image Size, Extent<\/p>\n<\/td>\n<td width=\"162\" style=\"width:121.5pt;border:solid windowtext 1.0pt;border-left:none;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\">Example 1<\/p>\n<\/td>\n<td width=\"246\" style=\"width:184.5pt;border:solid windowtext 1.0pt;border-left:none;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\">Example 2<\/p>\n<\/td>\n<td width=\"139\" style=\"width:1.45in;border:solid windowtext 1.0pt;border-left:none;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\">Example 3<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\" valign=\"top\" style=\"width:.95in;border:solid windowtext 1.0pt;border-top:none;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">&lt;<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:#a31515;\">a:ext<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<\/td>\n<td width=\"162\" valign=\"top\" style=\"width:121.5pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cx<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">2400000<\/span>&#8220;<\/span><\/p>\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cy<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">1600000<\/span>&#8220;<span style=\"color:blue;\"> \/&gt;<\/span><\/span><\/p>\n<\/td>\n<td width=\"246\" valign=\"top\" style=\"width:184.5pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cx<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">2400000<\/span>&#8220;<\/span><\/p>\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cy<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">800000<\/span>&#8220;<span style=\"color:blue;\"> \/&gt;<\/span><\/span><\/p>\n<\/td>\n<td width=\"139\" valign=\"top\" style=\"width:1.45in;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cx<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">2400000<\/span>&#8220;<\/span><\/p>\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cy<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">1600000<\/span>&#8220;<span style=\"color:blue;\"> \/&gt;<\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\" valign=\"top\" style=\"width:.95in;border:solid windowtext 1.0pt;border-top:none;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">&lt;<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:#a31515;\">wp:extent <\/span><\/p>\n<\/td>\n<td width=\"162\" valign=\"top\" style=\"width:121.5pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cx<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">2400000<\/span>&#8220;<br \/>\n  <span style=\"color:red;\">cy<\/span><span style=\"color:blue;\">=<\/span>&#8220;<span style=\"color:blue;\">1600000<\/span>&#8220;<span style=\"color:blue;\"> \/&gt;<\/span><\/span><\/p>\n<\/td>\n<td width=\"246\" valign=\"top\" style=\"width:184.5pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cx<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">2400000<\/span>&#8220;<br \/>\n  <span style=\"color:red;\">cy<\/span><span style=\"color:blue;\">=<\/span>&#8220;<span style=\"color:blue;\">1600000<\/span>&#8220;<span style=\"color:blue;\"> \/&gt;<\/span><\/span><\/p>\n<\/td>\n<td width=\"139\" valign=\"top\" style=\"width:1.45in;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;\">\n<p style=\"margin-bottom:.0001pt;line-height:normal;\"><span style=\"font-size:9.5pt;font-family:Consolas;color:red;\">cx<\/span><span style=\"font-size:9.5pt;font-family:Consolas;color:blue;\">=<\/span><span style=\"font-size:9.5pt;font-family:Consolas;\">&#8220;<span style=\"color:blue;\">1200000<\/span>&#8220;<br \/>\n  <span style=\"color:red;\">cy<\/span><span style=\"color:blue;\">=<\/span>&#8220;<span style=\"color:blue;\">800000<\/span>&#8220;<span style=\"color:blue;\"> \/&gt;<\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Notice in Example 2 that when the image size is smaller than<br \/>\nthe space reserved for it (extent), then the space is left unfilled.&nbsp; And when<br \/>\nthe extent dimensions are smaller than the image size, the image is squeezed<br \/>\ninto the extent space, as shown in Example 3. <\/p>\n<p>After this image element has been instantiated, it is<br \/>\ninserted between the bookmark start and end elements. <\/p>\n<h2>Move the Bookmark<\/h2>\n<p>The client requested to be able to insert multiple images at<br \/>\nthe same bookmark.&nbsp; Because the image is inserted between w:bookmarkStart and<br \/>\nw:bookmarkEnd, one of these needed to be moved adjacent to the other.&nbsp;<br \/>\nOtherwise the current image would be replaced by the new one. &nbsp;By moving the w:bookmarkEnd<br \/>\nto after the w:bookmarkStart and before the image markup, the next image added<br \/>\nvia the method call to the same bookmark moves the existing image(s) to the right.<\/p>\n<p>One important point about bookmark names in Word is that<br \/>\nbookmark names are treated as case-insensitive within Word.&nbsp; That is, you<br \/>\ncannot create bookmarks by name \u201cA\u201d and \u201ca\u201d; only one will be accepted.&nbsp;&nbsp; So<br \/>\nwhen we work with bookmarks within code, we convert the bookmark name to<br \/>\nuppercase to eliminate case-sensitivity.&nbsp; For example:<\/p>\n<pre class=\"prettyprint\"><span class=\"typ\">XElement<\/span><span class=\"pln\"> bookmark <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> xDoc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Descendants<\/span><span class=\"pun\">(<\/span><span class=\"pln\">W<\/span><span class=\"pun\">.<\/span><span class=\"pln\">bookmarkStart<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp;<\/span><span class=\"pun\">.<\/span><span class=\"typ\">FirstOrDefault<\/span><span class=\"pun\">(<\/span><span class=\"pln\">d <\/span><span class=\"pun\">=&gt;<\/span><span class=\"pln\"> <br>&nbsp; &nbsp; &nbsp; &nbsp;<\/span><span class=\"pun\">((<\/span><span class=\"kwd\">string<\/span><span class=\"pun\">)<\/span><span class=\"pln\">d<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Attribute<\/span><span class=\"pun\">(<\/span><span class=\"pln\">W<\/span><span class=\"pun\">.<\/span><span class=\"pln\">name<\/span><span class=\"pun\">)).<\/span><span class=\"typ\">ToUpper<\/span><span class=\"pun\">()<\/span><span class=\"pln\"> <\/span><span class=\"pun\">==<\/span><span class=\"pln\"> bookmarkName<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ToUpper<\/span><span class=\"pun\">());<\/span><\/pre>\n<h2>Create a New Part and Stream the Image into that Part<\/h2>\n<p>After adding the image element, the image part is created<br \/>\nand then the image is streamed into that part.&nbsp; In this example, the image to<br \/>\nbe inserted at the bookmark is passed into the method as a Bitmap object: <b>image<\/b>.&nbsp;<br \/>\nThe variable <b>imageFormatForSave<\/b> specifies the format to save the image<br \/>\npart as: e.g., ImageFormat.Png, ImageFormat.Jpeg, etc.&nbsp; <\/p>\n<p>Lastly, the document\u2019s root element is replaced with the new<br \/>\nroot element with the image markup, and then that is put into the<br \/>\nMainDocumentPart.<\/p>\n<pre class=\"prettyprint\"><span class=\"typ\">MainDocumentPart<\/span><span class=\"pln\"> mainPart <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> doc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">MainDocumentPart<\/span><span class=\"pun\">;<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">ImagePart<\/span><span class=\"pln\"> imagePart <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> mainPart<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AddImagePart<\/span><span class=\"pun\">(<\/span><span class=\"typ\">ImageElement<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetImagePartType<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"pln\">imageFormatForSave<\/span><span class=\"pun\">),<\/span><span class=\"pln\"> imageRId<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br><\/span><span class=\"kwd\">using<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"typ\">MemoryStream<\/span><span class=\"pln\"> ms <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">MemoryStream<\/span><span class=\"pun\">())<\/span><span class=\"pln\"><br><\/span><span class=\"pun\">{<\/span><span class=\"pln\"><br>&nbsp; &nbsp; image<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Save<\/span><span class=\"pun\">(<\/span><span class=\"pln\">ms<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> imageFormatForSave<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"kwd\">byte<\/span><span class=\"pun\">[]<\/span><span class=\"pln\"> ba <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> ms<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ToArray<\/span><span class=\"pun\">();<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"kwd\">using<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"typ\">Stream<\/span><span class=\"pln\"> s <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> imagePart<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetStream<\/span><span class=\"pun\">(<\/span><span class=\"typ\">FileMode<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Create<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">FileAccess<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ReadWrite<\/span><span class=\"pun\">))<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; s<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Write<\/span><span class=\"pun\">(<\/span><span class=\"pln\">ba<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> ba<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetUpperBound<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br><\/span><span class=\"pun\">}<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>xDoc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elements<\/span><span class=\"pun\">().<\/span><span class=\"typ\">First<\/span><span class=\"pun\">().<\/span><span class=\"typ\">ReplaceWith<\/span><span class=\"pun\">(<\/span><span class=\"pln\">newRoot<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>doc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">MainDocumentPart<\/span><span class=\"pun\">.<\/span><span class=\"typ\">PutXDocument<\/span><span class=\"pun\">();<\/span><\/pre>\n<p>The sample code is attached.&nbsp; It provides several test cases to show the functionality of the image insertion utility. <\/p>\n<p>Download &#8211; <a href=\"https:\/\/www.ericwhite.com\/blog\/wp-content\/uploads\/2016\/03\/RetrieveBookmarkText.zip\">Example Code<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bookmarks provide a convenient way in WordprocessingML to provide insertion points for various items, such as text, images, etc.&nbsp; Previously, I have outlined how to programmatically retrieve and replace text within a bookmark.&nbsp; In a recent project, a client wanted to use bookmarks as insertion points for one or more images.&nbsp; Using with the replace [&hellip;]<\/p>\n","protected":false},"author":10567,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"_s2mail":"","footnotes":""},"class_list":["post-2890","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/2890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/users\/10567"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/comments?post=2890"}],"version-history":[{"count":1,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/2890\/revisions"}],"predecessor-version":[{"id":2891,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/2890\/revisions\/2891"}],"wp:attachment":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/media?parent=2890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}