CPDFViewerTool.SelectText.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using ComPDFKit.Tool.DrawTool;
  2. using ComPDFKitViewer.Layer;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Windows;
  6. using ComPDFKitViewer.Helper;
  7. using ComPDFKit.Tool.Help;
  8. namespace ComPDFKit.Tool
  9. {
  10. public partial class CPDFViewerTool
  11. {
  12. int selectTextTag = -1;
  13. private void InsertSelectTextView()
  14. {
  15. SelectText createAnnotTool = new SelectText();
  16. int SelectTextindex = PDFViewer.GetMaxViewIndex();
  17. PDFViewer.InsertView(SelectTextindex, createAnnotTool);
  18. selectTextTag = createAnnotTool.GetResTag();
  19. }
  20. public bool IsText()
  21. {
  22. PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint);
  23. return PDFHelp.IsTextAtPos(PDFViewer.GetDocument(), pageindex, new Point(DpiHelper.StandardNumToPDFNum(pagepoint.X / PDFViewer.CurrentRenderFrame.ZoomFactor), DpiHelper.StandardNumToPDFNum(pagepoint.Y / PDFViewer.CurrentRenderFrame.ZoomFactor)));
  24. }
  25. public void DrawStartSelectText()
  26. {
  27. if (PDFViewer.CurrentRenderFrame == null)
  28. {
  29. return;
  30. }
  31. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  32. PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint);
  33. (baseLayer as SelectText).StartDraw(new Point(DpiHelper.StandardNumToPDFNum(pagepoint.X / PDFViewer.CurrentRenderFrame.ZoomFactor), DpiHelper.StandardNumToPDFNum(pagepoint.Y / PDFViewer.CurrentRenderFrame.ZoomFactor)), pageindex);
  34. }
  35. public void DrawMoveSelectText(bool DoubleClick)
  36. {
  37. if (PDFViewer.CurrentRenderFrame == null)
  38. {
  39. return;
  40. }
  41. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  42. PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint);
  43. (baseLayer as SelectText).MoveDraw(new Point(DpiHelper.StandardNumToPDFNum(pagepoint.X / PDFViewer.CurrentRenderFrame.ZoomFactor), DpiHelper.StandardNumToPDFNum(pagepoint.Y / PDFViewer.CurrentRenderFrame.ZoomFactor)), pageindex, PDFViewer, new Point(10, 10), DoubleClick);
  44. }
  45. public void DrawEndSelectText()
  46. {
  47. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  48. (baseLayer as SelectText).EndDraw();
  49. }
  50. public bool GetMousePointToTextSelectInfo()
  51. {
  52. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  53. TextSelectInfo selectTextInfo = (baseLayer as SelectText).GetTextSelectInfo();
  54. PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint);
  55. bool PressOnSelectedText = false;
  56. if (selectTextInfo.PageSelectTextRectList.Count <= 0)
  57. {
  58. PressOnSelectedText = false;
  59. return PressOnSelectedText;
  60. }
  61. if (selectTextInfo.PageSelectTextRectList.ContainsKey(pageindex))
  62. {
  63. foreach (TextDrawRect textRect in selectTextInfo.PageSelectTextRectList[pageindex])
  64. {
  65. Rect RawPaintRect = new Rect(
  66. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Left) * currentZoom,
  67. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Top) * currentZoom,
  68. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Width) * currentZoom,
  69. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Height) * currentZoom);
  70. if (RawPaintRect.Contains(pagepoint))
  71. {
  72. PressOnSelectedText = true;
  73. break;
  74. }
  75. }
  76. }
  77. return PressOnSelectedText;
  78. }
  79. public TextSelectInfo GetTextSelectInfo()
  80. {
  81. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  82. return (baseLayer as SelectText).GetTextSelectInfo();
  83. }
  84. public void ReDrawSelectText()
  85. {
  86. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  87. if ((baseLayer as SelectText).HasSelectTextInfo())
  88. {
  89. (baseLayer as SelectText).Draw(PDFViewer);
  90. }
  91. else
  92. {
  93. (baseLayer as SelectText).CleanDraw(PDFViewer);
  94. }
  95. }
  96. public void ReDrawSearchText()
  97. {
  98. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  99. if ((baseLayer as SelectText).HasSearchInfo())
  100. {
  101. (baseLayer as SelectText).Draw(PDFViewer);
  102. }
  103. else
  104. {
  105. (baseLayer as SelectText).CleanDraw(PDFViewer);
  106. }
  107. }
  108. public void RemoveSelectTextData()
  109. {
  110. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  111. if ((baseLayer as SelectText).HasSelectTextInfo())
  112. {
  113. (baseLayer as SelectText).RemoveSelectDataInfo();
  114. (baseLayer as SelectText).Draw(PDFViewer);
  115. }
  116. }
  117. /// <summary>
  118. /// Set all search results
  119. /// </summary>
  120. /// <param name="searchTexts"></param>
  121. public void SetPageSelectText(List<TextSearchItem> searchTexts)
  122. {
  123. if (searchTexts.Count > 0)
  124. {
  125. TextSelectInfo searchInfo = new TextSelectInfo();
  126. searchInfo.StartPage = searchTexts.Min(x => x.PageIndex);
  127. searchInfo.EndPage = searchTexts.Max(x => x.PageIndex);
  128. searchInfo.PageRotate = searchTexts[0].PageRotate;
  129. searchInfo.RotateRecord = true;
  130. List<int> pageIndexList = (from u in searchTexts select u.PageIndex).Distinct().ToList();
  131. foreach (int pageIndex in pageIndexList)
  132. {
  133. List<TextSearchItem> pageTexts = searchTexts.Where(x => x.PageIndex == pageIndex).ToList();
  134. foreach (TextSearchItem textItem in pageTexts)
  135. {
  136. if (!searchInfo.PageSelectTextRectList.ContainsKey(pageIndex))
  137. {
  138. searchInfo.PageSelectTextRectList[pageIndex] = new List<TextDrawRect>();
  139. }
  140. searchInfo.PageSelectTextRectList[pageIndex].Add(new TextDrawRect()
  141. {
  142. Text = textItem.TextContent,
  143. DrawRect = textItem.TextRect,
  144. PaintBrush = textItem.PaintBrush,
  145. DrawActiveSearch = false,
  146. SearchInfo = textItem
  147. });
  148. }
  149. }
  150. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  151. (baseLayer as SelectText).SetSearchInfo(searchInfo);
  152. }
  153. }
  154. /// <summary>
  155. /// Clear the previously cached search results
  156. /// </summary>
  157. public void CleanSearchInfo()
  158. {
  159. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  160. (baseLayer as SelectText).CleanSearchInfo();
  161. }
  162. public void HighLightSearchText(List<TextSearchItem> selectTexts)
  163. {
  164. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  165. if ((baseLayer as SelectText).HasSearchInfo())
  166. {
  167. TextSelectInfo searchTextInfo = (baseLayer as SelectText).GetSearchInfo();
  168. if (searchTextInfo.PageSelectTextRectList != null)
  169. {
  170. foreach (int pageIndex in searchTextInfo.PageSelectTextRectList.Keys)
  171. {
  172. List<TextDrawRect> drawSearchList = searchTextInfo.PageSelectTextRectList[pageIndex];
  173. foreach (TextDrawRect drawRect in drawSearchList)
  174. {
  175. drawRect.DrawActiveSearch = selectTexts.Contains(drawRect.SearchInfo);
  176. if (drawRect.DrawActiveSearch)
  177. {
  178. drawRect.PaintBrush = drawRect.SearchInfo.PaintBrush;
  179. }
  180. else
  181. {
  182. drawRect.PaintBrush = drawRect.SearchInfo.BorderBrush;
  183. }
  184. }
  185. }
  186. }
  187. }
  188. }
  189. }
  190. }