A common business need: Generating server-side documents on the fly

I gathered a list of common Open XML questions related to programmability:

  1. What are the Open XML File Formats and what can I do with them?

  2. Can you show me the internal structure of a Word 2007 document?

  3. What are WordprocessingML, SpreadsheetML, PresentationML, and DrawingML?

  4. Do you have a .NET API that I can use to generate documents programmatically (server-side)?

  5. What is the architecture of a server-side OBA document generation solution?

  6. How can I generate a document programmatically and have more control over document content?

  7. How do you add images to an Open XML document?

  8. How can I pull data from my data source and create a table in a document?

  9. How can I add styles and format to my document content?

  10. What about compatibility with previous versions of Office?

Office Business Applications + Open XML File Formats

When you are trying to create a document assembly solution and you are want to understand how you can use the Open XML File Formats to generate a document programmatically, you may be faced to some of the previous questions. All this questions have been answered in multiple MSDN articles, SDKs, blogs, trainings, forums, and newsgroups. However, I am the kind of person that loves end-to-end documentation and code samples that take you from zero to a working solution. We all have limited time to learn new technologies and walkthrough articles and code sample downloads are always a nice option.

Some time ago I tried to do the same thing and I blogged to show you how to generate a document using a document template, content controls, and XML mapping. I also created a little video and article that shows how to bind custom xml to a document template. This approach is great when you are trying to replace placeholder data in document templates like an invoice or contract. However, your business needs may be different and you may want to have more control over document content and formatting. In that case a better approach would be to manipulate the WordProcessingML content stored in different document parts.

I wrote a new article that helps answer the Open XML questions listed in this blog entry. I split the article in two parts and a code sample download. I start by discussing all the theory and basic concepts you need to learn to work with the Open XML File Formats. For example, I talk about Open XML Package Architecture, WordprocessingML basics, the Open XML object model, and the conceptual architecture of a document integration solution.

The second part explains all the coding that needs to happen to generate a simple sales document from scratch. I show you how to deal with images, tables, styles, and formatting. I also show how to create a helper class that pulls data from your line of business systems (in this case the AdventureWorks sample database to keep the LOB piece as simple as possible), and a helper class that uses the Open XML object model and WordprocessingML to create a document.

You can find the articles and code samples here:

Many thanks go to Doug Mahugh, Wouter van Vugt, and Frank Rice for sharing all their knowledge and helping me put this together. I hope this helps you get started with custom document generation with Open XML.


Comments (11)

  1. Brena says:

    Hi Erika – Thank you thank you thank you!

  2. Wouter says:

    It’s looking great Erika, nice!

  3. Doug Mahugh says:

    Erika Ehrli has a great post on "Building Server-Side Document Generation Solutions" that shows how to

  4. Via Doug . One of the great features of the New OpenXML file formats used by Office 2007 is their server-side

  5. Via Doug . One of the great features of the New OpenXML file formats used by Office 2007 is their server

  6. Erika has a post on OpenXML integration.Check it out. Tags: OBA OpenXML

  7. iFX says:

    OpenXML Integration into Applications

  8. Jan Novak, Czech Republic says:

    Hi, I read on Slashdot and other reliable sources that in both Sweden and Germany your company, Erika, is _cheating_ in order to push OOXML into ISO standard. Format name (OOXML) resambling Open Office product is pitiful on its own. As any programmer trying to make convertor for this format knows, this whole thing makes no sense and is only ment to extend MS monopoly, not to help sharing of documents among various applications. As another guy said "two ways to represent the date – one of them representing dates between 1900 and 20000 and another one to represent dates between 1904 and 20000 where the second one is a complete subset of the first one are dangerous to the mental health of the reader.".

  9. Brena, Wouter, Andrew, and Mike: Thanks for the nice comments and trackbacks. I am glad to see you find this useful.

    Jan, you should follow-up Doug’s blog post:


    I am sure you will find his blog quite useful :).

  10. An alternative towards building your own document composition engine is to purchase an out of the box solution. I work for Aia Software and we deliver such solutions. Many of the articles on my blog http://www.datatextmerge.com are related to the question make or buy – there may be information on it which is relevant for you.

Skip to main content