翻譯|使用教程|編輯:李顯亮|2019-11-05 09:43:31.833|閱讀 1421 次
概述:本文介紹如何使用Aspose.Words以編程方式查找和突出顯示文檔中的單詞或短語。在文檔中簡單地查找文本字符串并更改其格式似乎很容易,但是主要的困難在于,由于格式問題,匹配字符串可能會分布在多個文本行中。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Aspose.Words For .Net是一種高級Word文檔處理API,用于執行各種文檔管理和操作任務。API支持生成,修改,轉換,呈現和打印文檔,而無需在跨平臺應用程序中直接使用Microsoft Word。此外,API支持所有流行的Word處理文件格式,并允許將Word文檔導出或轉換為固定布局文件格式和最常用的圖像/多媒體格式。
接下來我們將進入“查找和替換”的介紹,在Aspose.Words中如何查找和突出顯示文本。
>>Aspose.Words for .NET更新至最新版v19.10,歡迎下載體驗
Aspose優惠進行時——購買Aspose系列產品可享限時優惠!更多活動詳情可哦~
本文介紹如何使用Aspose.Words以編程方式查找和突出顯示文檔中的單詞或短語。在文檔中簡單地查找文本字符串并更改其格式似乎很容易,但是主要的困難在于,由于格式問題,匹配字符串可能會分布在多個文本行中??紤]以下示例。短語“ Hello World!”(如果已格式化)并包含三個不同的運行:Hello為斜體,World為粗體,感嘆號為常規文本:
世界您好!
除了格式化外,文本中間的書簽還將其分成更多的行。) 上面的示例在Aspose.Words中使用以下對象表示:
Run (Run.Text = “Hello”, Font.Italic = true)
Run (Run.Text = “World”, Font.Bold = true)
Run (Run.Text = “!”)
該示例代碼將打開一個文檔,并找到文本“您的文檔”的任何實例。設置了替換處理程序,以處理要應用于找到的每個結果匹配項的邏輯。在這種情況下,結果運行將圍繞文本進行拆分,結果運行將突出顯示。下面的示例查找并突出顯示Word文檔中特定單詞或短語的所有實例。
//文檔目錄的路徑 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; //我們希望突出顯示“您的文檔”短語。 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為每個匹配項查找并替換引擎調用此方法。 ///即使跨多個運行,此方法也會突出顯示匹配字符串。 /// </summary> ReplaceAction IReplacingCallback.Replacing(ReplacingArgs e) { // 這是一個Run節點,其中包含開始或完全匹配。 Node currentNode = e.MatchNode; // 第一次(可能是唯一一次)運行可以包含比賽前的文字, // 在這種情況下,有必要拆分運行。 if (e.MatchOffset > 0) currentNode = SplitRun((Run)currentNode, e.MatchOffset); // 此數組用于存儲匹配的所有節點以進一步突出顯示。 ArrayList runs = new ArrayList(); // 查找包含匹配字符串部分的所有運行。 int remainingLength = e.Match.Value.Length; while ( (remainingLength > 0) && (currentNode != null) && (currentNode.GetText().Length <= remainingLength)) { runs.Add(currentNode); remainingLength = remainingLength - currentNode.GetText().Length; //選擇下一個“運行”節點。 //必須循環,因為可能還有其他節點,例如BookmarkStart等。 do { currentNode = currentNode.NextSibling; } while ((currentNode != null) && (currentNode.NodeType != NodeType.Run)); } //如果剩余文本,則拆分包含該匹配項的最后一次運行。 if ((currentNode != null) && (remainingLength > 0)) { SplitRun((Run)currentNode, remainingLength); runs.Add(currentNode); } //現在突出顯示序列中的所有運行。 foreach (Run run in runs) run.Font.HighlightColor = Color.Yellow; //向替換引擎發出信號,表示什么都不做,因為我們已經完成了所有想要做的事情。 return ReplaceAction.Skip; } }
/// <summary> /// 將指定運行的文本分成兩個運行。 /// 在指定的運行之后插入新的運行。 /// </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; }
還想要更多嗎?您可以點擊閱讀【2019 · Aspose最新資源整合】,查找需要的教程資源。如果您有任何疑問或需求,請隨時加入Aspose技術交流群(642018183),我們很高興為您提供查詢和咨詢。
如果您對Aspose有任何需求和疑難,記得掃描下方二維碼告訴我們哦~
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn