ソースを参照

ComPDFKit.Demo(win) - 新增截图功能

TangJinZhou 4 ヶ月 前
コミット
ea85458ffc

+ 7 - 0
Demo/Examples/Compdfkit.Controls/Compdfkit.Controls.csproj

@@ -583,6 +583,9 @@
     <Compile Include="PDFView\PDFScaling\PDFScalingUI\CPDFScalingUI.xaml.cs">
       <DependentUpon>CPDFScalingUI.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Snapshot\SnapshotMenu.xaml.cs">
+      <DependentUpon>SnapshotMenu.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Strings\Compress.Designer.cs">
       <AutoGen>True</AutoGen>
       <DesignTime>True</DesignTime>
@@ -1343,6 +1346,10 @@
       <Generator>MSBuild:Compile</Generator>
     </Page>
     <Page Include="PDFView\RegularViewerControl.xaml" />
+    <Page Include="Snapshot\SnapshotMenu.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Watermark\AddWatermark\FileGridListWithPageRangeControl.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 48 - 2
Demo/Examples/Compdfkit.Controls/PDFView/PDFViewControl/PDFViewControl.xaml.cs

@@ -14,12 +14,13 @@ using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Input;
 using ComPDFKit.Controls.Helper;
-using ComPDFKit.Tool.DrawTool;
 using SplitMode = ComPDFKit.Controls.PDFControlUI.CPDFViewModeUI.SplitMode;
 using System.Threading;
 using System.Threading.Tasks;
 using ComPDFKitViewer.Annot;
 using System.IO;
+using ComPDFKit.Import;
+using ComPDFKit.PDFPage;
 
 namespace ComPDFKit.Controls.PDFControl
 {
@@ -44,9 +45,11 @@ namespace ComPDFKit.Controls.PDFControl
         public event EventHandler<MouseEventObject> MouseLeftButtonUpHandler;
         public event EventHandler<MouseEventObject> MouseMoveHandler;
         public event EventHandler<MouseEventObject> MouseRightButtonDownHandler;
-        public event EventHandler<ComPDFKitViewer.MouseWheelZoomArgs> MouseWheelZoomHandler;
+        public event EventHandler<MouseWheelZoomArgs> MouseWheelZoomHandler;
         public event EventHandler DrawChanged;
 
+        public PageSelectedData SnapshotData { get; private set; }
+
         //private ContextMenu RightMenu;
         #region Properties
 
@@ -57,6 +60,7 @@ namespace ComPDFKit.Controls.PDFControl
 
         private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
         #endregion
+
         public PDFViewControl()
         {
             InitializeComponent();
@@ -78,15 +82,18 @@ namespace ComPDFKit.Controls.PDFControl
             PDFViewTool.GetCPDFViewer().MouseWheelZoomHandler -= PDFViewControl_MouseWheelZoomHandler;
             PDFViewTool.GetCPDFViewer().MouseMove -= PDFViewControl_MouseMove;
             PDFViewTool.DrawChanged -= PDFViewTool_DrawChanged;
+            PDFViewTool.PageSelectedChanged -= PDFViewTool_PageSelectedChanged;
             PDFToolManager.MouseLeftButtonDownHandler -= PDFToolManager_MouseLeftButtonDownHandler;
             PDFToolManager.MouseLeftButtonUpHandler -= PDFToolManager_MouseLeftButtonUpHandler;
             PDFToolManager.MouseMoveHandler -= PDFToolManager_MouseMoveHandler;
             PDFToolManager.MouseRightButtonDownHandler -= PDFToolManager_MouseRightButtonDownHandler;
 
+
             PDFViewTool.SizeChanged += PDFViewTool_SizeChanged;
             PDFViewTool.GetCPDFViewer().MouseWheelZoomHandler += PDFViewControl_MouseWheelZoomHandler;
             PDFViewTool.GetCPDFViewer().MouseMove += PDFViewControl_MouseMove;
             PDFViewTool.DrawChanged += PDFViewTool_DrawChanged;
+            PDFViewTool.PageSelectedChanged += PDFViewTool_PageSelectedChanged;
             PDFToolManager.MouseLeftButtonDownHandler += PDFToolManager_MouseLeftButtonDownHandler;
             PDFToolManager.MouseLeftButtonUpHandler += PDFToolManager_MouseLeftButtonUpHandler;
             PDFToolManager.MouseMoveHandler += PDFToolManager_MouseMoveHandler;
@@ -95,6 +102,7 @@ namespace ComPDFKit.Controls.PDFControl
             splitViewerTool.SizeChanged -= SplitViewerTool_SizeChanged;
             splitViewerTool.GetCPDFViewer().MouseWheelZoomHandler -= SplitPDFViewControl_MouseWheelZoomHandler;
             splitViewerTool.DrawChanged -= PDFViewTool_DrawChanged;
+            splitViewerTool.PageSelectedChanged -= PDFViewTool_PageSelectedChanged;
             splitToolManager.MouseLeftButtonDownHandler -= PDFToolManager_MouseLeftButtonDownHandler;
             splitToolManager.MouseLeftButtonUpHandler -= PDFToolManager_MouseLeftButtonUpHandler;
             splitToolManager.MouseMoveHandler -= PDFToolManager_MouseMoveHandler;
@@ -103,6 +111,7 @@ namespace ComPDFKit.Controls.PDFControl
             splitViewerTool.SizeChanged += SplitViewerTool_SizeChanged;
             splitViewerTool.GetCPDFViewer().MouseWheelZoomHandler += SplitPDFViewControl_MouseWheelZoomHandler;
             splitViewerTool.DrawChanged += PDFViewTool_DrawChanged;
+            splitViewerTool.PageSelectedChanged += PDFViewTool_PageSelectedChanged;
             splitToolManager.MouseLeftButtonDownHandler += PDFToolManager_MouseLeftButtonDownHandler;
             splitToolManager.MouseLeftButtonUpHandler += PDFToolManager_MouseLeftButtonUpHandler;
             splitToolManager.MouseMoveHandler += PDFToolManager_MouseMoveHandler;
@@ -117,6 +126,11 @@ namespace ComPDFKit.Controls.PDFControl
             DrawChanged?.Invoke(sender, e);
         }
 
+        private void PDFViewTool_PageSelectedChanged(object sender, PageSelectedData e)
+        {
+            SnapshotData = e;
+        }
+
         public ContextMenu GetRightMenu()
         {
             FocusPDFViewTool.ContextMenu?.Items.Clear();
@@ -529,6 +543,38 @@ namespace ComPDFKit.Controls.PDFControl
             }
         }
 
+        private void ReloadDocument()
+        {
+            viewerTool?.GetCPDFViewer()?.UpdateVirtualNodes();
+            splitViewerTool?.GetCPDFViewer()?.UpdateVirtualNodes();
+            viewerTool?.GetCPDFViewer()?.UpdateRenderFrame();
+            splitViewerTool?.GetCPDFViewer()?.UpdateRenderFrame();
+        }
+
+        public void CropPage(CPDFDisplayBox cropBox, Rect cropRect, List<int> pagesList)
+        {
+            bool needLoad = false;
+            CPDFDocument doc = FocusPDFViewTool.GetCPDFViewer().GetDocument();
+
+            foreach (int pageIndex in pagesList)
+            {
+                if (pageIndex < 0 || pageIndex > doc.PageCount)
+                {
+                    continue;
+                }
+                CPDFPage CropPage = doc.PageAtIndex(pageIndex);
+                CRect rect = new CRect((float)cropRect.X, (float)(cropRect.Y + cropRect.Height), (float)(cropRect.X + cropRect.Width), (float)cropRect.Y);
+                CropPage.CropPage(cropBox, rect);
+                CropPage.ReleaseAllAnnotations();
+                needLoad = true;
+            }
+
+            if (needLoad)
+            {
+                ReloadDocument();
+            }
+        }
+
         #region Private Command Methods
         private double CheckZoomLevel(double zoom, bool IsGrowth)
         {

ファイルの差分が大きいため隠しています
+ 142 - 0
Demo/Examples/Compdfkit.Controls/Snapshot/SnapshotMenu.xaml


+ 311 - 0
Demo/Examples/Compdfkit.Controls/Snapshot/SnapshotMenu.xaml.cs

@@ -0,0 +1,311 @@
+using ComPDFKit.Controls.Common;
+using ComPDFKit.Controls.Helper;
+using ComPDFKit.Controls.PDFControl;
+using ComPDFKit.Import;
+using ComPDFKit.PDFDocument;
+using ComPDFKit.PDFPage;
+using ComPDFKit.Tool;
+using ComPDFKitViewer;
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+
+namespace ComPDFKit.Controls.Snapshot
+{
+    public partial class SnapshotMenu : UserControl
+    {
+        public SnapshotEditToolArgs SnapToolArgs { get; set; }
+        public PDFViewControl PdfViewer { get; set; }
+        public event EventHandler<KeyValuePair<string,object>> SnapToolEvent;
+
+        public SnapshotMenu()
+        {
+            InitializeComponent();
+            SetLangText();
+        }
+
+        private void SetLangText()
+        {
+            ToolTipService.SetToolTip(ReSnapshotBtn, LanguageHelper.CompressManager.GetString("ContentSelection_CancelDo"));
+            ToolTipService.SetToolTip(SnapshotPrintBtn, LanguageHelper.CompressManager.GetString("Main_Print"));
+            ToolTipService.SetToolTip(SnapshotSaveBtn, LanguageHelper.CompressManager.GetString("ContentSelection_Output"));
+            ToolTipService.SetToolTip(SnapshotCloseBtn, LanguageHelper.CompressManager.GetString("ContentSelection_Exit"));
+            ToolTipService.SetToolTip(SnapshotCopyBtn, LanguageHelper.CompressManager.GetString("Main_Copy"));
+            ToolTipService.SetToolTip(SnapshotCorpBtn, LanguageHelper.CompressManager.GetString("Main_Crop"));
+            ToolTipService.SetToolTip(SnapshotCorpBtn2, LanguageHelper.CompressManager.GetString("Main_Crop"));
+        }
+
+        private void Button_ReSnapshot(object sender, RoutedEventArgs e)
+        {
+            if(SnapToolArgs!=null)
+            {
+                SnapToolArgs.ReSnapshot();
+            }
+        }
+
+        private void Button_SnapshotClose(object sender, RoutedEventArgs e)
+        {
+            if(SnapToolEvent!=null)
+            {
+                KeyValuePair<string, object> param = new KeyValuePair<string, object>("CloseSnap",null);
+                SnapToolEvent.Invoke(this, param);
+            }
+        }
+
+        private void Button_SnapshotCopy(object sender, RoutedEventArgs e)
+        {
+            if (SnapToolArgs != null)
+            {
+                SnapToolArgs.SaveSnapshotToClipboard();
+                if (SnapToolEvent != null)
+                {
+                    KeyValuePair<string, object> param = new KeyValuePair<string, object>("CloseSnap", null);
+                    SnapToolEvent.Invoke(this, param);
+                }
+            }
+        }
+
+        private int CropPageUI { get; set; }
+       
+        private void Button_SnapshotCorp(object sender, RoutedEventArgs e)
+        {
+            if (MessageBoxEx.Show(LanguageHelper.CompressManager.GetString("Corp_Customize_PRM") + "                                                           ", LanguageHelper.CompressManager.GetString("Corp_Customize"), System.Windows.Forms.MessageBoxButtons.OKCancel, System.Windows.Forms.MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.OK)
+            {
+                if (SnapToolArgs != null && PdfViewer != null)
+                {
+                    List<int> cropPageList = new List<int>();
+                    Rect rect = SnapToolArgs.GetSnapshotPDFRect(out int pageIndexex);
+                    cropPageList.Add(pageIndexex);
+                    PdfViewer?.CropPage(CPDFDisplayBox.CropBox, rect, cropPageList);
+                    PdfViewer.FocusPDFViewTool.GetCPDFViewer().GoToPage(pageIndexex);
+                    KeyValuePair<string, object> param = new KeyValuePair<string, object>("Save", null);
+                    SnapToolEvent.Invoke(this, param);
+
+                    if (SnapToolEvent != null)
+                    {
+                        param = new KeyValuePair<string, object>("CloseSnap", null);
+                        SnapToolEvent.Invoke(this, param);
+                    }
+                }
+            }
+        }
+
+        private void Button_SnapshotSave(object sender, RoutedEventArgs e)
+        {
+            if (SnapToolArgs != null && PdfViewer != null && PdfViewer.PDFToolManager != null)
+            {
+                SaveFileDialog dlg = new SaveFileDialog();
+                dlg.Filter = "jpg|*.jpg|png|*.png";
+                dlg.FileName = PdfViewer.GetCPDFViewer().GetDocument().FileName;
+                if(dlg.FileName==null ||dlg.FileName.Trim().Length==0)
+                {
+                    dlg.FileName = "Blank" + DateTime.Now.ToString("yyyyMMddHHmmss");
+                }
+
+                if (dlg.ShowDialog() == true)
+                {
+                    string fileName = dlg.FileName;
+                    WriteableBitmap saveBitmap= SnapToolArgs.GetSnapshotImage();
+                    if(saveBitmap!=null)
+                    {
+                        if (dlg.SafeFileName.ToLower().EndsWith(".jpg"))
+                        {
+                            Stream saveStream = dlg.OpenFile();
+                            JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
+                            BitmapFrame frame = BitmapFrame.Create(saveBitmap);
+                            jpgEncoder.Frames.Add(frame);
+                            jpgEncoder.Save(saveStream);
+                            saveStream.Dispose();
+                        }
+                        else if (dlg.SafeFileName.ToLower().EndsWith(".png"))
+                        {
+                            Stream saveStream = dlg.OpenFile();
+                            PngBitmapEncoder pngEncoder = new PngBitmapEncoder();
+                            BitmapFrame frame = BitmapFrame.Create(saveBitmap);
+                            pngEncoder.Frames.Add(frame);
+                            pngEncoder.Save(saveStream);
+                            saveStream.Dispose();
+                        }
+
+                        CommonHelper.ExplorerFile(dlg.FileName);
+                    }
+
+                    if (SnapToolEvent != null)
+                    {
+                        KeyValuePair<string, object> param = new KeyValuePair<string, object>("CloseSnap", null);
+                        SnapToolEvent.Invoke(this, param);
+                    }
+                }
+            }
+        }
+
+        private void Button_PrintSnapshot(object sender, RoutedEventArgs e)
+        {
+            if (SnapToolArgs != null)
+            {
+                try
+                {
+                    WriteableBitmap saveBitmap = SnapToolArgs.GetSnapshotImage();
+                    if (saveBitmap != null)
+                    {
+                        PrintDialog printDlg = new PrintDialog();
+                        if (printDlg.ShowDialog() == true)
+                        {
+                            DrawingVisual visualItem = new DrawingVisual();
+                            DrawingContext drawContext = visualItem.RenderOpen();
+                            drawContext.DrawImage(saveBitmap, new Rect(0, 0, saveBitmap.Width, saveBitmap.Height));
+                            drawContext.Close();
+                            printDlg.PrintVisual(visualItem, "Snapshot");
+                        }
+                    }
+
+                    if (SnapToolEvent != null)
+                    {
+                        KeyValuePair<string, object> param = new KeyValuePair<string, object>("CloseSnap", null);
+                        SnapToolEvent.Invoke(this, param);
+                    }
+                }
+                catch (Exception ex)
+                {
+
+                }
+            }
+        }
+    }
+
+    public class SnapshotToolArgs
+    {
+        public Color LineColor;
+        public Color BgColor;
+        public double LineWidth;
+        public double Transparency;
+        public DashStyle LineDash;
+        public bool HasBgColor;
+
+        public SnapshotToolArgs()
+        {
+            LineDash = new DashStyle();
+            HasBgColor = true;
+            LineColor = Color.FromRgb(49, 106, 197);
+            BgColor = Color.FromRgb(153, 193, 218);
+            LineWidth = 1;
+            Transparency = 0.75;
+        }
+    }
+
+    public class SnapshotEditToolArgs : SnapshotToolArgs
+    {
+        public Color HighLightColor;
+        public Color ControlPointColor;
+        public UserControl ToolPanel;
+        public PDFViewControl Viewer { get; set; }
+
+        public SnapshotEditToolArgs() : base()
+        {
+            HighLightColor = Colors.Transparent;
+            ControlPointColor = Color.FromRgb(71, 126, 222);
+        }
+
+        public void ReSnapshot()
+        {
+            Viewer.FocusPDFViewTool.CleanPageSelectedRect();
+        }
+
+        public void SaveSnapshotToClipboard()
+        {
+            WriteableBitmap snapImage = GetSnapshotImage();
+            if (snapImage != null)
+            {
+                try
+                {
+                    Clipboard.SetImage(snapImage);
+                }
+                catch (Exception ex)
+                {
+
+                }
+            }
+        }
+
+        public WriteableBitmap GetSnapshotImage()
+        {
+            if (Viewer != null && Viewer.SnapshotData != null)
+            {
+                CPDFDocument pdfDoc = Viewer.GetCPDFViewer().GetDocument();
+                PageSelectedData snapData = Viewer.SnapshotData;
+                CPDFViewer pdfViewer = Viewer.GetCPDFViewer();
+                if (snapData.SelectRect.IsEmpty == false)
+                {
+                    try
+                    {
+                        CPDFPage pdfPage = pdfDoc.PageAtIndex(snapData.PageIndex);
+                        double zoom = pdfViewer.GetZoom();
+                        Rect snapRect = snapData.SelectRect;
+                        DrawMode drawMode = pdfViewer.GetDrawModes();
+                        uint bgColor = 0xFFFFFFFF;
+                        int flag = 1;
+                        switch (drawMode)
+                        {
+                            case DrawMode.Soft:
+                                bgColor = 0xFFFFEFB2;
+                                break;
+                            case DrawMode.Green:
+                                bgColor = 0xFFCBE9CE;
+                                break;
+                            case DrawMode.Dark:
+                                bgColor = 0xFF000000;
+                                flag = flag | 0x08 | 0x10000;
+                                break;
+                            case DrawMode.Normal:
+                                bgColor = 0xFFFFFFFF;
+                                break;
+                            case DrawMode.Custom:
+                                bgColor = pdfViewer.GetPDFBackground();
+                                break;
+                            default:
+                                break;
+                        }
+                        byte[] imageData = new byte[(int)snapRect.Width * (int)snapRect.Height * 4];
+                        pdfPage.RenderPageBitmapWithMatrix((float)(zoom * 96D / 72D), new CRect(
+                            (float)snapRect.Left,
+                            (float)snapRect.Bottom,
+                            (float)snapRect.Right,
+                            (float)snapRect.Top),
+                            bgColor,
+                            imageData,
+                            flag,
+                            true);
+                        WriteableBitmap snapBitmap = new WriteableBitmap((int)snapRect.Width, (int)snapRect.Height, 96, 96, PixelFormats.Bgra32, null);
+                        snapBitmap.WritePixels(new Int32Rect(0, 0, (int)snapRect.Width, (int)snapRect.Height), imageData, snapBitmap.BackBufferStride, 0);
+                        return snapBitmap;
+                    }
+                    catch (Exception ex)
+                    {
+
+                    }
+                }
+            }
+
+            return null;
+        }
+
+        public Rect GetSnapshotPDFRect(out int pageIndex)
+        {
+            pageIndex = -1;
+            if (Viewer != null && Viewer.SnapshotData != null)
+            {
+                PageSelectedData snapData = Viewer.SnapshotData;
+
+                pageIndex = snapData.PageIndex;
+                return snapData.RawRect;
+            }
+
+            return Rect.Empty;
+        }
+    }
+}

+ 13 - 0
Demo/Examples/PDFViewer/MainPage.xaml

@@ -148,6 +148,19 @@
                         </ToggleButton.ToolTip>
                     </ToggleButton>
 
+                    <ToggleButton Name="SnapshotButton" Margin="13,0,0,0" BorderThickness="0" Width="30" Height="30" Style="{StaticResource ToggleButtonStyle}" Background="Transparent" Click="SnapShotButton_Click">
+                        <ToggleButton.Content>
+                            <Path Fill="#43474D" Width="30" Height="30">
+                                <Path.Data>
+                                    M10.75 6.75H6.25V11.25H10.75V6.75ZM23.75 6.75H19.25V11.25H23.75V6.75ZM10.75 18.75H6.25V23.25H10.75V18.75ZM23.75 18.75H19.25V23.25H23.75V18.75ZM14 9.75V8.25H12V9.75H14ZM18 9.75V8.25H16V9.75H18ZM9.25 14H7.75V12H9.25V14ZM9.25 18H7.75V16H9.25V18ZM20.75 14H22.25V12H20.75V14ZM20.75 18H22.25V16H20.75V18ZM14 20.25V21.75H12V20.25H14ZM18 20.25V21.75H16V20.25H18Z
+                                </Path.Data>
+                            </Path>
+                        </ToggleButton.Content>
+                        <ToggleButton.ToolTip>
+                            <ToolTip Content="{Binding Converter={StaticResource CommonResourceConverter},ConverterParameter=Tooltip_Panel}"></ToolTip>
+                        </ToggleButton.ToolTip>
+                    </ToggleButton>
+
                     <Line Margin="13,0,13,0" Stroke="#E0E0E0" X1="0" Y1="5" X2="0" Y2="35"></Line>
 
                     <ToggleButton BorderThickness="0" Width="30" Height="30" Style="{StaticResource ToggleButtonStyle}" Background="Transparent" IsChecked="True" IsEnabled="False" Visibility="Collapsed">

+ 75 - 2
Demo/Examples/PDFViewer/MainPage.xaml.cs

@@ -20,13 +20,14 @@ using System.Windows.Controls;
 using System.Windows.Controls.Primitives;
 using System.Windows.Input;
 using ComPDFKit.Controls.PDFControlUI;
+using ComPDFKit.Controls.Snapshot;
+using System.Windows.Media;
 
 namespace PDFViewer
 {
     public partial class MainPage : UserControl, INotifyPropertyChanged
     {
         #region Properties
-
         private string currentMode = "Viewer";
         private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
 
@@ -489,6 +490,15 @@ namespace PDFViewer
                 return;
             }
 
+            if((string)item.Tag == "Viewer" || (string)item.Tag == "Annotation")
+            {
+                SnapshotButton.Visibility = Visibility.Visible;
+            }
+            else
+            {
+                SnapshotButton.Visibility = Visibility.Collapsed;
+            }
+
             ClearPanelState();
             if (ViewSettingBtn != null)
                 ViewSettingBtn.IsChecked = false;
@@ -666,8 +676,11 @@ namespace PDFViewer
                     measureControl.OnAnnotEditHandler += PdfFormControlRefreshAnnotList;
                 }
             }
+
             currentMode = item.Tag as string;
             RightToolPanelButtonIsChecked = false;
+            SnapshotButton.IsChecked = false;
+            viewControl.FocusPDFViewTool.RemovePageSelectdUserControl();
         }
 
         /// <summary>
@@ -812,10 +825,70 @@ namespace PDFViewer
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
         }
 
+        private void SnapShotButton_Click(object sender, RoutedEventArgs e)
+        {
+            if((sender as ToggleButton).IsChecked == true)
+            {
+                SnapshotEditToolArgs snapshotArgs = new SnapshotEditToolArgs();
+                SnapshotMenu snapMenu = new SnapshotMenu();
+                snapshotArgs.ControlPointColor = Colors.White;
+                snapshotArgs.BgColor = Color.FromArgb(0x99, 0x00, 0x00, 0x00);
+                snapshotArgs.LineColor = Color.FromArgb(0xFF, 0x47, 0x7E, 0xDE);
+                snapshotArgs.ToolPanel = snapMenu;
+                snapshotArgs.Viewer = viewControl;
+                snapMenu.SnapToolArgs = snapshotArgs;
+                snapMenu.PdfViewer = viewControl;
+                snapMenu.SnapToolEvent += SnapMenu_SnapToolEvent;
+
+                viewControl.PDFToolManager.SetToolType(ToolType.SelectedPage);
+                viewControl.FocusPDFViewTool.SetPageSelectdUserControl(snapshotArgs.ToolPanel);
+            }
+            else
+            {
+                if ((ModeComboBox.SelectedItem as ComboBoxItem).Tag.ToString() == "Viewer")
+                {
+                    viewControl.PDFToolManager.SetToolType(ToolType.Viewer);
+                }
+                else if ((ModeComboBox.SelectedItem as ComboBoxItem).Tag.ToString() == "Annotation")
+                {
+                    viewControl.PDFToolManager.SetToolType(ToolType.Pan);
+                }
+
+                viewControl.FocusPDFViewTool.RemovePageSelectdUserControl();
+            }
+        }
+
+        private void SnapMenu_SnapToolEvent(object sender, KeyValuePair<string, object> e)
+        {
+            switch (e.Key)
+            {
+                case "CloseSnap":
+                    {
+                        if ((ModeComboBox.SelectedItem as ComboBoxItem).Tag.ToString() == "Viewer")
+                        {
+                            viewControl.PDFToolManager.SetToolType(ToolType.Viewer);
+                        }
+                        else if ((ModeComboBox.SelectedItem as ComboBoxItem).Tag.ToString() == "Annotation")
+                        {
+                            viewControl.PDFToolManager.SetToolType(ToolType.Pan);
+                        }
+
+                        SnapshotButton.IsChecked = false;
+                        viewControl.FocusPDFViewTool.RemovePageSelectdUserControl();
+                    }
+                    break;
+
+                case "Save":
+                    CanSave = true;
+                    break;
+
+                default:
+                    break;
+            }
+        }
         #endregion
 
         #region Open and Save file
-
         private void SaveFileBtn_Click(object sender, RoutedEventArgs e)
         {
             SaveFile();