CPDFViewerTool.PageSelected.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. using ComPDFKit.Import;
  2. using ComPDFKit.PDFDocument;
  3. using ComPDFKit.PDFPage;
  4. using ComPDFKit.Tool.DrawTool;
  5. using ComPDFKit.Tool.Help;
  6. using ComPDFKit.Viewer.Layer;
  7. using ComPDFKitViewer.Helper;
  8. using ComPDFKitViewer.Layer;
  9. using System;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Input;
  13. namespace ComPDFKit.Tool
  14. {
  15. public class PageSelectedData
  16. {
  17. public int PageIndex { get; set; }
  18. public Rect DrawRect { get; set; }
  19. public Rect RawRect { get; set; }
  20. public Rect SelectRect { get; set; }
  21. }
  22. public partial class CPDFViewerTool
  23. {
  24. int pageSelectedRectViewTag = -1;
  25. int pageIndex = -1;
  26. public event EventHandler<PageSelectedData> PageSelectedChanging;
  27. public event EventHandler<PageSelectedData> PageSelectedChanged;
  28. private void InsertPageSelectedRectView()
  29. {
  30. int selectedRectViewIndex = PDFViewer.GetMaxViewIndex();
  31. CustomizeLayer customizeLayer = new CustomizeLayer();
  32. PageSelectedRect pageSelectedRect = new PageSelectedRect(GetDefaultDrawParam());
  33. pageSelectedRect.SetDrawMoveType(DrawMoveType.kReferenceLine);
  34. customizeLayer.Children.Add(pageSelectedRect);
  35. pageSelectedRect.DataChanged += PageSelectedRect_DataChanged;
  36. pageSelectedRect.DataChanging += PageSelectedRect_DataChanging; ;
  37. PDFViewer.InsertView(selectedRectViewIndex, customizeLayer);
  38. pageSelectedRectViewTag = customizeLayer.GetResTag();
  39. }
  40. private void PageSelectedRect_DataChanging(object sender, Rect e)
  41. {
  42. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  43. if (pageSelectedRect != null)
  44. {
  45. PageSelectedData pageSelectedData = new PageSelectedData();
  46. pageSelectedData.PageIndex = pageIndex;
  47. pageSelectedData.DrawRect = e;
  48. PageSelectedChanged?.Invoke(this, pageSelectedData);
  49. }
  50. }
  51. private void PageSelectedRect_DataChanged(object sender, Rect e)
  52. {
  53. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  54. if (pageSelectedRect != null)
  55. {
  56. Canvas canvas = CommonHelper.FindVisualChild<Canvas>(pageSelectedRect);
  57. if (canvas != null)
  58. {
  59. UserControl userControl = CommonHelper.FindVisualChild<UserControl>(canvas);
  60. if (userControl != null)
  61. {
  62. userControl.Visibility = Visibility.Collapsed;
  63. if (e.Width > 0 && e.Height > 0)
  64. {
  65. userControl.Visibility = Visibility.Visible;
  66. userControl.Measure(pageSelectedRect.GetMaxRect().Size);
  67. Size desireSize = userControl.DesiredSize;
  68. if (e.Bottom + desireSize.Height + 3 > Math.Min(pageSelectedRect.GetMaxRect().Bottom, PDFViewer.ViewportHeight))
  69. {
  70. userControl.SetValue(Canvas.LeftProperty, e.Right - desireSize.Width);
  71. double topPos = (int)Math.Max(e.Top - desireSize.Height - 3, 0);
  72. userControl.SetValue(Canvas.TopProperty, topPos);
  73. }
  74. else
  75. {
  76. userControl.SetValue(Canvas.LeftProperty, e.Right - desireSize.Width);
  77. userControl.SetValue(Canvas.TopProperty, e.Bottom + 3);
  78. }
  79. if (e.Right - desireSize.Width < 0)
  80. {
  81. userControl.SetValue(Canvas.LeftProperty, 3D);
  82. }
  83. }
  84. }
  85. PageSelectedData pageSelectedData = new PageSelectedData();
  86. pageSelectedData.PageIndex = pageIndex;
  87. pageSelectedData.DrawRect = e;
  88. pageSelectedData.RawRect = Rect.Empty;
  89. pageSelectedData.SelectRect = Rect.Empty;
  90. try
  91. {
  92. Rect maxRect = pageSelectedRect.GetMaxRect();
  93. Rect pageRect = new Rect(e.X - maxRect.X, e.Y - maxRect.Y, e.Width, e.Height);
  94. pageSelectedData.SelectRect = pageRect;
  95. double zoom = PDFViewer.GetZoom();
  96. pageRect = new Rect(
  97. pageRect.X / zoom / 96D * 72D,
  98. pageRect.Y / zoom / 96D * 72D,
  99. pageRect.Width / zoom / 96D * 72D,
  100. pageRect.Height / zoom / 96D * 72D);
  101. pageSelectedData.RawRect = pageRect;
  102. }
  103. catch (Exception ex)
  104. {
  105. }
  106. PageSelectedChanged?.Invoke(this, pageSelectedData);
  107. }
  108. }
  109. }
  110. public void DrawStartPageSelectedRect()
  111. {
  112. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  113. if (pageSelectedRect != null)
  114. {
  115. Point point = Mouse.GetPosition(this);
  116. pageSelectedRect.Draw();
  117. pageSelectedRect.OnMouseLeftButtonDown(point);
  118. PDFViewer.CanHorizontallyScroll = false;
  119. PDFViewer.CanVerticallyScroll = false;
  120. PDFViewer.EnableZoom(false);
  121. }
  122. }
  123. public void DrawMovePageSelectedRect()
  124. {
  125. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  126. if (pageSelectedRect != null)
  127. {
  128. Point point = Mouse.GetPosition(this);
  129. pageSelectedRect.OnMouseMove(point, out bool Tag, PDFViewer.ActualWidth, PDFViewer.ActualHeight);
  130. }
  131. }
  132. public void DrawEndPageSelectedRect()
  133. {
  134. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  135. if (pageSelectedRect != null)
  136. {
  137. Point point = Mouse.GetPosition(this);
  138. pageSelectedRect.OnMouseLeftButtonUp(point);
  139. }
  140. }
  141. public void SelectedPageSelectedRect(Rect selectedRects, Rect MaxRect)
  142. {
  143. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  144. if (pageSelectedRect != null)
  145. {
  146. pageSelectedRect.SetRect(selectedRects);
  147. pageSelectedRect.SetMaxRect(MaxRect);
  148. pageSelectedRect.SetPDFViewerActualSize(PDFViewer.ActualWidth, PDFViewer.ActualHeight);
  149. pageSelectedRect.Draw();
  150. }
  151. }
  152. public bool HitTestPageSelectedRect()
  153. {
  154. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  155. if (pageSelectedRect != null)
  156. {
  157. if (pageSelectedRect.GetHitControlIndex(Mouse.GetPosition(this)) != PointControlType.None)
  158. {
  159. return true;
  160. }
  161. }
  162. return false;
  163. }
  164. public void CleanPageSelectedRect()
  165. {
  166. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  167. if (pageSelectedRect != null)
  168. {
  169. pageSelectedRect.ClearDraw();
  170. Canvas canvas = CommonHelper.FindVisualChild<Canvas>(pageSelectedRect);
  171. if (canvas != null)
  172. {
  173. UserControl userControl = CommonHelper.FindVisualChild<UserControl>(canvas);
  174. if (userControl != null)
  175. {
  176. userControl.Visibility=Visibility.Collapsed;
  177. }
  178. }
  179. pageIndex = -1;
  180. PDFViewer.CanHorizontallyScroll = true;
  181. PDFViewer.CanVerticallyScroll = true;
  182. PDFViewer.EnableZoom(true);
  183. }
  184. }
  185. public void CreatePageSelectdRect()
  186. {
  187. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  188. if (pageSelectedRect != null)
  189. {
  190. Point point = Mouse.GetPosition(this);
  191. BaseLayer baseLayer = PDFViewer.GetViewForTag(CreateAnnotTag);
  192. PDFViewer.GetPointPageInfo(point, out int index, out Rect paintRect, out Rect pageBound);
  193. if (index < 0)
  194. {
  195. return;
  196. }
  197. pageIndex = index;
  198. CPDFDocument cPDFDocument = PDFViewer.GetDocument();
  199. CPDFPage cPDFPage = cPDFDocument.PageAtIndex(index);
  200. Point cropPoint = new Point();
  201. if (PDFViewer.GetIsCrop())
  202. {
  203. CRect cRect = cPDFPage.GetCropBounds();
  204. cropPoint.X = DpiHelper.PDFNumToStandardNum(cRect.left);
  205. cropPoint.Y = DpiHelper.PDFNumToStandardNum(cRect.top);
  206. }
  207. pageSelectedRect.CreateRect(point, cropPoint, pageBound, PDFViewer.ActualWidth, PDFViewer.ActualHeight);
  208. pageSelectedRect.Draw();
  209. PDFViewer.CanHorizontallyScroll = false;
  210. PDFViewer.CanVerticallyScroll = false;
  211. PDFViewer.EnableZoom(false);
  212. }
  213. }
  214. public void SetPageSelectdUserControl(UserControl control)
  215. {
  216. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  217. if (pageSelectedRect != null)
  218. {
  219. pageSelectedRect.Children.Clear();
  220. Canvas popCanvas = new Canvas();
  221. pageSelectedRect.Children.Add(popCanvas);
  222. popCanvas.Children.Add(control);
  223. control.Visibility = Visibility.Collapsed;
  224. pageSelectedRect.Arrange();
  225. }
  226. }
  227. public void RemovePageSelectdUserControl()
  228. {
  229. PageSelectedRect pageSelectedRect = CommonHelper.FindVisualChild<PageSelectedRect>(PDFViewer.GetViewForTag(pageSelectedRectViewTag));
  230. if (pageSelectedRect != null)
  231. {
  232. pageSelectedRect.Children.Clear();
  233. pageIndex = -1;
  234. }
  235. }
  236. }
  237. }