Article by Mallika Biswas, Sonata Software Limited
This article explains how to delete footnotes and endnotes from an existing word document using System.IO.Packaging API in C# project.
Steps to be followed:
1. Create a new C# project. Go to references, add the WindowsBase.dll.
· Go to Add reference dialog box and go to browse tab.
· From C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 add WindowsBase.dll
2. Import the namespace:
using System.IO.Packaging
3. Open the word document from where footnotes and endnotes to be removed.
pack =Package.Open(filepath,FileMode.Open, FileAccess.ReadWrite);
4. Get the main document part.
foreach (System.IO.Packaging.PackageRelationship relationship in pack.GetRelationshipsByType(documentRelationshipType))
{
documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri);
documentPart = pack.GetPart(documentUri);
break;//only one part
}
5. Load the document.xml file.
xdoc.Load(documentPart.GetStream());
6. Search for the “w:footnotereference” and “w:endnotereference” element in document.xml.
XmlNodeList footnodes = xdoc.SelectNodes("//" + footref, nsManager);
if (footnodes.Count ==0 && endnotes.Count==0)
MessageBox.Show("no footnotes and endnotes to remove");
7. Remove footnotereference and endnotereference element from document.xml:
foreach (XmlNode footnode in footnodes)
XmlNode pnode = footnode.ParentNode;
pnode.RemoveChild(footnode);
foreach (XmlNode endnote in endnotes)
XmlNode enode = endnote.ParentNode;
enode.RemoveChild(endnote);
8. Remove footnote part and relationship from the document part.
foreach (System.IO.Packaging.PackageRelationship footrels in documentPart.GetRelationshipsByType(footnoterels))
Uri footnoteuri = PackUriHelper.ResolvePartUri(documentUri, footrels.TargetUri);
footnoteids[no2] = footrels.Id;//here ids are taken for deleting relationship//
++no2;
pack.DeletePart(footnoteuri);
pack.Flush();
for (int i = 0; i < no2; i++)
documentPart.DeleteRelationship(footnoteids[i]);
9. Remove endnote part and relationship from the document part.
foreach (System.IO.Packaging.PackageRelationship endrels in documentPart.GetRelationshipsByType(endnoterels))
Uri endnoteuri = PackUriHelper.ResolvePartUri(documentUri, endrels.TargetUri);
endnoteids[no] = endrels.Id;
++no;
pack.DeletePart(endnoteuri);
for (int i = 0; i < no; i++)
documentPart.DeleteRelationship(endnoteids[i]);
10. Save the document part.
xdoc.Save(documentPart.GetStream(FileMode.Create, FileAccess.Write));
11.Get the settings part from the document part.
foreach (System.IO.Packaging.PackageRelationship setrels in documentPart.GetRelationshipsByType(settingsrels))
settingsuri = PackUriHelper.ResolvePartUri(documentUri, setrels.TargetUri);
settingspart = pack.GetPart(settingsuri);
break;
12. Load the settings.xml
setdoc.Load(settingspart.GetStream());
13. Remove “w:footnotePr” and “w:endnotePr” from settings.xml part.
foreach (System.Xml.XmlNode docfootnode in docfootnodes)
XmlNode parentNode = docfootnode.ParentNode;
parentNode.RemoveChild(docfootnode);
foreach (System.Xml.XmlNode endnode in endnodes)
XmlNode parentNode2 = endnode.ParentNode;
parentNode2.RemoveChild(endnode);
14. Save the part and close the package.
setdoc.Save(settingspart.GetStream());
pack.close();
This sample demo demonstates use of System.IO.Packaging API to delete footnotes and end notes using C# project. The example demo is attached with the article as a zip file.