using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Windows; using ComPDFKitViewer; using System.IO; using System.Runtime.Remoting.Messaging; using System.Windows.Media.Imaging; using System.ComponentModel; using ComPDFKit.PDFAnnotation; using System.Windows.Input; using System.Reflection; namespace ComPDFKit.Tool.Help { public static class CommonHelper { private static Cursor _rotationCursor = null; public static Cursor RotationCursor { get { if (_rotationCursor == null) { var assembly = Assembly.GetExecutingAssembly(); Stream stream = assembly.GetManifestResourceStream("ComPDFKit.Tool.Resource.Cursor.Rotation.cur"); _rotationCursor = new Cursor(stream); } return _rotationCursor; } } /// /// Find the parent control of the target type of the object /// /// /// /// public static T FindVisualParent(DependencyObject obj) where T : class { try { while (obj != null) { if (obj is T) return obj as T; obj = VisualTreeHelper.GetParent(obj); } return null; } catch { return null; } } /// /// Find the child control of the target type of the object /// /// /// The type of the child control to find /// /// /// The object to find /// /// /// The child control of the target type of the object /// public static childItem FindVisualChild(DependencyObject obj) where childItem : DependencyObject { try { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is childItem) return (childItem)child; else { childItem childOfChild = FindVisualChild(child); if (childOfChild != null) return childOfChild; } } return null; } catch { return null; } } /// /// Find the child control of the target type of the object /// /// /// The type of the child control to find /// /// /// The object to find /// /// /// The child control of the target type of the object /// public static List FindVisualChildList(DependencyObject obj) where childItem : DependencyObject { List children = new List(); try { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is childItem) { children.Add((childItem)child); } else { childItem childOfChild = FindVisualChild(child); if (childOfChild != null) children.Add(childOfChild); } } return children; } catch { return children; } } public static PathGeometry GetPathIcon(string iconKey) { string pathIcon = "M18 3H2V15H5V18L10 15H18V3ZM5 6H11V7.5H5V6ZM5 9.5H15V11H5V9.5Z"; try { TypeConverter typeCovert = TypeDescriptor.GetConverter(typeof(Geometry)); if (CPDFViewer.StickyIconDict != null && CPDFViewer.StickyIconDict.ContainsKey(iconKey)) { pathIcon = CPDFViewer.StickyIconDict[iconKey]; } return PathGeometry.CreateFromGeometry((Geometry)typeCovert.ConvertFrom(pathIcon)); } catch (Exception ex) { } return new PathGeometry(); } private static bool GetIconData(string iconName, Brush fillBrush, out string tempImagePath) { tempImagePath = string.Empty; try { if (CPDFViewer.StickyIconDict != null && CPDFViewer.StickyIconDict.ContainsKey(iconName)) { PathGeometry iconGeometry = GetPathIcon(iconName); DrawingVisual iconVisual = new DrawingVisual(); DrawingContext iconContext = iconVisual.RenderOpen(); iconContext.DrawGeometry(fillBrush, null, iconGeometry); iconContext.Close(); RenderTargetBitmap renderBitmap = new RenderTargetBitmap(32, 32, 96, 96, PixelFormats.Pbgra32); renderBitmap.Render(iconVisual); string tempPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString()); PngBitmapEncoder pngEncoder = new PngBitmapEncoder(); using (FileStream fs = File.Create(tempPath)) { pngEncoder.Frames.Add(BitmapFrame.Create(renderBitmap)); pngEncoder.Save(fs); } tempImagePath = tempPath; return true; } } catch (Exception ex) { } return false; } public static void UpdateStickyAP(CPDFTextAnnotation textAnnotation) { if (textAnnotation == null || textAnnotation.IsValid() == false) { return; } try { string iconName = textAnnotation.GetIconName(); byte opacity = textAnnotation.GetTransparency(); SolidColorBrush fillBrush = new SolidColorBrush(Color.FromArgb(opacity, textAnnotation.Color[0], textAnnotation.Color[1], textAnnotation.Color[2])); if (GetIconData(iconName, fillBrush, out string apPath) && File.Exists(apPath)) { textAnnotation.UpdateApWithImage(apPath, string.Empty, textAnnotation.GetRotation()); File.Delete(apPath); } } catch (Exception ex) { } } } }