添加不带页眉和页脚的新页面OpenXML

本文关键字:新页面 OpenXML 添加 | 更新日期: 2023-09-27 17:59:47

我正在使用以下代码在现有文档中添加新页面。它正在工作,但新创建的页面复制了旧页面(页眉和页脚)的属性。我想在现有文档中添加/附加一个没有页眉和页脚的新页面。请指出这里出了什么问题。有什么方法可以获得最后一页并删除页眉和页脚吗

下面的代码给出了这个xml

        Paragraph paragraph = new Paragraph();
        ParagraphProperties paragraphProperties = new ParagraphProperties();
        SectionProperties sectionProperties1 = new SectionProperties();
        SectionType sectionType1 = new SectionType() { Val = SectionMarkValues.NextPage };
        //sectionType1.Descendants<FooterReference>();
        sectionProperties1.Append(sectionType1);
        paragraphProperties.Append(sectionProperties1);
        paragraph.Append(paragraphProperties);
        mainPart.Document.Body.InsertAfter(paragraph, mainPart.Document.Body.LastChild);

添加不带页眉和页脚的新页面OpenXML

页眉和页脚使用关系与节连接,如下所示:

<w:sectPr>
. . .
<w:footerReference r:id="rId10" w:type="default"/>
. . .
</w:sectPr>

因此,为了从节中删除页眉/页脚,需要从SectionProperties元素中删除它们。对于除最后一节外的所有节,SectionProperties元素都存储为节中最后一段的子元素。对于最后一个部分,SectionProperties存储为主体元素的子元素。因此,为了添加没有页眉和页脚的页面,您需要:

  1. 创建新段落
  2. 从正文中获取最后一节的属性,并将其克隆插入到新段落中(通过执行:secProp.clone(true))
  3. 从正文中删除最后一个截面属性
  4. 将新创建的段落添加到正文
  5. 在正文中添加带分页符的新段落(新段落(new Run(new break(){Type=BreakValues.page}))
  6. 添加具有新的空节属性的新段落,就像您在代码中所做的那样

有关更多信息,请参阅此处:http://officeopenxml.com/WPsection.php

我知道这是一个非常古老的问题,但它仍然没有解决,也许其他人正在寻找答案。其原因是Word自动将页眉和页脚设置为"0";取自之前的";如果它不是文档中的第一部分。即使没有设置页眉和页脚。

参见头引用类文档(https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.headerreference):

如果给定章节省略了任何类型的标题,则应适用以下规则。

  • 如果没有指定第一个页眉的页眉引用,并且指定了titlePg元素,则第一个页眉应继承自上一节,或者,如果这是文档中的第一节,则应创建一个新的空白页眉。如果没有指定titlePg元素,则不应显示第一页的页眉,而应使用奇数页的页眉
  • 如果没有指定偶数页头的页眉引用,并且指定了evenAndOddHeaders元素,则偶数页头应从上一节继承,或者,如果这是文档中的第一节,则应创建一个新的空白页眉。如果未指定evenAndOddHeaders元素,则不应显示偶数页头,而应在其位置使用奇数页头
  • 如果没有指定奇数页头的页眉引用,则偶数页头应从上一节继承,或者,如果这是文档中的第一节,则应创建新的空白页眉

所以这就是为什么页眉和页脚仍然显示在最后一页的原因。