Browse Source

安全 - 补充:复制文字、复制页面、复制注释场景

liuaoran 2 years ago
parent
commit
6a61f03691

+ 10 - 2
PDF Office/ViewModels/Dialog/HomePageToolsDialogs/HomePagePrinter/HomePagePrinterDialogViewModel.cs

@@ -1033,8 +1033,6 @@ namespace PDF_Master.ViewModels.Dialog.HomePageToolsDialogs.HomePagePrinter
                         PDFViewer.Document.CheckOwnerPassword(result.Password);
                     }
                 }
-                ///TODO:
-                ///此处填入需要执行的代码
             }
 
             if (!result.IsDiscryptied)
@@ -1086,6 +1084,16 @@ namespace PDF_Master.ViewModels.Dialog.HomePageToolsDialogs.HomePagePrinter
                     }
                 }
 
+
+                int currentPage = -1;
+                if (parameters.TryGetValue<int>(ParameterNames.PrintCurrentPage, out currentPage))
+                {
+                    System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
+                    {
+                        PageRangeSelectIndex = 1;
+                    }));
+                }
+
                 System.Windows.Size pageSize = PDFViewer.Document.GetPageSize(0);
 
                 if ((pageSize.Height / pageSize.Width > 1.0 && (double)PrintSettingsInfo.PrintDocument.DefaultPageSettings.PaperSize.Height / PrintSettingsInfo.PrintDocument.DefaultPageSettings.PaperSize.Width < 1.0)

+ 144 - 127
PDF Office/ViewModels/PageEdit/PageEditContentViewModel.cs

@@ -28,6 +28,8 @@ using PDF_Master.CustomControl;
 using PDF_Master.Model.HomePageToolsDialogs;
 using System.IO;
 using System.Text.RegularExpressions;
+using static PDF_Master.Model.Dialog.ToolsDialogs.SaftyDialogs.DeleteSafetySettintgsModel;
+using PDF_Master.Model.Dialog.ToolsDialogs.SaftyDialogs;
 
 namespace PDF_Master.ViewModels.PageEdit
 {
@@ -142,7 +144,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 TbPageRangeVisibility = Visibility.Visible;
                 TbPageRange = (ListSelectedIndex + 1).ToString();
                 TxtPageInputVisibility = Visibility.Collapsed;
-                if(IsBOTAThumb==Visibility.Visible&&PDFViewer!=null)
+                if (IsBOTAThumb == Visibility.Visible && PDFViewer != null)
                 {
                     PDFViewer.GoToPage(listSelecedIndex);
                 }
@@ -208,7 +210,7 @@ namespace PDF_Master.ViewModels.PageEdit
             set
             {
                 SetProperty(ref tbPageRange, value);
-                if(string.IsNullOrEmpty(TbPageRange))
+                if (string.IsNullOrEmpty(TbPageRange))
                 {
                     TbPageRange = "请输入范围";
                 }
@@ -312,11 +314,11 @@ namespace PDF_Master.ViewModels.PageEdit
             set
             {
                 SetProperty(ref canRedo, value);
-                if(viewContentViewModel!=null)
+                if (viewContentViewModel != null)
                 {
                     viewContentViewModel.CanRedo = this.CanRedo;
                 }
- 
+
             }
         }
 
@@ -336,7 +338,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <summary>
         /// 页面缩放的范围
         /// </summary>
-        private List<Size> ItemSizes = new List<Size>() { 
+        private List<Size> ItemSizes = new List<Size>() {
             new Size(104,142),
             new Size(208, 294),
             new Size(312,441)
@@ -472,7 +474,7 @@ namespace PDF_Master.ViewModels.PageEdit
             ZoomOutCommand = new DelegateCommand(ZoomOutCommandEvent, CanZoomOut).ObservesProperty(() => ZoomIndex);
             ShowPageSizeCommand = new DelegateCommand(ShowPageSize);
             CopyCommand = new DelegateCommand(copy);
-            PasteCommand = new DelegateCommand(paste,CanPasteExcute).ObservesProperty(() => CanPaste);
+            PasteCommand = new DelegateCommand(paste, CanPasteExcute).ObservesProperty(() => CanPaste);
             CutCommand = new DelegateCommand(cut);
             PrintCommand = new DelegateCommand(print);
             ClearSelectedCommand = new DelegateCommand(clearSelected);
@@ -494,9 +496,9 @@ namespace PDF_Master.ViewModels.PageEdit
 
         private void Instance_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
         {
-            if(e.PropertyName=="CopyDoc")
+            if (e.PropertyName == "CopyDoc")
             {
-                if(CacheFilePath.Instance.CopyDoc!=null)
+                if (CacheFilePath.Instance.CopyDoc != null)
                 {
                     CanPaste = true;
                 }
@@ -519,14 +521,14 @@ namespace PDF_Master.ViewModels.PageEdit
                 int insertIndex = listSelecedIndex;
 
                 //从文件插入到指定位置
-                var result = await InsertFromFile(listSelecedIndex+1,dialog.FileName);
-                if(result)
+                var result = await InsertFromFile(listSelecedIndex + 1, dialog.FileName);
+                if (result)
                 {
                     //插入成功后再删除原有页面
                     DoRemoveSelectedPages(new List<int>() { listSelecedIndex });
                 }
 
-                ReloadAfterOption(true, true, Tuple.Create(insertIndex-1, insertIndex + pageCount));
+                ReloadAfterOption(true, true, Tuple.Create(insertIndex - 1, insertIndex + pageCount));
                 IsLoading = Visibility.Collapsed;
             }
         }
@@ -538,8 +540,9 @@ namespace PDF_Master.ViewModels.PageEdit
         {
             DialogParameters valuePairs = new DialogParameters();
             valuePairs.Add(ParameterNames.PDFViewer, PDFViewer);
-            dialogs.ShowDialog(DialogNames.SplitDialog, valuePairs,e=> { 
-                if(e.Result==ButtonResult.OK&&e.Parameters!=null)
+            dialogs.ShowDialog(DialogNames.SplitDialog, valuePairs, e =>
+            {
+                if (e.Result == ButtonResult.OK && e.Parameters != null)
                 {
                     var model = e.Parameters.GetValue<HomePageSplitDialogModel>(ParameterNames.DataModel);
                     DoSplitPages(model);
@@ -552,11 +555,12 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         private void ExtractCommandEvent()
         {
-            dialogs.ShowDialog(DialogNames.ExtractDialog,null,e=> { 
-                if(e.Result==ButtonResult.OK&&e.Parameters!=null)
+            dialogs.ShowDialog(DialogNames.ExtractDialog, null, e =>
+            {
+                if (e.Result == ButtonResult.OK && e.Parameters != null)
                 {
                     var model = e.Parameters.GetValue<ExtractModel>(ParameterNames.DataModel);
-                    DoExtractPages(model.IsEveryPageToFile,model.IsDeleteAfterExtract);
+                    DoExtractPages(model.IsEveryPageToFile, model.IsDeleteAfterExtract);
                 }
             });
         }
@@ -566,22 +570,22 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         private async void InsertCommandEvent(object type)
         {
-            if((string)type==null)
+            if ((string)type == null)
             {
                 return;
             }
             //获取插入位置
             int insertIndex = 0;
-            if(listSelecedIndex<0)
+            if (listSelecedIndex < 0)
             {
                 insertIndex = 0;
             }
             else
             {
-                insertIndex = listSelecedIndex+1;
-                if(isMultiSelected)
+                insertIndex = listSelecedIndex + 1;
+                if (isMultiSelected)
                 {
-                    insertIndex = maxSelectedIndex+1;
+                    insertIndex = maxSelectedIndex + 1;
                 }
             }
             IsLoading = Visibility.Visible;
@@ -589,7 +593,7 @@ namespace PDF_Master.ViewModels.PageEdit
 
             PageEditHistory history = new PageEditHistory();
             history.InsertIndex = insertIndex;
-            if((string)type==ParameterNames.InsertType_Blank)
+            if ((string)type == ParameterNames.InsertType_Blank)
             {
                 history.Type = ActionType.InsertCustomPages;
                 history.InsertFilePath = "";
@@ -602,10 +606,10 @@ namespace PDF_Master.ViewModels.PageEdit
                 }
                 else
                 {
-                    result = PDFViewer.Document.InsertPage(insertIndex, PageEditItems[insertIndex-1].Size.Width, PageEditItems[insertIndex-1].Size.Height, null);
+                    result = PDFViewer.Document.InsertPage(insertIndex, PageEditItems[insertIndex - 1].Size.Width, PageEditItems[insertIndex - 1].Size.Height, null);
                     history.PageSize = PageEditItems[insertIndex - 1].Size;
                 }
-                if(!result)
+                if (!result)
                 {
                     IsLoading = Visibility.Collapsed;
                     ShowToast();
@@ -614,15 +618,15 @@ namespace PDF_Master.ViewModels.PageEdit
 
                 //UI层插入Item
                 var item = GetNewPageEditItem(insertIndex);
-                PageEditItems.Insert(insertIndex,item);
-         
+                PageEditItems.Insert(insertIndex, item);
+
 
-                ReloadAfterOption(true,true,Tuple.Create(insertIndex,insertIndex+1));
+                ReloadAfterOption(true, true, Tuple.Create(insertIndex, insertIndex + 1));
                 await Task.Delay(10);
                 //选中插入的页面
                 ListSelectedIndex = insertIndex;
             }
-            else if((string)type == ParameterNames.InsertType_File)
+            else if ((string)type == ParameterNames.InsertType_File)
             {
                 OpenFileDialog dialog = new OpenFileDialog();
                 dialog.Multiselect = false;
@@ -630,15 +634,15 @@ namespace PDF_Master.ViewModels.PageEdit
                 if ((bool)dialog.ShowDialog())
                 {
                     //插入文件
-                    var result = await InsertFromFile(insertIndex,dialog.FileName);
-                    if(!result)
+                    var result = await InsertFromFile(insertIndex, dialog.FileName);
+                    if (!result)
                     {
                         IsLoading = Visibility.Collapsed;
                         ShowToast();
                         return;
                     }
 
-                    ReloadAfterOption(true,true,Tuple.Create(0,PDFViewer.Document.PageCount));
+                    ReloadAfterOption(true, true, Tuple.Create(0, PDFViewer.Document.PageCount));
                 }
                 IsLoading = Visibility.Collapsed;
                 //里面附带了Undo栈记录,需要提前返回,避免重复记录
@@ -648,24 +652,25 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 DialogParameters keyValuePairs = new DialogParameters();
                 Size size = new Size();
-                size.Width =CommonHelper.GetUnitsFromPageSize(PDFViewer.Document.GetPageSize(listSelecedIndex).Width);
+                size.Width = CommonHelper.GetUnitsFromPageSize(PDFViewer.Document.GetPageSize(listSelecedIndex).Width);
                 size.Height = CommonHelper.GetUnitsFromPageSize(PDFViewer.Document.GetPageSize(listSelecedIndex).Height);
                 keyValuePairs.Add("CurrentPageSize", size);
                 //插入自定义页面
-                dialogs.ShowDialog(DialogNames.InsertDialog, keyValuePairs,e=> { 
-                    if(e.Result == ButtonResult.OK&&e.Parameters!=null)
+                dialogs.ShowDialog(DialogNames.InsertDialog, keyValuePairs, e =>
+                {
+                    if (e.Result == ButtonResult.OK && e.Parameters != null)
                     {
                         var model = e.Parameters.GetValue<CustomInsertModel>(ParameterNames.DataModel);
 
                         var result = InsertFromCustomPage(insertIndex, model.width, model.height, model.filepath);
-                        if(!result)
+                        if (!result)
                         {
                             return;
                         }
 
                         history.Type = ActionType.InsertCustomPages;
                         history.InsertFilePath = model.filepath;
-                        history.PageSize = new Size(model.width,model.height);
+                        history.PageSize = new Size(model.width, model.height);
 
                     }
                 });
@@ -685,7 +690,7 @@ namespace PDF_Master.ViewModels.PageEdit
             IsLoading = Visibility.Visible;
             await Task.Delay(3);
             DoRemoveSelectedPages();
-            ReloadAfterOption(true, true, Tuple.Create(0,PDFViewer.Document.PageCount));
+            ReloadAfterOption(true, true, Tuple.Create(0, PDFViewer.Document.PageCount));
             IsLoading = Visibility.Collapsed;
         }
 
@@ -713,7 +718,7 @@ namespace PDF_Master.ViewModels.PageEdit
             IsLoading = Visibility.Visible;
             await Task.Delay(3);
             List<int> pages = new List<int>();
-            for (int i = 0; i <PageEditItems.Count; i++)
+            for (int i = 0; i < PageEditItems.Count; i++)
             {
                 if (PageEditItems[i].Selected)
                 {
@@ -721,7 +726,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 }
             }
             DoReverse(pages);
-           
+
             IsLoading = Visibility.Collapsed;
         }
 
@@ -750,8 +755,8 @@ namespace PDF_Master.ViewModels.PageEdit
                     break;
                 }
 
-                var result = ExchangeItem(preindex,laterIndex);
-                if(!result)
+                var result = ExchangeItem(preindex, laterIndex);
+                if (!result)
                 {
                     ShowToast();
                     IsLoading = Visibility.Collapsed;
@@ -774,7 +779,7 @@ namespace PDF_Master.ViewModels.PageEdit
 
             ReloadAfterOption(true, true, null);
 
-            if(!isFromUndoRedo)
+            if (!isFromUndoRedo)
             {
                 PageEditHistory history = new PageEditHistory();
                 history.Type = ActionType.Reverse;
@@ -789,7 +794,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <param name="preiIndex"></param>
         /// <param name="laterIndex"></param>
         /// <returns></returns>
-        private bool ExchangeItem(int preiIndex,int laterIndex)
+        private bool ExchangeItem(int preiIndex, int laterIndex)
         {
             if (preiIndex == laterIndex)
             {
@@ -847,7 +852,7 @@ namespace PDF_Master.ViewModels.PageEdit
         private void ZoomInCommandEvent()
         {
             ZoomIndex++;
-            ChangeItemSize(ItemSizes[ZoomIndex+1]);
+            ChangeItemSize(ItemSizes[ZoomIndex + 1]);
 
             NotifyUIToRefresh();
         }
@@ -858,7 +863,7 @@ namespace PDF_Master.ViewModels.PageEdit
         private void ZoomOutCommandEvent()
         {
             ZoomIndex--;
-            ChangeItemSize(ItemSizes[ZoomIndex+1]);
+            ChangeItemSize(ItemSizes[ZoomIndex + 1]);
             NotifyUIToRefresh();
         }
 
@@ -950,15 +955,15 @@ namespace PDF_Master.ViewModels.PageEdit
                     string pageparm = CommonHelper.GetPageParmFromList(selectedPageList);
                     TbPageRange = pageparm;
                 }
-                
+
             }
 
             //Ctrl+A时让所有item选中
-            var isCtrlorShiftDown =( (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.A))|| (Keyboard.IsKeyDown(Key.RightCtrl) && Keyboard.IsKeyDown(Key.A)));
+            var isCtrlorShiftDown = ((Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.A)) || (Keyboard.IsKeyDown(Key.RightCtrl) && Keyboard.IsKeyDown(Key.A)));
             if (isCtrlorShiftDown)
             {
                 for (int i = 0; i < PageEditItems.Count; i++)
-                   
+
                 {
                     PageEditItems[i].Selected = true;
                 }
@@ -989,7 +994,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 return;
             }
 
-            if (args.Key != Key.Enter && args.Key != Key.Back && args.Key != Key.OemComma && args.Key!=Key.OemMinus && args.Key != Key.Subtract && !((args.Key >= Key.D0 && args.Key <= Key.D9) || (args.Key >= Key.NumPad0 && args.Key <= Key.NumPad9)))
+            if (args.Key != Key.Enter && args.Key != Key.Back && args.Key != Key.OemComma && args.Key != Key.OemMinus && args.Key != Key.Subtract && !((args.Key >= Key.D0 && args.Key <= Key.D9) || (args.Key >= Key.NumPad0 && args.Key <= Key.NumPad9)))
             {
                 args.Handled = true;
             }
@@ -1010,10 +1015,10 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 List<int> TargetPageIndexs = new List<int>();
                 var result = CommonHelper.GetPagesInRange(ref TargetPageIndexs, (args.OriginalSource as TextBox).Text, PDFViewer.Document.PageCount, new char[] { ',', ',' }, new char[] { '-' });
-                if (!result&&ComboxSelectIndex==5)
+                if (!result && ComboxSelectIndex == 5)
                 {
                     AlertsMessage alertsMessage = new AlertsMessage();
-                    alertsMessage.ShowDialog("","请输入有效范围","OK");
+                    alertsMessage.ShowDialog("", "请输入有效范围", "OK");
                     return;
                 }
 
@@ -1023,7 +1028,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 {
                     if (TargetPageIndexs.Contains(PageEditItems[i].PageNumber - 1))
                     {
-                        pageRange.Add(i+1);
+                        pageRange.Add(i + 1);
                     }
                 }
 
@@ -1038,13 +1043,13 @@ namespace PDF_Master.ViewModels.PageEdit
         private void lostfocus(object obj)
         {
             var args = obj as RoutedEventArgs;
-            if (args == null||(args.OriginalSource as TextBox)==null)
+            if (args == null || (args.OriginalSource as TextBox) == null)
             {
                 return;
             }
             List<int> TargetPageIndexs = new List<int>();
 
-            if(PageRangeItems.Contains((args.OriginalSource as TextBox).Text)&&ComboxSelectIndex!=5)
+            if (PageRangeItems.Contains((args.OriginalSource as TextBox).Text) && ComboxSelectIndex != 5)
             {
                 //选中其他项,失去焦点时不报错
                 return;
@@ -1092,7 +1097,7 @@ namespace PDF_Master.ViewModels.PageEdit
             printValue.Add(ParameterNames.PDFViewer, PDFViewer);
             printValue.Add(ParameterNames.FilePath, PDFViewer.Document.FileName);
             printValue.Add(ParameterNames.PrintCurrentPage, PDFViewer.CurrentIndex);
-            printValue.Add(ParameterNames.PageList,selectedPageList);
+            printValue.Add(ParameterNames.PageList, selectedPageList);
             dialogs.ShowDialog(DialogNames.HomePagePrinterDialog, printValue, e => { });
         }
 
@@ -1135,20 +1140,32 @@ namespace PDF_Master.ViewModels.PageEdit
                 dialogs.ShowDialog(DialogNames.IAPCompareDialog);
                 return;
             }
-            CacheFilePath.Instance.CopyDoc = null;
-            CacheFilePath.Instance.CopyDoc = CPDFDocument.CreateDocument();
-            List<int> pages = new List<int>();
-            for(int i=0;i<PageEditItems.Count;i++)
+            VerifyPasswordResult verifyResult = SecurityHelper.VerifyPasswordForSelectedPermissions(PDFViewer.Document, EnumPermissionsSet.StatusAllowsCopying, dialogs);
+            if (verifyResult.IsDiscryptied)
             {
-                if(PageEditItems[i].Selected)
+                if (verifyResult.Password != null)
                 {
-                    pages.Add(i + 1);
+                    PDFViewer.Document.CheckOwnerPassword(verifyResult.Password);
+                } 
+
+                CacheFilePath.Instance.CopyDoc = null;
+                CacheFilePath.Instance.CopyDoc = CPDFDocument.CreateDocument();
+                List<int> pages = new List<int>();
+                for (int i = 0; i < PageEditItems.Count; i++)
+                {
+                    if (PageEditItems[i].Selected)
+                    {
+                        pages.Add(i + 1);
+                    } 
+                } 
+                bool result = CacheFilePath.Instance.CopyDoc.ImportPages(PDFViewer.Document, String.Join(",", pages));
+                if (!result)
+                {
+                    ShowToast("复制失败");
+                    return;
                 }
-         
             }
-
-            bool result = CacheFilePath.Instance.CopyDoc.ImportPages(PDFViewer.Document, String.Join(",",pages));
-            if (!result)
+            else
             {
                 ShowToast("复制失败");
                 return;
@@ -1161,7 +1178,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <returns></returns>
         private bool CanPasteExcute()
         {
-            return this.CanPaste; 
+            return this.CanPaste;
         }
 
         /// <summary>
@@ -1205,7 +1222,7 @@ namespace PDF_Master.ViewModels.PageEdit
 
             //刷新页码等
             ReloadAfterOption(true, true, new Tuple<int, int>(0, PDFViewer.Document.PageCount));
-              NotifyUIToRefresh(pageRange);
+            NotifyUIToRefresh(pageRange);
             IsLoading = Visibility.Collapsed;
         }
 
@@ -1220,29 +1237,29 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 case ActionType.RightRotate:
                     var rightlist = history.SourceTargetValue.Keys.ToList<int>();
-                    RotateSelectedPages(false, rightlist,true);
+                    RotateSelectedPages(false, rightlist, true);
 
                     redoHistory.SourceTargetValue = history.SourceTargetValue;
                     redoHistory.Type = ActionType.LeftRotate;
                     break;
                 case ActionType.LeftRotate:
                     var leftlist = history.SourceTargetValue.Keys.ToList<int>();
-                    RotateSelectedPages(true, leftlist,true);
+                    RotateSelectedPages(true, leftlist, true);
 
                     redoHistory.SourceTargetValue = history.SourceTargetValue;
                     redoHistory.Type = ActionType.RightRotate;
                     break;
                 case ActionType.InsertFromFile:
                     List<int> pageList = new List<int>();
-                    for(int i=0;i<history.InsertPageCount;i++)
+                    for (int i = 0; i < history.InsertPageCount; i++)
                     {
-                        pageList.Add(history.InsertIndex+i);
+                        pageList.Add(history.InsertIndex + i);
                     }
                     DoRemoveSelectedPages(pageList, true);
                     redoHistory = history;
                     break;
                 case ActionType.InsertCustomPages:
-                    DoRemoveSelectedPages(new List<int> {history.InsertIndex},true);
+                    DoRemoveSelectedPages(new List<int> { history.InsertIndex }, true);
                     redoHistory = history;
                     break;
                 case ActionType.DragSort:
@@ -1250,18 +1267,18 @@ namespace PDF_Master.ViewModels.PageEdit
                     var SourceTargets = history.SourceTargetValue;
                     var keys = SourceTargets.Keys.ToArray();
                     Array.Reverse(keys);
-                    foreach(var key in keys)
+                    foreach (var key in keys)
                     {
                         MoveItemToIndex(SourceTargets[key], key);
                     }
                     //刷新页码等
-                    ReloadAfterOption(true,true,new Tuple<int, int>(0,PDFViewer.Document.PageCount));
+                    ReloadAfterOption(true, true, new Tuple<int, int>(0, PDFViewer.Document.PageCount));
 
                     List<int> selectedPages = new List<int>();
                     //将索引集合转换成页码集合
-                    foreach(var key in SourceTargets.Keys)
+                    foreach (var key in SourceTargets.Keys)
                     {
-                        selectedPages.Add(key+1);
+                        selectedPages.Add(key + 1);
                     }
                     //通知UI选中Item
                     NotifyUIToRefresh(selectedPages);
@@ -1289,7 +1306,7 @@ namespace PDF_Master.ViewModels.PageEdit
                     {
                         Pages.Add(key + 1);
                     }
-                    foreach(var key in SourceTarget.Values)
+                    foreach (var key in SourceTarget.Values)
                     {
                         Pages.Add(key + 1);
                     }
@@ -1303,7 +1320,7 @@ namespace PDF_Master.ViewModels.PageEdit
             RedoStack.Push(redoHistory);
             CanRedo = true;
             //检查是否可以再进行Undo
-            if(UndoStack.Count<=0)
+            if (UndoStack.Count <= 0)
             {
                 this.CanUndo = false;
             }
@@ -1320,20 +1337,20 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 case ActionType.RightRotate:
                     var rightlist = history.SourceTargetValue.Keys.ToList<int>();
-                    RotateSelectedPages(false, rightlist,true);
+                    RotateSelectedPages(false, rightlist, true);
 
                     undoHistory.SourceTargetValue = history.SourceTargetValue;
                     undoHistory.Type = ActionType.LeftRotate;
                     break;
                 case ActionType.LeftRotate:
                     var leftlist = history.SourceTargetValue.Keys.ToList<int>();
-                    RotateSelectedPages(true, leftlist,true);
+                    RotateSelectedPages(true, leftlist, true);
                     undoHistory.SourceTargetValue = history.SourceTargetValue;
                     undoHistory.Type = ActionType.RightRotate;
                     break;
                 case ActionType.InsertFromFile:
-                    await InsertFromFile(history.InsertIndex,history.InsertFilePath,history.InsertFilePassWord,true);
-                    ReloadAfterOption(true, true, Tuple.Create(history.InsertIndex-1, history.InsertIndex+history.InsertPageCount));
+                    await InsertFromFile(history.InsertIndex, history.InsertFilePath, history.InsertFilePassWord, true);
+                    ReloadAfterOption(true, true, Tuple.Create(history.InsertIndex - 1, history.InsertIndex + history.InsertPageCount));
                     undoHistory = history;
                     break;
                 case ActionType.InsertCustomPages:
@@ -1342,7 +1359,7 @@ namespace PDF_Master.ViewModels.PageEdit
                     undoHistory = history;
                     break;
                 case ActionType.DragSort:
-                    DragToSort(history.InsertIndex,history.SourceTargetValue.Keys.ToList<int>(),true);
+                    DragToSort(history.InsertIndex, history.SourceTargetValue.Keys.ToList<int>(), true);
                     undoHistory = history;
                     break;
                 case ActionType.Reverse:
@@ -1373,7 +1390,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <summary>
         /// 显示Toast提示
         /// </summary>
-        private void ShowToast(string content="")
+        private void ShowToast(string content = "")
         {
             if (!string.IsNullOrEmpty(content))
             {
@@ -1390,7 +1407,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// 通知UI刷新页面范围
         /// 或通过xaml来设置选中项
         /// </summary>vb nmjvcx
-        private void NotifyUIToRefresh(List<int> pageRange=null)
+        private void NotifyUIToRefresh(List<int> pageRange = null)
         {
             if (pageRange == null || pageRange.Count <= 0)
             {
@@ -1400,7 +1417,7 @@ namespace PDF_Master.ViewModels.PageEdit
             else
             {
                 //通知UI刷新页面范围
-                eventor.GetEvent<PageEditNotifyEvent>().Publish(new PageEditNotifyEventArgs(unicode,NotifyType.SelectItems,pageRange));
+                eventor.GetEvent<PageEditNotifyEvent>().Publish(new PageEditNotifyEventArgs(unicode, NotifyType.SelectItems, pageRange));
             }
         }
 
@@ -1440,9 +1457,9 @@ namespace PDF_Master.ViewModels.PageEdit
                 {
                     if (PageEditItems[i].Selected)
                     {
-                        
+
                         indexList.Add(i);
-                        
+
                     }
                 }
             }
@@ -1450,18 +1467,18 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 indexList = pageList;
             }
-            
-            if(indexList.Count>0&& indexList.Count==PDFViewer.Document.PageCount)
+
+            if (indexList.Count > 0 && indexList.Count == PDFViewer.Document.PageCount)
             {
                 AlertsMessage alertsMessage = new AlertsMessage();
-                alertsMessage.ShowDialog("","不能删除所有页面","OK");
+                alertsMessage.ShowDialog("", "不能删除所有页面", "OK");
                 return;
             }
 
             var result = PDFViewer.Document.RemovePages(indexList.ToArray());
             if (!result)
             {
-                 ShowToast();
+                ShowToast();
                 return;
             }
 
@@ -1486,7 +1503,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         /// <param name="isEveryPageToFile">是否每页生成一个文件</param>
         /// <param name="isDeleteAfterExtract">是否提取后删除页面</param>
-        private async void DoExtractPages(bool isEveryPageToFile,bool isDeleteAfterExtract)
+        private async void DoExtractPages(bool isEveryPageToFile, bool isDeleteAfterExtract)
         {
             System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog();
             if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
@@ -1494,7 +1511,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 if (string.IsNullOrEmpty(dialog.SelectedPath))
                 {
                     AlertsMessage alertsMessage = new AlertsMessage();
-                    alertsMessage.ShowDialog("","","OK");//补充提示文案
+                    alertsMessage.ShowDialog("", "", "OK");//补充提示文案
                     return;
                 }
             }
@@ -1505,9 +1522,9 @@ namespace PDF_Master.ViewModels.PageEdit
             IsLoading = Visibility.Visible;
             await Task.Delay(3);
             List<int> pagenums = new List<int>();
-            for(int i=0;i<PageEditItems.Count;i++)
+            for (int i = 0; i < PageEditItems.Count; i++)
             {
-                if(PageEditItems[i].Selected)
+                if (PageEditItems[i].Selected)
                 {
                     pagenums.Add(PageEditItems[i].PageNumber);
                 }
@@ -1549,22 +1566,22 @@ namespace PDF_Master.ViewModels.PageEdit
                 bool result = savedoc.ImportPages(PDFViewer.Document, range);
                 if (!result)
                 {
-                     ShowToast();
+                    ShowToast();
                     IsLoading = Visibility.Collapsed;
                     return;
                 }
                 result = savedoc.WriteToFilePath(path);
                 if (!result)
                 {
-                     ShowToast();
+                    ShowToast();
                 }
                 savedoc.Release();//释放内存
             }
 
-            if(isDeleteAfterExtract)
+            if (isDeleteAfterExtract)
             {
                 DoRemoveSelectedPages();
-                ReloadAfterOption(true,true,Tuple.Create(0,PDFViewer.Document.PageCount));
+                ReloadAfterOption(true, true, Tuple.Create(0, PDFViewer.Document.PageCount));
             }
 
             CommonHelper.ShowFileBrowser(selectedfile);
@@ -1662,7 +1679,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 }
                 else//自定义页码范围
                 {
-                    string pageRange="";
+                    string pageRange = "";
                     if (data.PageMode == HomePageSplitDialogModel.PageRangeMode.OddPage)
                     {
                         int[] page = new int[(PageCount + 1) / 2];
@@ -1694,14 +1711,14 @@ namespace PDF_Master.ViewModels.PageEdit
                     if (!result)
                     {
                         saveDoc1.Release();
-                         ShowToast();
+                        ShowToast();
                         return;
                     }
                     result = saveDoc1.WriteToFilePath(path1);
                     if (!result)
                     {
                         saveDoc1.Release();
-                         ShowToast();
+                        ShowToast();
                         return;
                     }
                     saveDoc1.Release();
@@ -1721,14 +1738,14 @@ namespace PDF_Master.ViewModels.PageEdit
                     if (!result)
                     {
                         saveDoc2.Release();
-                         ShowToast();
+                        ShowToast();
                         return;
                     }
                     result = saveDoc2.WriteToFilePath(path2);
                     if (!result)
                     {
                         saveDoc2.Release();
-                         ShowToast();
+                        ShowToast();
                         return;
                     }
                     selectedfile = path1;
@@ -1752,16 +1769,16 @@ namespace PDF_Master.ViewModels.PageEdit
             CPDFDocument doc = CPDFDocument.InitWithFilePath(filePath);
             if (doc == null)
             {
-                 ShowToast();
+                ShowToast();
                 return false;
             }
             string password = "";
             if (doc.IsLocked)
             {
-                if(!string.IsNullOrEmpty(oldPassWord))
+                if (!string.IsNullOrEmpty(oldPassWord))
                 {
-                    var result =  doc.UnlockWithPassword(oldPassWord);
-                    if(result)
+                    var result = doc.UnlockWithPassword(oldPassWord);
+                    if (result)
                     {
                         password = oldPassWord;
                     }
@@ -1788,7 +1805,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 }
             }
 
-           int pageCount = doc.PageCount;
+            int pageCount = doc.PageCount;
 
             //插入整个新文档
             //文档层插入
@@ -1815,7 +1832,7 @@ namespace PDF_Master.ViewModels.PageEdit
             List<int> pageRange = new List<int>();
             for (int i = 0; i < pageCount; i++)
             {
-                pageRange.Add(insertIndex+i+1);
+                pageRange.Add(insertIndex + i + 1);
             }
             NotifyUIToRefresh(pageRange);
 
@@ -1855,7 +1872,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <param name="height"></param>
         /// <param name="filePath"></param>
         /// <returns></returns>
-        private bool InsertFromCustomPage(int insertIndex,double width,double height,string filePath)
+        private bool InsertFromCustomPage(int insertIndex, double width, double height, string filePath)
         {
             try
             {
@@ -1948,7 +1965,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// 旋转所有选中页面
         /// </summary>
         /// <param name="rightRotate"></param>
-        private async void RotateSelectedPages(bool rightRotate = true,List<int> pageitems=null,bool isFromUndoRedo = false)
+        private async void RotateSelectedPages(bool rightRotate = true, List<int> pageitems = null, bool isFromUndoRedo = false)
         {
             //付费锁
             if (!App.IsLogin)
@@ -2020,7 +2037,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 PageEditItems[i].PageNumber = i + 1;
                 PageEditItems[i].ShowPageSize = HasShowPageSize == Visibility.Visible ? true : false;
             }
-            
+
         }
 
         /// <summary>
@@ -2050,7 +2067,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 case 0:
                     for (int i = 0; i < PageEditItems.Count; i++)
                     {
-                        pageRange.Add(i+1);
+                        pageRange.Add(i + 1);
                     }
                     break;
 
@@ -2101,7 +2118,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 default:
                     break;
             }
-            if(pageRange.Count>0)
+            if (pageRange.Count > 0)
             {
                 NotifyUIToRefresh(pageRange);
             }
@@ -2123,7 +2140,7 @@ namespace PDF_Master.ViewModels.PageEdit
         private void ShowPageSize()
         {
             bool show = true;
-            if(HasShowPageSize== Visibility.Visible)
+            if (HasShowPageSize == Visibility.Visible)
             {
                 show = false;
                 HasShowPageSize = Visibility.Collapsed;
@@ -2145,7 +2162,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         private void GetSourceItems(bool isFirstLoad)
         {
-            if (isFirstLoad||IsBOTAThumb==Visibility.Visible)
+            if (isFirstLoad || IsBOTAThumb == Visibility.Visible)
             {
                 PageEditItems.Clear();
                 for (int i = 0; i < PDFViewer.Document.PageCount; i++)
@@ -2203,7 +2220,7 @@ namespace PDF_Master.ViewModels.PageEdit
         {
             for (int i = startIndex; i <= endIndex; i++)
             {
-                if (i <= PageEditItems.Count- 1 && i >= 0 && PageEditItems.Count > 0)
+                if (i <= PageEditItems.Count - 1 && i >= 0 && PageEditItems.Count > 0)
                 {
                     //宽高为样式中图片控件宽高
                     if (PageEditItems[i].isVertical)
@@ -2239,7 +2256,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         /// <param name="targetIndex"></param>
         /// <param name="pageIndexs"></param>
-        public void DragToSort(int targetIndex,List<int> pageIndexs,bool IsFromUndoRedo =false)
+        public void DragToSort(int targetIndex, List<int> pageIndexs, bool IsFromUndoRedo = false)
         {
             //拖拽排序后需要重新选中项的集合
             List<int> selectedPages = new List<int>();
@@ -2260,12 +2277,12 @@ namespace PDF_Master.ViewModels.PageEdit
                     // list.Add(PageEditListBox.Items[pageIndexs[i]] as ListBoxItem);
                     //sourceindex.Add(pageIndexs[i]);
                     result = MoveItemToIndex(pageIndexs[i], targetIndex + i);
-                    if(!result)
+                    if (!result)
                     {
                         return;
                     }
                     SourceTargetValue.Add(pageIndexs[i], targetIndex + i);
-                    selectedPages.Add(targetIndex + i+1);
+                    selectedPages.Add(targetIndex + i + 1);
                 }
             }
             else if (targetIndex > pageIndexs[pageIndexs.Count - 1])
@@ -2323,7 +2340,7 @@ namespace PDF_Master.ViewModels.PageEdit
             //通知UI选中Items
             //NotifyUIToRefresh(selectedPages);
             //刷新页码和图片
-            ReloadAfterOption(true,true,new Tuple<int, int>(0,PDFViewer.Document.PageCount));
+            ReloadAfterOption(true, true, new Tuple<int, int>(0, PDFViewer.Document.PageCount));
 
             if (!IsFromUndoRedo)
             {
@@ -2421,14 +2438,14 @@ namespace PDF_Master.ViewModels.PageEdit
                     PDFViewer.AnnotEditHandler += PDFViewer_AnnotEditHandler;
 
                     ZoomIndex = 0;
-                    if(viewContentViewModel!=null)
+                    if (viewContentViewModel != null)
                     {
                         viewContentViewModel.PageEditUndo = Undo;
                         viewContentViewModel.PageEditRedo = Redo;
                     }
                 }
                 //BOTA缩略图时,显示不同的菜单栏
-                if(isBOTA)
+                if (isBOTA)
                 {
                     IsBOTAThumb = Visibility.Visible;
                 }
@@ -2458,9 +2475,9 @@ namespace PDF_Master.ViewModels.PageEdit
 
         private void PDFViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
         {
-            if(e.Key== "PageNum")
+            if (e.Key == "PageNum")
             {
-                NotifyUIToRefresh(new List<int> { (e.Value as ComPDFKitViewer.RenderData).PageIndex});
+                NotifyUIToRefresh(new List<int> { (e.Value as ComPDFKitViewer.RenderData).PageIndex });
             }
         }
         #endregion

+ 7 - 2
PDF Office/ViewModels/PropertyPanel/AnnotPanel/SnapshotEditMenuViewModel.cs

@@ -30,11 +30,16 @@ using Microsoft.Office.Interop.Word;
 using static Dropbox.Api.Sharing.ListFileMembersIndividualResult;
 using Prism.Regions;
 using System.Windows.Input;
+using Microsoft.Office.Interop.Excel;
+using static PDF_Master.Model.Dialog.ToolsDialogs.SaftyDialogs.DeleteSafetySettintgsModel;
+using Prism.Services.Dialogs;
 
 namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
 {
     public class SnapshotEditMenuViewModel : BindableBase
     {
+        public IDialogService dialogs;
+
         public CustomIconToggleBtn ToggleBtn { get; set; }
         public SnapshotEditToolArgs SnapToolArgs { get; set; }
         public CPDFViewer PDFViewer { get; set; }
@@ -319,7 +324,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         /// 复制
         /// </summary>
         private void CopyEvent()
-        {
+        { 
             if (SnapToolArgs != null)
             {
                 WriteableBitmap saveBitmap = SnapToolArgs.GetSnapshotImage();
@@ -335,7 +340,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                         SnapToolEvent.Invoke(this, param);
                     }
                 }
-            }
+            } 
         }
 
         private System.Drawing.Bitmap BitmapFromWriteableBitmap(WriteableBitmap writeBmp)

+ 2 - 2
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Command.cs

@@ -640,13 +640,13 @@ namespace PDF_Master.ViewModels.Tools
         {
             if (e.Command == ApplicationCommands.Copy)
             {
-                VerifyPasswordResult result = SecurityHelper.VerifyPasswordForSelectedPermissions(PDFViewer.Document, Model.Dialog.ToolsDialogs.SaftyDialogs.EnumPermissionsSet.StatusAllowsPrinting, dialogs);
+                VerifyPasswordResult result = SecurityHelper.VerifyPasswordForSelectedPermissions(PDFViewer.Document, Model.Dialog.ToolsDialogs.SaftyDialogs.EnumPermissionsSet.StatusAllowsCopying, dialogs);
                 if (result.IsDiscryptied)
                 {
                     if (result.Password != null)
                     {
                         string filePath = PDFViewer.Document.FilePath;
-                        var unlockresult = PDFViewer.Document.UnlockWithPassword(result.Password);
+                        var unlockresult = PDFViewer.Document.CheckOwnerPassword(result.Password);
                     }
                 }
                 else

+ 0 - 7
PDF Office/ViewModels/Tools/ToolsBarContentViewModel.cs

@@ -207,13 +207,6 @@ namespace PDF_Master.ViewModels.Tools
             { 
                 if (result.Password != null)
                 {
-                    //string filePath = PDFViewer.Document.FilePath;
-                    //PDFViewer.CloseDocument();
-                    //PDFViewer.InitDocument(filePath);
-                    //if (PDFViewer.Document != null)
-                    //{
-                    //    PDFViewer.Load();
-                    //}
                     PDFViewer.Document.CheckOwnerPassword(result.Password);
                 }