Заменить разрыв раздела на разрыв страницы
Я пытаюсь объединить некоторые текстовые документы в один текстовый документ, используя 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 и т. д.), что абзацы, следующие за этим тегом, будут отображаться на новой странице.