You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Xml.Linq;
  5. using System.IO.Packaging;
  6. using System.Collections.ObjectModel;
  7. namespace Novacode
  8. {
  9. public class Header : Container
  10. {
  11. public bool PageNumbers
  12. {
  13. get
  14. {
  15. return false;
  16. }
  17. set
  18. {
  19. XElement e = XElement.Parse
  20. (@"<w:sdt xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
  21. <w:sdtPr>
  22. <w:id w:val='157571950' />
  23. <w:docPartObj>
  24. <w:docPartGallery w:val='Page Numbers (Top of Page)' />
  25. <w:docPartUnique />
  26. </w:docPartObj>
  27. </w:sdtPr>
  28. <w:sdtContent>
  29. <w:p w:rsidR='008D2BFB' w:rsidRDefault='008D2BFB'>
  30. <w:pPr>
  31. <w:pStyle w:val='Header' />
  32. <w:jc w:val='center' />
  33. </w:pPr>
  34. <w:fldSimple w:instr=' PAGE \* MERGEFORMAT'>
  35. <w:r>
  36. <w:rPr>
  37. <w:noProof />
  38. </w:rPr>
  39. <w:t>1</w:t>
  40. </w:r>
  41. </w:fldSimple>
  42. </w:p>
  43. </w:sdtContent>
  44. </w:sdt>"
  45. );
  46. Xml.AddFirst(e);
  47. PageNumberParagraph = new Paragraph(Document, e.Descendants(XName.Get("p", DocX.w.NamespaceName)).SingleOrDefault(), 0);
  48. }
  49. }
  50. public Paragraph PageNumberParagraph;
  51. internal Header(DocX document, XElement xml, PackagePart mainPart):base(document, xml)
  52. {
  53. this.mainPart = mainPart;
  54. }
  55. public override Paragraph InsertParagraph()
  56. {
  57. Paragraph p = base.InsertParagraph();
  58. p.PackagePart = mainPart;
  59. return p;
  60. }
  61. public override Paragraph InsertParagraph(int index, string text, bool trackChanges)
  62. {
  63. Paragraph p = base.InsertParagraph(index, text, trackChanges);
  64. p.PackagePart = mainPart;
  65. return p;
  66. }
  67. public override Paragraph InsertParagraph(Paragraph p)
  68. {
  69. p.PackagePart = mainPart;
  70. return base.InsertParagraph(p);
  71. }
  72. public override Paragraph InsertParagraph(int index, Paragraph p)
  73. {
  74. p.PackagePart = mainPart;
  75. return base.InsertParagraph(index, p);
  76. }
  77. public override Paragraph InsertParagraph(int index, string text, bool trackChanges, Formatting formatting)
  78. {
  79. Paragraph p = base.InsertParagraph(index, text, trackChanges, formatting);
  80. p.PackagePart = mainPart;
  81. return p;
  82. }
  83. public override Paragraph InsertParagraph(string text)
  84. {
  85. Paragraph p = base.InsertParagraph(text);
  86. p.PackagePart = mainPart;
  87. return p;
  88. }
  89. public override Paragraph InsertParagraph(string text, bool trackChanges)
  90. {
  91. Paragraph p = base.InsertParagraph(text, trackChanges);
  92. p.PackagePart = mainPart;
  93. return p;
  94. }
  95. public override Paragraph InsertParagraph(string text, bool trackChanges, Formatting formatting)
  96. {
  97. Paragraph p = base.InsertParagraph(text, trackChanges, formatting);
  98. p.PackagePart = mainPart;
  99. return p;
  100. }
  101. public override Paragraph InsertEquation(String equation)
  102. {
  103. Paragraph p = base.InsertEquation(equation);
  104. p.PackagePart = mainPart;
  105. return p;
  106. }
  107. public override ReadOnlyCollection<Paragraph> Paragraphs
  108. {
  109. get
  110. {
  111. ReadOnlyCollection<Paragraph> l = base.Paragraphs;
  112. foreach (var paragraph in l)
  113. {
  114. paragraph.mainPart = mainPart;
  115. }
  116. return l;
  117. }
  118. }
  119. public override List<Table> Tables
  120. {
  121. get
  122. {
  123. List<Table> l = base.Tables;
  124. l.ForEach(x => x.mainPart = mainPart);
  125. return l;
  126. }
  127. }
  128. public List<Image> Images
  129. {
  130. get
  131. {
  132. PackageRelationshipCollection imageRelationships = mainPart.GetRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/image");
  133. if (imageRelationships.Count() > 0)
  134. {
  135. return
  136. (
  137. from i in imageRelationships
  138. select new Image(Document, i)
  139. ).ToList();
  140. }
  141. return new List<Image>();
  142. }
  143. }
  144. public new Table InsertTable(int rowCount, int columnCount)
  145. {
  146. if (rowCount < 1 || columnCount < 1)
  147. throw new ArgumentOutOfRangeException("Row and Column count must be greater than zero.");
  148. Table t = base.InsertTable(rowCount, columnCount);
  149. t.mainPart = mainPart;
  150. return t;
  151. }
  152. public new Table InsertTable(int index, Table t)
  153. {
  154. Table t2 = base.InsertTable(index, t);
  155. t2.mainPart = mainPart;
  156. return t2;
  157. }
  158. public new Table InsertTable(Table t)
  159. {
  160. t = base.InsertTable(t);
  161. t.mainPart = mainPart;
  162. return t;
  163. }
  164. public new Table InsertTable(int index, int rowCount, int columnCount)
  165. {
  166. if (rowCount < 1 || columnCount < 1)
  167. throw new ArgumentOutOfRangeException("Row and Column count must be greater than zero.");
  168. Table t = base.InsertTable(index, rowCount, columnCount);
  169. t.mainPart = mainPart;
  170. return t;
  171. }
  172. }
  173. }