Добавить новую страницу без верхнего и нижнего колонтитула OpenXML

Я использую следующий код для добавления новой страницы в существующий документ. Он работает, но только что созданная страница копирует свойства старой страницы (верхний и нижний колонтитулы). Я хотел добавить / добавить новую страницу без верхнего и нижнего колонтитула к существующей документ. Пожалуйста, предложите, что здесь не так. Есть ли способ получить последнюю страницу и удалить верхний и нижний колонтитулы

Ниже код дает этот 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 ответа

Я знаю, что это очень старый вопрос, но он все еще не решен и, возможно, кто-то еще ищет ответ. Причина в том, что Word автоматически устанавливает верхний и нижний колонтитулы на «заимствовать из предыдущего», если это не первый раздел в документе. Даже если не заданы верхний и нижний колонтитулы.

См. Документацию класса headerreference (https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.headerreference):

Если какой-либо тип заголовка для данного раздела опущен, применяются следующие правила.

  • Если для заголовка первой страницы не указано headerReference и указан элемент titlePg, то заголовок первой страницы должен быть унаследован от предыдущего раздела или, если это первый раздел в документе, должен быть создан новый пустой заголовок. Если элемент titlePg не указан, то заголовок первой страницы не должен отображаться, и вместо него должен использоваться заголовок нечетной страницы.
  • Если заголовок четной страницы не указан и указан элемент evenAndOddHeaders, заголовок четной страницы должен быть унаследован от предыдущего раздела или, если это первый раздел в документе, должен быть создан новый пустой заголовок. Если элемент evenAndOddHeaders не указан, то заголовок четной страницы не должен отображаться, а вместо него должен использоваться заголовок нечетной страницы.
  • Если заголовок нечетной страницы не указан, то заголовок четной страницы должен быть унаследован от предыдущего раздела или, если это первый раздел в документе, должен быть создан новый пустой заголовок.

Вот почему верхний и нижний колонтитулы все еще отображаются на последней странице.

Верхний и нижний колонтитулы связаны с разделами, используя отношения, как это:

<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 Break(){ Type = BreakValues.Page })))
  6. Добавьте новый абзац с новыми пустыми свойствами раздела, как вы уже сделали в своем коде

Для получения дополнительной информации см. Здесь: http://officeopenxml.com/WPsection.php

Другие вопросы по тегам