Как добавить новую строку для запуска в C # и OpenXML с выровненным текстом с использованием закладок - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть шаблон Word с закладками, которые я заполняю во время выполнения.Весь текст шаблона уже настроен на выравнивание.Если я добавлю только один фрагмент текста в закладку, тогда все в порядке, но теперь я сталкиваюсь с проблемой, когда одна закладка может содержать несколько строк с разрывами строк между ними.Код, который работает для одного фрагмента текста, находится здесь:

foreach (BookmarkStart bookMarkStart in doc.MainDocumentPart.RootElement.Descendants<BookmarkStart>())
{
    if (bookMarkStart.Name == "Author")
    {
        var id = bookMarkStart.Id.Value;
        var bookmarkEnd = bookMarkEnds.Where(i => i.Id.Value == id).First();
        var runElement = new Run(new Text(author));
        bookmarkEnd.Parent.InsertAfter(runElement, bookmarkEnd);
    }
}

До сих пор я пробовал много вещей, и самое близкое, что я нашел, - это добавить разрыв к бегу и добавить новый текст после него.Однако проблема, с которой я столкнулся, заключается в том, что предыдущая строка выровнена так, что текст растягивается на всю строку - например, если присутствуют только два слова, то одно выровнено с левой стороны документа, а второе - с правой стороны.,Если я добавляю несколько строк текста, то только последняя является правильной.

Я добавляю несколько строк следующим образом:

var id = bookMarkStart.Id.Value;
var bookmarkEnd = bookMarkEnds.Where(i => i.Id.Value == id).First();
var runElement = new Run();
runElement.Append(new Text(text1));
runElement.Append(new Break());
runElement.Append(new Text(text2));
bookmarkEnd.Parent.InsertAfter(runElement, bookmarkEnd);

У кого-нибудь есть идеи, как этого добиться?

1 Ответ

0 голосов
/ 25 апреля 2018

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

ParagraphProperties pProp = new ParagraphProperties();
Justification just = new Justification() { Val = JustificationValues.Both };
pProp.Append(just);
var run = new Run(new Text(slText));
var para = new Paragraph();
para.Append(pProp);
para.Append(run);
bookmark.Parent.InsertAfterSelf(para);

Приведенный выше код можно повторить несколько раз и добавить абзац (ы) после закладки.

...