using ComPDFKit.PDFDocument; using PDF_Office.CustomControl; using PDF_Office.Helper; using PDF_Office.Model; using PDF_Office.Model.Dialog.ToolsDialogs.SaftyDialogs; using Prism.Commands; using Prism.Mvvm; using Prism.Services.Dialogs; using System; using System.Windows.Forms; using static PDF_Office.Model.Dialog.ToolsDialogs.SaftyDialogs.DeleteSafetySettintgsModel; namespace PDF_Office.ViewModels.Dialog.ToolsDialogs.SaftyDialogs { public class DeleteSafetySettingsDialogViewModel : BindableBase, IDialogAware { #region 参数和属性 DeleteSafetySettintgsModel deleteSafetySettintgsModel; public IDialogService dialogs; private CPDFDocument document; private string _deleteSecurityMsg; public string DeleteSecurityMsg { get { return _deleteSecurityMsg; } set { SetProperty(ref _deleteSecurityMsg, value); } } #endregion #region 委托声明 public DelegateCommand CancelCommand { get; set; } public DelegateCommand RemoveSecuritySettingsCommand { get; set; } #endregion public DeleteSafetySettingsDialogViewModel(IDialogService dialogService) { dialogs = dialogService; RemoveSecuritySettingsCommand = new DelegateCommand(RemoveSecuritySettings); CancelCommand = new DelegateCommand(Cancel); } #region 检查函数 /// /// 检测是否需要输入密码 /// /// /// EnumNeedPassword.Status /// /// /// /// :需要确认密码; /// EnumNeedPassword.StatusDirectDescrypt:直接执行操作 /// EnumNeedPassword.StatusCannotDecrypt:无可执行操作。 /// private DeleteSafetySettintgsModel.EnumNeedPassword CheckNeedPassword() { try { if (document.IsLocked) { return DeleteSafetySettintgsModel.EnumNeedPassword.StatusVerifyPassword; } else { if (SecurityHelper.CheckHaveAllPermissions(document)) { return DeleteSafetySettintgsModel.EnumNeedPassword.StatusDirectDescrypt; } else { return DeleteSafetySettintgsModel.EnumNeedPassword.StatusVerifyPassword; } } } catch { return EnumNeedPassword.StatusCannotDecrypt; } } #endregion #region 逻辑函数 /// /// 逻辑优化:判权操作放到密码弹窗里,所以一旦进入该状态,可以直接清除权限 /// public void RemoveSecuritySettings() { System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog(); /* *设置这个对话框的起始保存路径 */ sfd.InitialDirectory = document.FilePath; /* *设置保存的文件的类型,注意过滤器的语法 例子:“文件类型|*.后缀名;*.后缀名;” */ sfd.Filter = "PDF|*.pdf;"; /* *调用ShowDialog()方法显示该对话框,该方法的返回值代表用户是否点击了确定按钮 */ sfd.FileName = document.FileName + "_DecryptedFile.pdf"; /* * 做一些工作 */ if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if(document.Descrypt(sfd.FileName)){ MessageBoxEx.Show("保存成功"); RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.OK)); } else { ///TODO 不明原因干扰 } } else { MessageBox.Show("取消保存"); } } private void Cancel() { RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.Cancel)); } #endregion #region 框架相关 public string Title => ""; public event Action RequestClose; public bool CanCloseDialog() { return true; } public void OnDialogClosed() { } public void OnDialogOpened(IDialogParameters parameters) { CPDFDocument doc = null; parameters.TryGetValue(ParameterNames.PDFDocument, out doc); if (doc != null) { document = doc; DeleteSecurityMsg = "Are you sure you want to remove the security settings for”" + document.FileName + "” documents?"; } } #endregion } }