internal void AddHeadersOrFooters(bool b)
{
string element = "ftr";
string reference = "footer";
if (b)
{
element = "hdr";
reference = "header";
}
DeleteHeadersOrFooters(b);
XElement sectPr = mainDoc.Root.Element(w + "body").Element(w + "sectPr");
for (int i = 1; i < 4; i++)
{
string header_uri = string.Format("/word/{0}{1}.xml", reference, i);
PackagePart headerPart = package.CreatePart(new Uri(header_uri, UriKind.Relative), string.Format("application/vnd.openxmlformats-officedocument.wordprocessingml.{0}+xml", reference), CompressionOption.Normal);
PackageRelationship headerRelationship = mainPart.CreateRelationship(headerPart.Uri, TargetMode.Internal, string.Format("http://schemas.openxmlformats.org/officeDocument/2006/relationships/{0}", reference));
XDocument header;
// Load the document part into a XDocument object
using (TextReader tr = new StreamReader(headerPart.GetStream(FileMode.Create, FileAccess.ReadWrite)))
{
header = XDocument.Parse
(string.Format(@"<?xml version=""1.0"" encoding=""utf-16"" standalone=""yes""?>
<w:{0} xmlns:ve=""http://schemas.openxmlformats.org/markup-compatibility/2006"" xmlns:o=""urn:schemas-microsoft-com:office:office"" xmlns:r=""http://schemas.openxmlformats.org/officeDocument/2006/relationships"" xmlns:m=""http://schemas.openxmlformats.org/officeDocument/2006/math"" xmlns:v=""urn:schemas-microsoft-com:vml"" xmlns:wp=""http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"" xmlns:w10=""urn:schemas-microsoft-com:office:word"" xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"" xmlns:wne=""http://schemas.microsoft.com/office/word/2006/wordml"">
<w:p w:rsidR=""009D472B"" w:rsidRDefault=""009D472B"">
<w:pPr>
<w:pStyle w:val=""{1}"" />
</w:pPr>
</w:p>
</w:{0}>", element, reference)
);
}
// Save the main document
using (TextWriter tw = new StreamWriter(new PackagePartStream(headerPart.GetStream(FileMode.Create, FileAccess.Write))))
header.Save(tw, SaveOptions.None);
string type;
switch (i)
{
case 1: type = "default"; break;
case 2: type = "even"; break;
case 3: type = "first"; break;
default: throw new ArgumentOutOfRangeException();
}
sectPr.Add
(
new XElement
(
w + string.Format("{0}Reference", reference),
new XAttribute(w + "type", type),
new XAttribute(r + "id", headerRelationship.Id)
)
);
}
}