CPDFAnnotationPreviewerControl.xaml.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. using compdfkit_tools.Data;
  2. using compdfkit_tools.Helper;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Security.Permissions;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. using System.Windows.Data;
  12. using System.Windows.Documents;
  13. using System.Windows.Ink;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Media.Imaging;
  17. using System.Windows.Navigation;
  18. using System.Windows.Shapes;
  19. using static compdfkit_tools.Helper.CommonHelper;
  20. namespace compdfkit_tools.PDFControl
  21. {
  22. /// <summary>
  23. /// CPDFAnnotationPreviewer.xaml 的交互逻辑
  24. /// </summary>
  25. public partial class CPDFAnnotationPreviewerControl : UserControl
  26. {
  27. public CPDFAnnotationPreviewerControl()
  28. {
  29. InitializeComponent();
  30. }
  31. public void CollapsedAll()
  32. {
  33. MarkupGrid.Visibility = Visibility.Collapsed;
  34. HighlightPath.Visibility = Visibility.Collapsed;
  35. UnderlinePath.Visibility = Visibility.Collapsed;
  36. StrikeoutPath.Visibility = Visibility.Collapsed;
  37. SquigglyPath.Visibility = Visibility.Collapsed;
  38. FreehandGrid.Visibility = Visibility.Collapsed;
  39. FreeTextGrid.Visibility = Visibility.Collapsed;
  40. ShapeGrid.Visibility = Visibility.Collapsed;
  41. Ellipse.Visibility = Visibility.Collapsed;
  42. Rectangle.Visibility = Visibility.Collapsed;
  43. Line.Visibility = Visibility.Collapsed;
  44. NoteGrid.Visibility = Visibility.Collapsed;
  45. StampGrid.Visibility = Visibility.Collapsed;
  46. }
  47. public void DrawMarkUpPreview(CPDFAnnotationData annotationData)
  48. {
  49. CPDFMarkupData markupData = annotationData as CPDFMarkupData;
  50. CollapsedAll();
  51. CPDFAnnotationType annotationType = annotationData.AnnotationType;
  52. switch (annotationType)
  53. {
  54. case CPDFAnnotationType.Highlight:
  55. MarkupGrid.Visibility = Visibility.Visible;
  56. HighlightPath.Visibility = Visibility.Visible;
  57. HighlightPath.Stroke = new SolidColorBrush(markupData.Color);
  58. HighlightPath.Opacity = markupData.Opacity;
  59. break;
  60. case CPDFAnnotationType.Underline:
  61. MarkupGrid.Visibility = Visibility.Visible;
  62. UnderlinePath.Visibility = Visibility.Visible;
  63. UnderlinePath.Stroke = new SolidColorBrush(markupData.Color);
  64. UnderlinePath.Opacity = markupData.Opacity;
  65. break;
  66. case CPDFAnnotationType.Squiggly:
  67. MarkupGrid.Visibility = Visibility.Visible;
  68. SquigglyPath.Visibility = Visibility.Visible;
  69. SquigglyPath.Stroke = new SolidColorBrush(markupData.Color);
  70. SquigglyPath.Opacity = markupData.Opacity;
  71. break;
  72. case CPDFAnnotationType.Strikeout:
  73. MarkupGrid.Visibility = Visibility.Visible;
  74. StrikeoutPath.Visibility = Visibility.Visible;
  75. StrikeoutPath.Stroke = new SolidColorBrush(markupData.Color);
  76. StrikeoutPath.Opacity = markupData.Opacity;
  77. break;
  78. }
  79. }
  80. public void DrawShapePreview(CPDFAnnotationData annotationData)
  81. {
  82. CPDFAnnotationType annotationType = annotationData.AnnotationType;
  83. switch (annotationType)
  84. {
  85. case CPDFAnnotationType.Circle:
  86. CPDFShapeData circleData = annotationData as CPDFShapeData;
  87. ShapeGrid.Visibility = Visibility.Visible;
  88. Ellipse.Visibility = Visibility.Visible;
  89. Ellipse.StrokeThickness = circleData.Thickness;
  90. Ellipse.Opacity = circleData.Opacity;
  91. Ellipse.Fill = new SolidColorBrush(circleData.FillColor);
  92. Ellipse.Stroke = new SolidColorBrush(circleData.BorderColor);
  93. DashStyle circleDash = new DashStyle();
  94. if (circleData.DashStyle.Dashes.Count == 2)
  95. {
  96. circleDash.Dashes.Add(circleData.DashStyle.Dashes[0] / Math.Max(Ellipse.StrokeThickness, 1));
  97. circleDash.Dashes.Add(circleData.DashStyle.Dashes[1] / Math.Max(Ellipse.StrokeThickness, 1));
  98. }
  99. Ellipse.StrokeDashArray = circleDash.Dashes;
  100. break;
  101. case CPDFAnnotationType.Square:
  102. CPDFShapeData squareData = annotationData as CPDFShapeData;
  103. ShapeGrid.Visibility = Visibility.Visible;
  104. Rectangle.Visibility = Visibility.Visible;
  105. Rectangle.StrokeThickness = squareData.Thickness;
  106. Rectangle.Opacity = squareData.Opacity;
  107. Rectangle.Fill = new SolidColorBrush(squareData.FillColor);
  108. Rectangle.Stroke = new SolidColorBrush(squareData.BorderColor);
  109. DashStyle squareDash = new DashStyle();
  110. if (squareData.DashStyle.Dashes.Count == 2)
  111. {
  112. squareDash.Dashes.Add(squareData.DashStyle.Dashes[0] / Math.Max(Rectangle.StrokeThickness, 1));
  113. squareDash.Dashes.Add(squareData.DashStyle.Dashes[1] / Math.Max(Rectangle.StrokeThickness, 1));
  114. }
  115. Rectangle.StrokeDashArray = squareDash.Dashes;
  116. break;
  117. case CPDFAnnotationType.Line:
  118. case CPDFAnnotationType.Arrow:
  119. CPDFLineShapeData lineShapeData = annotationData as CPDFLineShapeData;
  120. ShapeGrid.Visibility = Visibility.Visible;
  121. Line.Visibility = Visibility.Visible;
  122. ArrowHelper arrowLine = new ArrowHelper();
  123. arrowLine.ArrowLength = 8;
  124. arrowLine.LineStart = new Point(20, 50);
  125. arrowLine.LineEnd = new Point(50, 20);
  126. arrowLine.StartSharp = lineShapeData.LineType.HeadLineType;
  127. arrowLine.EndSharp = lineShapeData.LineType.TailLineType;
  128. Line.Stroke = new SolidColorBrush(lineShapeData.BorderColor);
  129. Line.StrokeThickness = lineShapeData.Thickness;
  130. Line.Opacity = lineShapeData.Opacity;
  131. Line.Data = arrowLine.BuildArrowBody();
  132. DashStyle lineDash = new DashStyle();
  133. if (lineShapeData.DashStyle.Dashes.Count == 2)
  134. {
  135. lineDash.Dashes.Add(lineShapeData.DashStyle.Dashes[0] / Math.Max(Line.StrokeThickness, 1));
  136. lineDash.Dashes.Add(lineShapeData.DashStyle.Dashes[1] / Math.Max(Line.StrokeThickness, 1));
  137. }
  138. Line.StrokeDashArray = lineDash.Dashes;
  139. break;
  140. }
  141. }
  142. public void DrawFreehandPreview(CPDFAnnotationData annotationData)
  143. {
  144. CPDFFreehandData freehandData = annotationData as CPDFFreehandData;
  145. CollapsedAll();
  146. FreehandGrid.Visibility = Visibility.Visible;
  147. SharpPath.Stroke = new SolidColorBrush(freehandData.BorderColor);
  148. SharpPath.Opacity = freehandData.Opacity;
  149. SharpPath.StrokeThickness = freehandData.Thickness;
  150. }
  151. public void DrawNotePreview(CPDFAnnotationData annotationData)
  152. {
  153. CollapsedAll();
  154. NoteGrid.Visibility = Visibility.Visible;
  155. CPDFNoteData noteData = annotationData as CPDFNoteData;
  156. NotePath.Fill = new SolidColorBrush(noteData.BorderColor);
  157. }
  158. public void DrawStampPreview(WriteableBitmap writeableBitmap)
  159. {
  160. CollapsedAll();
  161. StampGrid.Visibility = Visibility.Visible;
  162. StampImage.Source = writeableBitmap;
  163. }
  164. public void DrawFreeTextPreview(CPDFFreeTextData freeTextData)
  165. {
  166. CollapsedAll();
  167. FreeTextGrid.Visibility = Visibility.Visible;
  168. if (freeTextData.FontFamily == "Helvetica")
  169. {
  170. FreeText.FontFamily = new FontFamily("Arial");
  171. }
  172. else if (freeTextData.FontFamily == "Times")
  173. {
  174. FreeText.FontFamily = new FontFamily("Times New Roman");
  175. }
  176. else
  177. {
  178. FreeText.FontFamily = new FontFamily("Courier New");
  179. }
  180. //FreeText.FontFamily = new FontFamily(freeTextData.FontFamily);
  181. FreeText.FontSize = freeTextData.FontSize/1.2;
  182. FreeText.Foreground = new SolidColorBrush(freeTextData.BorderColor);
  183. FreeText.Opacity = freeTextData.Opacity;
  184. if (freeTextData.IsBold)
  185. {
  186. FreeText.FontWeight = FontWeights.Bold;
  187. }
  188. else
  189. {
  190. FreeText.FontWeight = FontWeights.Medium;
  191. }
  192. if (freeTextData.IsItalic)
  193. {
  194. FreeText.FontStyle = FontStyles.Italic;
  195. }
  196. else
  197. {
  198. FreeText.FontStyle = FontStyles.Normal;
  199. }
  200. }
  201. }
  202. }