0

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

下面的代码给出了这个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);
4

2 回答 2

0

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

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

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

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

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

于 2016-08-02T16:18:57.363 回答
0

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

请参阅 headerreference 类的文档(https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.headerreference):

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

  • 如果没有指定第一个页眉的 headerReference 并且指定了 titlePg 元素,则第一个页眉应从前一节继承,或者,如果这是文档中的第一节,则应创建一个新的空白页眉。如果未指定 titlePg 元素,则不应显示首页页眉,而应使用奇数页页眉代替。
  • 如果没有指定偶数页标题的 headerReference 并且指定了 evenAndOddHeaders 元素,则偶数页标题应从前一节继承,或者,如果这是文档中的第一节,则应创建一个新的空白页眉。如果未指定 evenAndOddHeaders 元素,则不应显示偶数页头,而应使用奇数页头代替。
  • 如果没有指定奇数页标题的 headerReference,则应从前一节继承偶数页标题,或者,如果这是文档中的第一部分,则应创建新的空白页眉。

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

于 2021-06-18T09:01:38.703 回答