CPDFAnnotationPreviewerControl.xaml.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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. if (circleData.DashStyle.Dashes.Count == 2)
  94. {
  95. Ellipse.StrokeDashArray.Add(circleData.DashStyle.Dashes[0] / Math.Max(Ellipse.StrokeThickness, 1));
  96. Ellipse.StrokeDashArray.Add(circleData.DashStyle.Dashes[1] / Math.Max(Ellipse.StrokeThickness, 1));
  97. }
  98. break;
  99. case CPDFAnnotationType.Square:
  100. CPDFShapeData squareData = annotationData as CPDFShapeData;
  101. ShapeGrid.Visibility = Visibility.Visible;
  102. Rectangle.Visibility = Visibility.Visible;
  103. Rectangle.StrokeThickness = squareData.Thickness;
  104. Rectangle.Opacity = squareData.Opacity;
  105. Rectangle.Fill = new SolidColorBrush(squareData.FillColor);
  106. Rectangle.Stroke = new SolidColorBrush(squareData.BorderColor);
  107. if (squareData.DashStyle.Dashes.Count == 2)
  108. {
  109. Rectangle.StrokeDashArray.Add(squareData.DashStyle.Dashes[0] / Math.Max(Rectangle.StrokeThickness, 1));
  110. Rectangle.StrokeDashArray.Add(squareData.DashStyle.Dashes[1] / Math.Max(Rectangle.StrokeThickness, 1));
  111. }
  112. break;
  113. case CPDFAnnotationType.Line:
  114. case CPDFAnnotationType.Arrow:
  115. CPDFLineShapeData lineShapeData = annotationData as CPDFLineShapeData;
  116. ShapeGrid.Visibility = Visibility.Visible;
  117. Line.Visibility = Visibility.Visible;
  118. ArrowHelper arrowLine = new ArrowHelper();
  119. arrowLine.ArrowLength = 8;
  120. arrowLine.LineStart = new Point(20, 50);
  121. arrowLine.LineEnd = new Point(50, 20);
  122. arrowLine.StartSharp = lineShapeData.LineType.HeadLineType;
  123. arrowLine.EndSharp = lineShapeData.LineType.TailLineType;
  124. Line.Stroke = new SolidColorBrush(lineShapeData.BorderColor);
  125. Line.StrokeThickness = lineShapeData.Thickness;
  126. Line.Opacity = lineShapeData.Opacity;
  127. Line.Data = arrowLine.BuildArrowBody();
  128. if (lineShapeData.DashStyle.Dashes.Count == 2)
  129. {
  130. Line.StrokeDashArray.Add(lineShapeData.DashStyle.Dashes[0] / Math.Max(Line.StrokeThickness, 1));
  131. Line.StrokeDashArray.Add(lineShapeData.DashStyle.Dashes[1] / Math.Max(Line.StrokeThickness, 1));
  132. }
  133. break;
  134. }
  135. }
  136. public void DrawFreehandPreview(CPDFAnnotationData annotationData)
  137. {
  138. CPDFFreehandData freehandData = annotationData as CPDFFreehandData;
  139. CollapsedAll();
  140. FreehandGrid.Visibility = Visibility.Visible;
  141. SharpPath.Stroke = new SolidColorBrush(freehandData.BorderColor);
  142. SharpPath.Opacity = freehandData.Opacity;
  143. SharpPath.StrokeThickness = freehandData.Thickness;
  144. }
  145. public void DrawNotePreview(CPDFAnnotationData annotationData)
  146. {
  147. CollapsedAll();
  148. NoteGrid.Visibility = Visibility.Visible;
  149. CPDFNoteData noteData = annotationData as CPDFNoteData;
  150. NotePath.Fill = new SolidColorBrush(noteData.BorderColor);
  151. }
  152. public void DrawStampPreview(WriteableBitmap writeableBitmap)
  153. {
  154. CollapsedAll();
  155. StampGrid.Visibility = Visibility.Visible;
  156. StampImage.Source = writeableBitmap;
  157. }
  158. public void DrawFreeTextPreview(CPDFFreeTextData freeTextData)
  159. {
  160. CollapsedAll();
  161. FreeTextGrid.Visibility = Visibility.Visible;
  162. if (freeTextData.FontFamily == "Helvetica")
  163. {
  164. FreeText.FontFamily = new FontFamily("Arial");
  165. }
  166. else if (freeTextData.FontFamily == "Times")
  167. {
  168. FreeText.FontFamily = new FontFamily("Times New Roman");
  169. }
  170. else
  171. {
  172. FreeText.FontFamily = new FontFamily("Courier New");
  173. }
  174. //FreeText.FontFamily = new FontFamily(freeTextData.FontFamily);
  175. FreeText.FontSize = freeTextData.FontSize/1.2;
  176. FreeText.Foreground = new SolidColorBrush(freeTextData.BorderColor);
  177. FreeText.Opacity = freeTextData.Opacity;
  178. if (freeTextData.IsBold)
  179. {
  180. FreeText.FontWeight = FontWeights.Bold;
  181. }
  182. else
  183. {
  184. FreeText.FontWeight = FontWeights.Medium;
  185. }
  186. if (freeTextData.IsItalic)
  187. {
  188. FreeText.FontStyle = FontStyles.Italic;
  189. }
  190. else
  191. {
  192. FreeText.FontStyle = FontStyles.Normal;
  193. }
  194. }
  195. }
  196. }