BookmarkStart

BookmarkStart class

表示 Word 文档中书签的开始。

public class BookmarkStart : Node

构造函数

姓名 描述
BookmarkStart(DocumentBase, string) 初始化BookmarkStart类.

特性

姓名 描述
Bookmark { get; } 获取封装此书签开始和结束的外观对象。
CustomNodeId { get; set; } 指定自定义节点标识符。
virtual Document { get; } 获取该节点所属的文档。
virtual IsComposite { get; } 如果此节点可以包含其他节点,则返回 true。
Name { get; set; } 获取或设置书签名称。
NextSibling { get; } 获取紧跟此节点的节点。
override NodeType { get; } 返回BookmarkStart.
ParentNode { get; } 获取此节点的直接父节点。
PreviousSibling { get; } 获取紧接在此节点之前的节点。
Range { get; } 返回一个 范围表示此节点中包含的文档部分的对象。

方法

姓名 描述
override Accept(DocumentVisitor) 接受访客。
Clone(bool) 创建节点的副本。
GetAncestor(NodeType) 获取指定的第一个祖先NodeType.
GetAncestor(Type) 获取指定对象类型的第一个祖先。
override GetText() 返回一个空字符串。
NextPreOrder(Node) 根据前序树遍历算法获取下一个节点。
PreviousPreOrder(Node) 根据前序树遍历算法获取上一个节点。
Remove() 从父级中移除自身。
ToString(SaveFormat) 将节点的内容导出为指定格式的字符串。
ToString(SaveOptions) 使用指定的保存选项将节点的内容导出为字符串。

评论

Word 文档中的完整书签由BookmarkStart 和一个匹配的BookmarkEnd具有相同的书签名称。

BookmarkStartBookmarkEnd只是 document 中的标记,用于指定书签的开始和结束位置。

使用Bookmark类作为“门面”以将 bookmark 作为单个对象使用。

例子

展示如何添加书签和更新其内容。

public void CreateUpdateAndPrintBookmarks()
{
    // 创建一个包含三个书签的文档,然后使用自定义文档访问者实现来打印其内容。
    Document doc = CreateDocumentWithBookmarks(3);
    BookmarkCollection bookmarks = doc.Range.Bookmarks;

    PrintAllBookmarkInfo(bookmarks);

    // 书签集合中可以通过索引或名称访问书签,并且可以更新它们的名称。
    bookmarks[0].Name = $"{bookmarks[0].Name}_NewName";
    bookmarks["MyBookmark_2"].Text = $"Updated text contents of {bookmarks[1].Name}";

    // 再次打印所有书签以查看更新的值。
    PrintAllBookmarkInfo(bookmarks);
}

/// <summary>
/// 创建一个具有给定数量书签的文档。
/// </summary>
private static Document CreateDocumentWithBookmarks(int numberOfBookmarks)
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    for (int i = 1; i <= numberOfBookmarks; i++)
    {
        string bookmarkName = "MyBookmark_" + i;

        builder.Write("Text before bookmark.");
        builder.StartBookmark(bookmarkName);
        builder.Write($"Text inside {bookmarkName}.");
        builder.EndBookmark(bookmarkName);
        builder.Writeln("Text after bookmark.");
    }

    return doc;
}

/// <summary>
/// 使用迭代器和访问者打印集合中每个书签的信息。
/// </summary>
private static void PrintAllBookmarkInfo(BookmarkCollection bookmarks)
{
    BookmarkInfoPrinter bookmarkVisitor = new BookmarkInfoPrinter();

    // 获取集合中的每个书签以接受将打印其内容的访问者。
    using (IEnumerator<Bookmark> enumerator = bookmarks.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            Bookmark currentBookmark = enumerator.Current;

            if (currentBookmark != null)
            {
                currentBookmark.BookmarkStart.Accept(bookmarkVisitor);
                currentBookmark.BookmarkEnd.Accept(bookmarkVisitor);

                Console.WriteLine(currentBookmark.BookmarkStart.GetText());
            }
        }
    }
}

/// <summary>
/// 将每个访问过的书签的内容打印到控制台。
/// </summary>
public class BookmarkInfoPrinter : DocumentVisitor
{
    public override VisitorAction VisitBookmarkStart(BookmarkStart bookmarkStart)
    {
        Console.WriteLine($"BookmarkStart name: \"{bookmarkStart.Name}\", Contents: \"{bookmarkStart.Bookmark.Text}\"");
        return VisitorAction.Continue;
    }

    public override VisitorAction VisitBookmarkEnd(BookmarkEnd bookmarkEnd)
    {
        Console.WriteLine($"BookmarkEnd name: \"{bookmarkEnd.Name}\"");
        return VisitorAction.Continue;
    }
}

也可以看看