![]() |
Enterprise Systems »
Office Development »
Microsoft Word
Intermediate
License: The Code Project Open License (CPOL)
Adding footnotes to a Word document programatically (MS Office 2007 Word)By Abey ThomasThis is an article about adding footnotes to a Word document (MS Office 2007) programmatically. |
XML, C# 2.0, C# 3.0, Office, .NET 2.0, WinXP, .NET 3.0, .NET 3.5, Visual Studio (VS2005, VS2008), COM+, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
This is an article about adding footnotes to a Word document programmatically. I had this as one of my requirements while generating Word documents dynamically, and I really struggled to implement it, as well as to find some help online. So I thought I would share my experience with the community about this so that someone might find this helpful.
I assume the readers of this article should have knowledge of how to view a Word document (MS Office 2007) archive.
Let's assume some text in a Word document, say template.docx:
This is a sample text <FN1>
I assume that the Word document contains this text (already), and the tag <FN1>, should be replaced with superscript "1", and there should be a corresponding footnote in the footer section. The XML representation of this text in document.xml looks like this (should be in this form):
<w:p w:rsidR="00F54CB0" w:rsidRDefault="0016203E">
<w:r>
<w:t>Sample Text with footnote </w:t>
</w:r>
<w:r>
<w:t><FN1></w:t>
</w:r>
</w:p>
Note that the tag <FN1> should be in a separate <w:r>><w:t> node. I assume this as a prerequisite for this logic to work. (This can be done manually in document.xml, or it should be done programmatically.)
These things can be done either manually, or by opening the Word document and adding the footer section to the document. Once this is done, all the above changes will be automatically done.
I have attached the sample code, along with a sample document (template.docx) in which there is only an <FN1> raw tag, and all the above prerequisites are met.
Adding footnotes programmatically to the document consists of two steps:
<FN1> tag with the footnote node in document.xml (which consists of a superscript 1, and its references to footernotes.xml).Step 1 consists of creating a <w:r> <w:t> node which corresponds to the Word footnotes syntax.
This is done in the CreateFootNoteNode(..) method in the code:
<w:r>
<w:rpr>
<w:rStyle w:val="FootnoteReference" />
<w:rpr>
<w:footnoteReference w:customMarkFollows="1" w:id="3" />
<w:t>1</w:t>
</w:r>
Step 2 consists of creating the footnotes related references in Footernotes.xml. This step creates a <footnote> node which consists of the superscript number and the actual footnote. The generated node should look something like this:
<w:footnote w:id="3">
<w:p>
<w:pPr>
<w:pStyle w:val="FootnoteText" />
</w:pPr>
<w:r>
<w:rpr>
<w:rStyle w:val="FootnoteReference" />
</w:rpr>
<w:t>1</w:t>
</w:r>
<w:r>
<w:t>This is a footnote</w:t>
</w:r>
</w:p>
</w:footnote>
Once these two nodes are created, the footnote is ready. document.xml and footernotes.xml should be saved.
I have put a sample document with raw tags <fn1> in the bin/debug folder of the solution. Once the program is executed once, the document will reflect the footnotes correctly.
This section briefly explains the prerequisites in the following files:
<Override PartName="/word/endnotes.xml"
contentType="application/vnd.openxmlformats-officedocument.
wordprocessingml.endnotes+xml"/>
<Override PartName="/word/footnotes.xml"
ContentType="application/vnd.openxmlformats-officedocument.
wordprocessingml.footnotes+xml"/>
<Relationship Id="rId6"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"
Target="endnotes.xml"/>
<Relationship Id="rId7"
Type="http://schemas.openxmlformats.org/
officeDocument/2006/relationships/footnotes"
Target="footnotes.xml"/>
I have uploaded a sample application here, where the whole operation of dynamically creating footnotes in a Word document is done. It contains a file "sample template\template.docx". This file has to be put into the bin/debug folder of the application. Before executing, have a look at the document. It will contain the raw footnote placeholders. Once the program is executed, the placeholder is replaced by the footnote number, and the corresponding footnote can be seen in the footer section of the document.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 2 Oct 2008 Editor: Smitha Vijayan |
Copyright 2008 by Abey Thomas Everything else Copyright © CodeProject, 1999-2009 Web18 | Advertise on the Code Project |