• <menu id="w2i4a"></menu>
  • logo Aspose.Words開(kāi)發(fā)者指南

    文檔首頁(yè)>>Aspose.Words開(kāi)發(fā)者指南>>Aspose.Words for .NET查找和替換教程——如何查找和突出顯示文本

    Aspose.Words for .NET查找和替換教程——如何查找和突出顯示文本


    Aspose.Words For .Net是一種高級(jí)Word文檔處理API,用于執(zhí)行各種文檔管理和操作任務(wù)。API支持生成,修改,轉(zhuǎn)換,呈現(xiàn)和打印文檔,而無(wú)需在跨平臺(tái)應(yīng)用程序中直接使用Microsoft Word。此外,API支持所有流行的Word處理文件格式,并允許將Word文檔導(dǎo)出或轉(zhuǎn)換為固定布局文件格式和最常用的圖像/多媒體格式。

    接下來(lái)我們將進(jìn)入“查找和替換”的介紹,在Aspose.Words中如何查找和突出顯示文本。

    >>Aspose.Words for .NET更新至最新版v19.10,歡迎下載體驗(yàn)

    Aspose優(yōu)惠進(jìn)行時(shí)——購(gòu)買(mǎi)Aspose系列產(chǎn)品可享限時(shí)優(yōu)惠!更多活動(dòng)詳情可咨詢?cè)诰€客服哦~


    本文介紹如何使用Aspose.Words以編程方式查找和突出顯示文檔中的單詞或短語(yǔ)。在文檔中簡(jiǎn)單地查找文本字符串并更改其格式似乎很容易,但是主要的困難在于,由于格式問(wèn)題,匹配字符串可能會(huì)分布在多個(gè)文本行中??紤]以下示例。短語(yǔ)“ Hello World!”(如果已格式化)并包含三個(gè)不同的運(yùn)行:Hello為斜體,World為粗體,感嘆號(hào)為常規(guī)文本:

    世界您好

    除了格式化外,文本中間的書(shū)簽還將其分成更多的行。)  上面的示例在Aspose.Words中使用以下對(duì)象表示:

    • Run (Run.Text = “Hello”, Font.Italic = true)

    • Run (Run.Text = “World”, Font.Bold = true)

    • Run (Run.Text = “!”)

    該示例代碼將打開(kāi)一個(gè)文檔,并找到文本“您的文檔”的任何實(shí)例。設(shè)置了替換處理程序,以處理要應(yīng)用于找到的每個(gè)結(jié)果匹配項(xiàng)的邏輯。在這種情況下,結(jié)果運(yùn)行將圍繞文本進(jìn)行拆分,結(jié)果運(yùn)行將突出顯示。下面的示例查找并突出顯示W(wǎng)ord文檔中特定單詞或短語(yǔ)的所有實(shí)例。

    //文檔目錄的路徑
    string dataDir = RunExamples.GetDataDir_FindAndReplace();
    string fileName = "TestFile.doc";
    
    Document doc = new Document(dataDir + fileName);
    
    FindReplaceOptions options = new FindReplaceOptions();
    options.ReplacingCallback = new ReplaceEvaluatorFindAndHighlight();
    options.Direction = FindReplaceDirection.Backward;
    
    //我們希望突出顯示“您的文檔”短語(yǔ)。
    Regex regex = new Regex("your document", RegexOptions.IgnoreCase);
    doc.Range.Replace(regex, "", options);
    
    dataDir = dataDir + RunExamples.GetOutputFilePath(fileName);
    //保存輸出文檔。
    doc.Save(dataDir);
    private class ReplaceEvaluatorFindAndHighlight : IReplacingCallback    
    {    
    /// <summary>    
    /// Aspose.Words為每個(gè)匹配項(xiàng)查找并替換引擎調(diào)用此方法。    
    ///即使跨多個(gè)運(yùn)行,此方法也會(huì)突出顯示匹配字符串。
    /// </summary>    
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs e)    
    {    
    // 這是一個(gè)Run節(jié)點(diǎn),其中包含開(kāi)始或完全匹配。  
    Node currentNode = e.MatchNode;    
    // 第一次(可能是唯一一次)運(yùn)行可以包含比賽前的文字,
    // 在這種情況下,有必要拆分運(yùn)行。  
    if (e.MatchOffset > 0)    
    currentNode = SplitRun((Run)currentNode, e.MatchOffset);    
    // 此數(shù)組用于存儲(chǔ)匹配的所有節(jié)點(diǎn)以進(jìn)一步突出顯示。  
    ArrayList runs = new ArrayList();    
    // 查找包含匹配字符串部分的所有運(yùn)行。    
    int remainingLength = e.Match.Value.Length;    
    while (    
    (remainingLength > 0) &&    
    (currentNode != null) &&    
    (currentNode.GetText().Length <= remainingLength))    
    {    
    runs.Add(currentNode);    
    remainingLength = remainingLength - currentNode.GetText().Length;    
    //選擇下一個(gè)“運(yùn)行”節(jié)點(diǎn)。
    //必須循環(huán),因?yàn)榭赡苓€有其他節(jié)點(diǎn),例如BookmarkStart等。 
    do    
    {    
    currentNode = currentNode.NextSibling;    
    }    
    while ((currentNode != null) && (currentNode.NodeType != NodeType.Run));    
    }    
    //如果剩余文本,則拆分包含該匹配項(xiàng)的最后一次運(yùn)行。    
    if ((currentNode != null) && (remainingLength > 0))    
    {    
    SplitRun((Run)currentNode, remainingLength);    
    runs.Add(currentNode);    
    }    
    //現(xiàn)在突出顯示序列中的所有運(yùn)行。
    foreach (Run run in runs)    
    run.Font.HighlightColor = Color.Yellow;    
    //向替換引擎發(fā)出信號(hào),表示什么都不做,因?yàn)槲覀円呀?jīng)完成了所有想要做的事情。
    return ReplaceAction.Skip;    
    }    
    }
    /// <summary>    
    /// 將指定運(yùn)行的文本分成兩個(gè)運(yùn)行。    
    /// 在指定的運(yùn)行之后插入新的運(yùn)行。  
    /// </summary>    
    private static Run SplitRun(Run run, int position)    
    {    
    Run afterRun = (Run)run.Clone(true);    
    afterRun.Text = run.Text.Substring(position);    
    run.Text = run.Text.Substring(0, position);    
    run.ParentNode.InsertAfter(afterRun, run);    
    return afterRun;    
    }

    還想要更多嗎?您可以點(diǎn)擊閱讀【2019 · Aspose最新資源整合】,查找需要的教程資源。如果您有任何疑問(wèn)或需求,請(qǐng)隨時(shí)加入Aspose技術(shù)交流群642018183,我們很高興為您提供查詢和咨詢。


    如果您對(duì)Aspose有任何需求和疑難,記得掃描下方二維碼告訴我們哦~

    q4HAjUm_extraLarge.png


    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();