CPDFViewerTool.SelectText.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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. if(pageindex>=0)
  44. {
  45. (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);
  46. }
  47. }
  48. public void DrawEndSelectText()
  49. {
  50. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  51. (baseLayer as SelectText).EndDraw();
  52. }
  53. public bool GetMousePointToTextSelectInfo()
  54. {
  55. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  56. TextSelectInfo selectTextInfo = (baseLayer as SelectText).GetTextSelectInfo();
  57. PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint);
  58. bool PressOnSelectedText = false;
  59. if (selectTextInfo.PageSelectTextRectList.Count <= 0)
  60. {
  61. PressOnSelectedText = false;
  62. return PressOnSelectedText;
  63. }
  64. if (selectTextInfo.PageSelectTextRectList.ContainsKey(pageindex))
  65. {
  66. foreach (TextDrawRect textRect in selectTextInfo.PageSelectTextRectList[pageindex])
  67. {
  68. Rect RawPaintRect = new Rect(
  69. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Left) * currentZoom,
  70. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Top) * currentZoom,
  71. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Width) * currentZoom,
  72. DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Height) * currentZoom);
  73. if (RawPaintRect.Contains(pagepoint))
  74. {
  75. PressOnSelectedText = true;
  76. break;
  77. }
  78. }
  79. }
  80. return PressOnSelectedText;
  81. }
  82. public TextSelectInfo GetTextSelectInfo()
  83. {
  84. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  85. return (baseLayer as SelectText).GetTextSelectInfo();
  86. }
  87. public void ReDrawSelectText()
  88. {
  89. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  90. if ((baseLayer as SelectText).HasSelectTextInfo())
  91. {
  92. (baseLayer as SelectText).Draw(PDFViewer);
  93. }
  94. else
  95. {
  96. (baseLayer as SelectText).CleanDraw(PDFViewer);
  97. }
  98. }
  99. public void ReDrawSearchText()
  100. {
  101. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  102. if ((baseLayer as SelectText).HasSearchInfo())
  103. {
  104. (baseLayer as SelectText).Draw(PDFViewer);
  105. }
  106. else
  107. {
  108. (baseLayer as SelectText).CleanDraw(PDFViewer);
  109. }
  110. }
  111. public void RemoveSelectTextData()
  112. {
  113. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  114. if ((baseLayer as SelectText).HasSelectTextInfo())
  115. {
  116. (baseLayer as SelectText).RemoveSelectDataInfo();
  117. (baseLayer as SelectText).Draw(PDFViewer);
  118. }
  119. }
  120. /// <summary>
  121. /// Set all search results
  122. /// </summary>
  123. /// <param name="searchTexts"></param>
  124. public void SetPageSelectText(List<TextSearchItem> searchTexts)
  125. {
  126. if (searchTexts.Count > 0)
  127. {
  128. TextSelectInfo searchInfo = new TextSelectInfo();
  129. searchInfo.StartPage = searchTexts.Min(x => x.PageIndex);
  130. searchInfo.EndPage = searchTexts.Max(x => x.PageIndex);
  131. searchInfo.PageRotate = searchTexts[0].PageRotate;
  132. searchInfo.RotateRecord = true;
  133. List<int> pageIndexList = (from u in searchTexts select u.PageIndex).Distinct().ToList();
  134. foreach (int pageIndex in pageIndexList)
  135. {
  136. List<TextSearchItem> pageTexts = searchTexts.Where(x => x.PageIndex == pageIndex).ToList();
  137. foreach (TextSearchItem textItem in pageTexts)
  138. {
  139. if (!searchInfo.PageSelectTextRectList.ContainsKey(pageIndex))
  140. {
  141. searchInfo.PageSelectTextRectList[pageIndex] = new List<TextDrawRect>();
  142. }
  143. searchInfo.PageSelectTextRectList[pageIndex].Add(new TextDrawRect()
  144. {
  145. Text = textItem.TextContent,
  146. DrawRect = textItem.TextRect,
  147. PaintBrush = textItem.PaintBrush,
  148. DrawActiveSearch = false,
  149. SearchInfo = textItem
  150. });
  151. }
  152. }
  153. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  154. (baseLayer as SelectText).SetSearchInfo(searchInfo);
  155. }
  156. }
  157. /// <summary>
  158. /// Clear the previously cached search results
  159. /// </summary>
  160. public void CleanSearchInfo()
  161. {
  162. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  163. (baseLayer as SelectText).CleanSearchInfo();
  164. }
  165. public bool IsSelectText() {
  166. bool select = false;
  167. var selecttextinfo = GetTextSelectInfo();
  168. if (selecttextinfo == null)
  169. {
  170. select = true;
  171. }
  172. else
  173. {
  174. if (selecttextinfo.PageSelectText.Count == 0)
  175. {
  176. select = true;
  177. }
  178. }
  179. return select;
  180. }
  181. public void HighLightSearchText(List<TextSearchItem> selectTexts)
  182. {
  183. BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag);
  184. if ((baseLayer as SelectText).HasSearchInfo())
  185. {
  186. TextSelectInfo searchTextInfo = (baseLayer as SelectText).GetSearchInfo();
  187. if (searchTextInfo.PageSelectTextRectList != null)
  188. {
  189. foreach (int pageIndex in searchTextInfo.PageSelectTextRectList.Keys)
  190. {
  191. List<TextDrawRect> drawSearchList = searchTextInfo.PageSelectTextRectList[pageIndex];
  192. foreach (TextDrawRect drawRect in drawSearchList)
  193. {
  194. drawRect.DrawActiveSearch = selectTexts.Contains(drawRect.SearchInfo);
  195. if (drawRect.DrawActiveSearch)
  196. {
  197. drawRect.PaintBrush = drawRect.SearchInfo.PaintBrush;
  198. }
  199. else
  200. {
  201. drawRect.PaintBrush = drawRect.SearchInfo.BorderBrush;
  202. }
  203. }
  204. }
  205. }
  206. }
  207. }
  208. }
  209. }