添加一个没有页眉和页脚OpenXML的新页面

时间:2016-08-02 10:34:59

标签: c# ms-word openxml word-addins

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

下面的代码是this 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);

2 个答案:

答案 0 :(得分:0)

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

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

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

  1. 创建新段落
  2. 从Body获取最后一部分属性并将其克隆插入新段落(通过执行:secProp.Clone(true))
  3. 从正文中删除最后一部分属性
  4. 将新创建的段落添加到正文
  5. 将带分页符的新段落添加到正文中(新段落(new Run(new Break(){Type = BreakValues.Page})))
  6. 使用您在代码中已经执行的新空白部分属性添加新段落
  7. 有关详细信息,请参阅此处:http://officeopenxml.com/WPsection.php

答案 1 :(得分:0)

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

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

<块引用>

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

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

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