CPDFSearchControl.xaml.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using ComPDFKit.PDFPage;
  2. using Compdfkit_Tools.PDFControlUI;
  3. using ComPDFKitViewer.PdfViewer;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Media;
  9. using Compdfkit_Tools.Helper;
  10. namespace Compdfkit_Tools.PDFControl
  11. {
  12. public partial class CPDFSearchControl : UserControl
  13. {
  14. /// <summary>
  15. /// PDFViewer
  16. /// </summary>
  17. private CPDFViewer pdfView;
  18. private int currentHighLightIndex { get; set; } = -1;
  19. private PDFTextSearch textSearch;
  20. private string keyWord;
  21. private SolidColorBrush highLightBrush = new SolidColorBrush(Color.FromArgb(0x99, 0xFF, 0xF7, 0x00));
  22. private int ResultCount = 0;
  23. public CPDFSearchControl()
  24. {
  25. InitializeComponent();
  26. Loaded += PDFSearch_Loaded;
  27. }
  28. public void InitWithPDFViewer(CPDFViewer newPDFView)
  29. {
  30. if(pdfView!=newPDFView)
  31. {
  32. ClearSearchResult();
  33. pdfView = newPDFView;
  34. }
  35. }
  36. private void PDFSearch_Loaded(object sender, RoutedEventArgs e)
  37. {
  38. textSearch = new PDFTextSearch();
  39. SearchInput.SearchEvent += SearchInput_SearchEvent;
  40. SearchInput.ClearEvent += SearchInput_ClearEvent;
  41. textSearch.SearchCompletedHandler += TextSearch_SearchCompletedHandler;
  42. SearchResult.SelectionChanged += SearchResult_SelectionChanged;
  43. }
  44. private void SearchInput_ClearEvent(object sender, EventArgs e)
  45. {
  46. ClearSearchResult();
  47. }
  48. private void SearchInput_FindPreviousEvent(object sender, EventArgs e)
  49. {
  50. if (currentHighLightIndex > 0)
  51. {
  52. currentHighLightIndex--;
  53. BindSearchResult result = SearchResult.GetItem(currentHighLightIndex);
  54. HighLightSelectResult(result);
  55. }
  56. }
  57. private void SearchInput_FindNextEvent(object sender, EventArgs e)
  58. {
  59. currentHighLightIndex++;
  60. if (currentHighLightIndex >= 0)
  61. {
  62. BindSearchResult result = SearchResult.GetItem(currentHighLightIndex);
  63. HighLightSelectResult(result);
  64. }
  65. }
  66. private void SearchResult_SelectionChanged(object sender, int e)
  67. {
  68. currentHighLightIndex = e;
  69. BindSearchResult result = SearchResult.GetSelectItem();
  70. HighLightSelectResult(result);
  71. ResultText.Text = LanguageHelper.BotaManager.GetString("Text_Result")+ (e+1) + "//" + ResultCount;
  72. }
  73. private void TextSearch_SearchCompletedHandler(object sender, TextSearchResult e)
  74. {
  75. Dispatcher.Invoke(() =>
  76. {
  77. List<BindSearchResult> resultList = new List<BindSearchResult>();
  78. foreach (int pageIndex in e.Items.Keys)
  79. {
  80. List<TextSearchItem> textSearchItems = e.Items[pageIndex];
  81. foreach (TextSearchItem item in textSearchItems)
  82. {
  83. resultList.Add(new BindSearchResult()
  84. {
  85. PageIndex = item.PageIndex,
  86. TextContent = item.TextContent,
  87. TextRect = item.TextRect,
  88. SearchWord = keyWord,
  89. HighLightColor = Color.FromArgb(0x99, 0xFF, 0xF7, 0x00),
  90. PageRotate = item.PageRotate
  91. });
  92. }
  93. }
  94. SearchResult.SetSearchResult(resultList);
  95. ResultCount=resultList.Count;
  96. if (resultList==null || resultList.Count==0)
  97. {
  98. ResultText.Text= string.Empty;
  99. }
  100. else
  101. {
  102. ResultText.Text = ResultCount + " " + LanguageHelper.BotaManager.GetString("Tip_Result");
  103. }
  104. });
  105. }
  106. private void SearchInput_SearchEvent(object sender, string e)
  107. {
  108. if (string.IsNullOrEmpty(e))
  109. {
  110. return;
  111. }
  112. if (pdfView == null || pdfView.Document == null)
  113. {
  114. return;
  115. }
  116. if (textSearch != null && textSearch.CanDoSearch)
  117. {
  118. keyWord = e;
  119. textSearch.TextSearchDocument = pdfView.Document;
  120. textSearch.SearchText(e, C_Search_Options.Search_Case_Insensitive);
  121. }
  122. }
  123. private void HighLightSelectResult(BindSearchResult result)
  124. {
  125. if (result == null)
  126. {
  127. return;
  128. }
  129. List<TextSearchItem> selectList = new List<TextSearchItem>();
  130. selectList.Add(new TextSearchItem()
  131. {
  132. PageIndex = result.PageIndex,
  133. TextRect = result.TextRect,
  134. TextContent = result.TextContent,
  135. PageRotate = result.PageRotate,
  136. });
  137. pdfView.SetPageSelectText(selectList, highLightBrush);
  138. }
  139. private void ClearSearchResult()
  140. {
  141. SearchResult?.SetSearchResult(null);
  142. ResultText.Text = string.Empty;
  143. SearchInput.SearchKeyWord=string.Empty;
  144. }
  145. }
  146. }