如何使用书签

时间:2018-04-25 08:31:01

标签: c# openxml

我有一个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);
    }
}

到目前为止,我已经尝试了很多东西,而我最接近的就是在运行中添加一个中断并在其后添加新文本。但是,我遇到的问题是前一行是以文本在整行上拉伸的方式证明的 - 例如如果只有两个单词存在,那么一个单词在doc的左侧是合理的,而第二个单词在右侧。如果我附加多个文本行,那么只有最后一个是正确的。

我添加了这样的多行:

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 :(得分:0)

我在这里发布问题后找到了解决方案。我使用的方法是使用段落。简而言之,我构建了多个段落,每行一个,并根据需要将它们添加到书签中。这是示例代码:

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);

上述代码可以重复多次,并在书签后添加段落。