Добавить новую страницу без верхнего и нижнего колонтитула 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. Итак, чтобы добавить страницу без верхнего и нижнего колонтитула, вам необходимо:
- Создать новый абзац
- Получить свойства последнего раздела из тела и вставить его клон в новый абзац (выполнив: secProp.Clone(true))
- Удалить свойства последнего раздела из тела
- Добавить вновь созданный абзац в основной текст
- Добавить новый абзац с разрывом страницы к телу (новый абзац (новый прогон (new Break(){ Type = BreakValues.Page })))
- Добавьте новый абзац с новыми пустыми свойствами раздела, как вы уже сделали в своем коде
Для получения дополнительной информации см. Здесь: http://officeopenxml.com/WPsection.php