使用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<Aword.Node> 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中的那段内容替换,当然,这种方式比较麻烦,以后再放上代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值