Заменить разрыв раздела на разрыв страницы

Я пытаюсь объединить некоторые текстовые документы в один текстовый документ, используя DocumentBuilder из OpenXml Powertools. Это код, используемый для слияния:

var sources = new List<Source>();
                foreach (var doc in documents)
                {
                    var wmlDoc = new WmlDocument(doc.Path);

                    sources.Add(new Source(wmlDoc, doc.PageBreak));
                }

                var newDestinationDocument = DocumentBuilder.BuildDocument(sources);

Каждый объект из documents содержит путь к документу и bool, который говорит, хочу ли я вставить разрыв страницы после документа.

Этот код работает, но проблема в том, что я получаю разрыв раздела вместо разрыва страницы, я знаю, что второй параметр из Source Конструктор представляет собой раздел Разрыв бул, но вместо этого мне нужен разрыв страницы.

Вот что содержится в итоговом документе после обсуждения:

И мне нужно что-то вроде этого:

Я не могу использовать altChunks, Interop или любая платная библиотека для этого.

1 ответ

Решение

Вы должны добавить

<w:br w:type="page" />

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

Прежде чем применять свой код, попробуйте следующее -

WordprocessingDocument myDoc = WordprocessingDocument.Open(@"file path", true);
MainDocumentPart mainPart = myDoc.MainDocumentPart;
OpenXmlElement last = myDoc.MainDocumentPart.Document
    .Body
    .Elements()
    .LastOrDefault(e => e is Paragraph || e is AltChunk);
last.InsertAfterSelf(new Paragraph(
    new Run(
        new Break() { Type = BreakValues.Page })));
mainPart.Document.Save();

Я выбрал последний абзац файла. Вы можете сделать то же самое для первого документа, а также на основе ваших требований.

Приведенный выше код добавит <w:br w:type="page" /> который добавляет разрыв страницы вручную.

Вы также можете попробовать использовать <w:pageBreakBefore/> к последнему абзацу документов, который указывает клиенту (MS Word и т. д.), что абзацы, следующие за этим тегом, будут отображаться на новой странице.

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