Introduction
This article is about the details of adding an image to a Word document programmatically.
Background
Let us assume a sample document which contains an image placeholder with some tag value. For those who know how to add an image placeholder to a Word document, they can skip the next portion, and directly look at the implementation details.
How To Add an Image Placeholder to a Word Document
- Open a Word document.
- Go to the 'Developer' tab.
- Click on the icon which says "Picture Content Control".
- Once the icon is clicked, an image placeholder is added to the Word document. Select the placeholder, and click "properties" button next to the icon.
This will open up the window "Content Control Properties". - Add a title and the tag name value. The tag name of the image place holder used in this article source code is
ImagePlaceHolder1
. - Now save the document and then close it.
We now have a document with an image placeholder.
I have uploaded a sample Word document with all this done. It can be found in the DocxImages\DocxImages\SampleTemplate folder.
Now this is just a place holder. Our requirement is to embed an image (of our choice) at run time to this place holder. The remaining part of the article deals with this issue.
Embedding an Image to a Placeholder on the Fly
Now we have the template Word document. Assume that we have an image file already. For the sake of simplicity, I am assuming a static image file which is already available with me. In real time scenarios, it can be dynamically created images like charts, etc.
I have placed both the template and the sample image in the programs bin/debug folder.
Before going into the implementation details, let me give you some fundamentals.
- In the Word 2007 archive, there is a folder media where all the image files are stored.
- Also, every image is described by a relationship id. This number along with the image path is described in the file word\_rels\document.xml.rels.
- The main document XML file, i.e. document.xml will contain a node "" which describes the image placeholder. The relationship id will be referred in this node.
Implementation Details
With what is said above, embedding an image on the fly is a very easy process. It can be summarized in three points:
- Find the Image tag node: This node is described in the document.xml by node. The document.xml should be searched for this node with tag name using
XPathNodeIterator
. - Find the relationship id of the image node: Once the image placeholder node is identified, the relationship id of this node should be identified. The relationship id is found as a part of the node attribute.
- The image referred to by the relationship id should be replaced by our new image: Once the image relationship id is found, the corresponding image in the media folder should be replaced with our new image.
The source code of the whole process is uploaded with this article and can be found here. Put the sample template document and the sample image in the bin/debug folder of the program, and execute it.
History
- 6th October, 2008: Initial post