使用aspose.word向word中插入书签

一:获取到内容的node开始和结束node,然后比较要标记的内容在这个段落中的位置

public static bool AddBookMark(ref Aword.Document doc, Aword.Node startNode, Aword.Node EndNode, string strBookMarkKind, int index, out string strError)
        {
            strError = string.Empty;
            try
            {
                //添加BookMark
                Aword.DocumentBuilder builder = new Aword.DocumentBuilder(doc);
                builder.MoveTo(startNode);
                string strBookMarkName = string.Empty;
                strBookMarkName = strBookMarkKind + "_" + index.ToString();
                if (index == 0)
                {
                    strBookMarkName = strBookMarkKind;
                }
                builder.StartBookmark(strBookMarkName);
                builder.MoveTo(EndNode);
                builder.EndBookmark(strBookMarkName);
            }
            catch (System.Exception ex)
            {
                strError = "添加BookMark错误!";
                return false;
            }
            return true;

        }

二:比较要标记的内容在这个段落中的run位置,然后确定node的开始和结束

public static bool AddBookMark(Aword.Document doc, Aword.Paragraph para, List listNode, string strMarkName)
        {
            try
            {
                if (listNode.Count > 0)
                {
                    Aword.Node startNode = listNode[0];
                    Aword.Node endNode = listNode[listNode.Count - 1];
                    int startIdx = para.IndexOf(startNode);
                    if (startIdx >= 0)
                    {
                        Aword.BookmarkStart start = new Aword.BookmarkStart(doc, strMarkName);
                        para.InsertBefore(start, startNode);

                        int endIdx = para.IndexOf(endNode);
                        if (endIdx >= 0)
                        {
                            Aword.BookmarkEnd end = new Aword.BookmarkEnd(doc, strMarkName);
                            para.InsertAfter(end, endNode);
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            catch (System.Exception ex)
            {
                return false;
            }
            return true;
        }

三:上述两种都是比较局限,而且都是在不动原文的基础上标,可以把该段内容放入一个新的word中然后,将这段内容细化分割,一个run下面就只有一个字符,这种,然后再去比较,做完之后按照node添加书签,然后再与旧的word中的那段内容替换,当然,这种方式比较麻烦,以后再放上代码

你可能感兴趣的:(aspose.word)