SetPasswordDialogViewModel.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. using ComPDFKit.PDFDocument;
  2. using PDF_Office.CustomControl;
  3. using PDF_Office.Model;
  4. using PDF_Office.Model.Dialog.ToolsDialogs.SaftyDialogs;
  5. using Prism.Commands;
  6. using Prism.Mvvm;
  7. using Prism.Services.Dialogs;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.ComponentModel;
  11. using System.Runtime.CompilerServices;
  12. using System.Windows;
  13. using System.Windows.Forms;
  14. using System.Windows.Controls;
  15. using CheckBox = System.Windows.Controls.CheckBox;
  16. using System.Drawing.Printing;
  17. using static PDF_Office.Model.Dialog.ToolsDialogs.SaftyDialogs.SetPasswordDialogModel;
  18. using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePageBatchProcessing;
  19. using ComPDFKitViewer.PdfViewer;
  20. using Prism.Regions;
  21. using PDF_Office.Helper;
  22. namespace PDF_Office.ViewModels.Dialog.ToolsDialogs.SaftyDialogs
  23. {
  24. public class SetPasswordDialogViewModel : BindableBase, IDialogAware
  25. {
  26. #region 参数和属性
  27. private SetPasswordDialogModel setPasswordDialogModel = new SetPasswordDialogModel();
  28. private CPDFViewer cPDFViewer;
  29. public IDialogService dialogs;
  30. private ViewContentViewModel viewContentViewModel;
  31. private EnumPermissionsMod enumPermissionsMod = EnumPermissionsMod.StatusUnknown | EnumPermissionsMod.StatusRestrictPrinting | EnumPermissionsMod.StatusRestrictCopying;
  32. private bool _enableConfirm = false;
  33. public bool EnableConfirm
  34. {
  35. get { return _enableConfirm; }
  36. set { SetProperty(ref _enableConfirm, value); }
  37. }
  38. private string _openPassword = "";
  39. public string OpenPassword
  40. {
  41. get { return _openPassword; }
  42. set
  43. {
  44. SetProperty(ref _openPassword, value);
  45. CheckEnableConfirmEncrypt();
  46. }
  47. }
  48. private string _permissionsPassword = "";
  49. public string PermissionsPassword
  50. {
  51. get { return _permissionsPassword; }
  52. set
  53. {
  54. SetProperty(ref _permissionsPassword, value);
  55. CheckEnableConfirmEncrypt();
  56. }
  57. }
  58. private string _openPasswordMsg = "Open Password";
  59. public string OpenPasswordMsg
  60. {
  61. get { return _openPasswordMsg; }
  62. set
  63. {
  64. SetProperty(ref _openPasswordMsg, value);
  65. }
  66. }
  67. private string _permissionsPasswordMsg = "Permission Password";
  68. public string PermissionsPasswordMsg
  69. {
  70. get { return _permissionsPasswordMsg; }
  71. set
  72. {
  73. SetProperty(ref _permissionsPasswordMsg, value);
  74. }
  75. }
  76. private Visibility _openTextVisibility = Visibility.Collapsed;
  77. public Visibility OpenTextVisibility
  78. {
  79. get { return _openTextVisibility; }
  80. set
  81. {
  82. SetProperty(ref _openTextVisibility, value);
  83. }
  84. }
  85. private Visibility _openPasswordVisibility = Visibility.Visible;
  86. public Visibility OpenPasswordVisibility
  87. {
  88. get { return _openPasswordVisibility; }
  89. set
  90. {
  91. if (value == Visibility.Visible)
  92. {
  93. OpenTextVisibility = Visibility.Collapsed;
  94. }
  95. else
  96. {
  97. OpenTextVisibility = Visibility.Visible;
  98. }
  99. SetProperty(ref _openPasswordVisibility, value);
  100. }
  101. }
  102. private Visibility _permissionsPasswordVisibility = Visibility.Visible;
  103. public Visibility PermissionsPasswordVisibility
  104. {
  105. get { return _permissionsPasswordVisibility; }
  106. set
  107. {
  108. if (value == Visibility.Visible)
  109. {
  110. PermissionsTextVisibility = Visibility.Collapsed;
  111. }
  112. else
  113. {
  114. PermissionsTextVisibility = Visibility.Visible;
  115. }
  116. SetProperty(ref _permissionsPasswordVisibility, value);
  117. }
  118. }
  119. private Visibility _permissionsTextVisibility = Visibility.Collapsed;
  120. public Visibility PermissionsTextVisibility
  121. {
  122. get { return _permissionsTextVisibility; }
  123. set { SetProperty(ref _permissionsTextVisibility, value); }
  124. }
  125. private bool? _isRestrictPrinting;
  126. public bool? IsRestrictPrinting
  127. {
  128. get { return _isRestrictPrinting; }
  129. set { SetProperty(ref _isRestrictPrinting, value); }
  130. }
  131. private bool? _isRestrictCopying;
  132. public bool? IsRestrictCopying
  133. {
  134. get { return _isRestrictCopying; }
  135. set { SetProperty(ref _isRestrictCopying, value); }
  136. }
  137. private bool _needOpenPassword;
  138. public bool NeedOpenPassword
  139. {
  140. get { return _needOpenPassword; }
  141. set { SetProperty(ref _needOpenPassword, value); }
  142. }
  143. private bool _needPermissionsPassword;
  144. public bool NeedPermissionsPassword
  145. {
  146. get { return _needPermissionsPassword; }
  147. set { SetProperty(ref _needPermissionsPassword, value); }
  148. }
  149. private bool _isOpenPasswordDisplayed = false;
  150. public bool IsOpenPasswordDisplayed
  151. {
  152. get { return _isOpenPasswordDisplayed; }
  153. set { SetProperty(ref _isOpenPasswordDisplayed, value); }
  154. }
  155. private bool _isPermissionsPasswordDisplayed = false;
  156. public bool IsPermissionsPasswordDisplayed
  157. {
  158. get { return _isPermissionsPasswordDisplayed; }
  159. set { SetProperty(ref _isPermissionsPasswordDisplayed, value); }
  160. }
  161. #endregion
  162. #region 委托声明
  163. public DelegateCommand<object> DisplayPasswordCommand { get; set; }
  164. public DelegateCommand<object> SetOpenPasswordCommand { get; set; }
  165. public DelegateCommand<object> SetPermissionsPasswordCommand { get; set; }
  166. public DelegateCommand<object> SetRestrictCommand { get; set; }
  167. public DelegateCommand EncryptCommand { get; set; }
  168. public DelegateCommand CancelEncryptCommand { get; set; }
  169. public DelegateCommand BatchSetPasswordCommand { get; set; }
  170. #endregion
  171. public SetPasswordDialogViewModel(IDialogService dialogService)
  172. {
  173. dialogs = dialogService;
  174. DisplayPasswordCommand = new DelegateCommand<object>(DisplayPassword);
  175. SetOpenPasswordCommand = new DelegateCommand<object>(SetOpenPassword);
  176. SetPermissionsPasswordCommand = new DelegateCommand<object>(SetPermissionsPassword);
  177. SetRestrictCommand = new DelegateCommand<object>(SetRestrict);
  178. EncryptCommand = new DelegateCommand(Encrypt);
  179. CancelEncryptCommand = new DelegateCommand(CancelEncrypt);
  180. BatchSetPasswordCommand = new DelegateCommand(BatchSetPassword);
  181. }
  182. #region 检查和初始化
  183. private void CheckEnableConfirmEncrypt()
  184. {
  185. EnableConfirm = true;
  186. if (!(NeedOpenPassword || NeedPermissionsPassword))
  187. {
  188. EnableConfirm = false;
  189. }
  190. if (NeedOpenPassword && string.IsNullOrEmpty(OpenPassword))
  191. {
  192. EnableConfirm = false;
  193. }
  194. if (NeedPermissionsPassword && string.IsNullOrEmpty(PermissionsPassword))
  195. {
  196. EnableConfirm = false;
  197. }
  198. if (NeedPermissionsPassword && (!((bool)IsRestrictCopying || (bool)IsRestrictPrinting)))
  199. {
  200. EnableConfirm = false;
  201. }
  202. }
  203. #endregion
  204. #region 逻辑函数
  205. public void DisplayPassword(object e)
  206. {
  207. var chk = e as CheckBox;
  208. if (chk != null)
  209. {
  210. if (chk.Name == "DisplayOpenPasswordChk")
  211. {
  212. if (chk.IsChecked == true)
  213. {
  214. OpenPasswordVisibility = Visibility.Collapsed;
  215. }
  216. else
  217. {
  218. OpenPasswordVisibility = Visibility.Visible;
  219. }
  220. }
  221. else
  222. {
  223. if (chk.IsChecked == true)
  224. {
  225. PermissionsPasswordVisibility = Visibility.Collapsed;
  226. }
  227. else
  228. {
  229. PermissionsPasswordVisibility = Visibility.Visible;
  230. }
  231. }
  232. }
  233. }
  234. public void SetOpenPassword(object e)
  235. {
  236. var chk = e as CheckBox;
  237. if (chk != null)
  238. {
  239. IsOpenPasswordDisplayed = false;
  240. OpenPasswordVisibility = Visibility.Visible;
  241. }
  242. CheckEnableConfirmEncrypt();
  243. }
  244. public void SetPermissionsPassword(object e)
  245. {
  246. var chk = e as CheckBox;
  247. if (chk != null)
  248. {
  249. IsPermissionsPasswordDisplayed = false;
  250. PermissionsPasswordVisibility = Visibility.Visible;
  251. if (chk.IsChecked == true)
  252. {
  253. IsRestrictPrinting = true;
  254. IsRestrictCopying = true;
  255. }
  256. else
  257. {
  258. IsRestrictPrinting = false;
  259. IsRestrictCopying = false;
  260. }
  261. }
  262. CheckEnableConfirmEncrypt();
  263. }
  264. public void SetRestrict(object e)
  265. {
  266. var chk = e as CheckBox;
  267. if (chk != null)
  268. {
  269. if ((bool)chk.IsChecked)
  270. {
  271. if (chk.Tag.ToString() == "Printing")
  272. {
  273. enumPermissionsMod |= EnumPermissionsMod.StatusRestrictPrinting;
  274. }
  275. else if (chk.Tag.ToString() == "Copying")
  276. {
  277. enumPermissionsMod |= EnumPermissionsMod.StatusRestrictCopying;
  278. }
  279. }
  280. else
  281. {
  282. if (chk.Tag.ToString() == "Printing")
  283. {
  284. enumPermissionsMod -= EnumPermissionsMod.StatusRestrictPrinting;
  285. }
  286. else if (chk.Tag.ToString() == "Copying")
  287. {
  288. enumPermissionsMod -= EnumPermissionsMod.StatusRestrictCopying;
  289. }
  290. }
  291. }
  292. CheckEnableConfirmEncrypt();
  293. }
  294. private void BatchSetPassword()
  295. {
  296. DialogParameters setPasswordpdf = new DialogParameters();
  297. setPasswordpdf.Add(ParameterNames.BatchProcessing_Name, "2");
  298. HomePageBatchProcessingDialogModel.FilePaths = new List<string> { cPDFViewer.Document.FilePath.ToString() };
  299. HomePageBatchProcessingDialogModel.BatchProcessingIndex = 2;
  300. setPasswordpdf.Add(ParameterNames.FilePath, new string[] { cPDFViewer.Document.FilePath.ToString() });
  301. dialogs.ShowDialog(DialogNames.HomePageBatchProcessingDialog, setPasswordpdf, e => { });
  302. }
  303. public void Encrypt()
  304. {
  305. viewContentViewModel.SecurityInfo.IsPasswordChanged = true;
  306. if (NeedOpenPassword && (!string.IsNullOrEmpty(OpenPassword)))
  307. {
  308. this.viewContentViewModel.SecurityInfo.NeedOpenPassword = true;
  309. this.viewContentViewModel.SecurityInfo.OpenPassword = OpenPassword;
  310. }
  311. else
  312. {
  313. this.viewContentViewModel.SecurityInfo.NeedOpenPassword = false;
  314. viewContentViewModel.SecurityInfo.OpenPassword = null;
  315. }
  316. if (NeedPermissionsPassword && (!string.IsNullOrEmpty(PermissionsPassword)))
  317. {
  318. this.viewContentViewModel.SecurityInfo.NeedPermissionsPassword = true;
  319. viewContentViewModel.SecurityInfo.PermissionsPassword = PermissionsPassword;
  320. viewContentViewModel.SecurityInfo.CPDFPermissionsInfo = CreatePermissionsInfo(enumPermissionsMod);
  321. }
  322. else
  323. {
  324. this.viewContentViewModel.SecurityInfo.NeedPermissionsPassword = false;
  325. viewContentViewModel.SecurityInfo.PermissionsPassword = null;
  326. viewContentViewModel.SecurityInfo.CPDFPermissionsInfo = CreateDefaultPermissionsInfo();
  327. }
  328. RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.OK));
  329. }
  330. //public void Encrypt()
  331. //{
  332. // string openPassword = "";
  333. // string permissionsPassword = "";
  334. // CPDFPermissionsInfo permissionsInfo = null;
  335. // if (NeedOpenPassword)
  336. // {
  337. // if (!string.IsNullOrEmpty(OpenPassword))
  338. // {
  339. // openPassword = OpenPassword;
  340. // }
  341. // }
  342. // if (NeedPermissionsPassword && (!string.IsNullOrEmpty(PermissionsPassword)))
  343. // {
  344. // permissionsPassword = PermissionsPassword;
  345. // permissionsInfo = CreatePermissionsInfo(enumPermissionsMod);
  346. // }
  347. // else
  348. // {
  349. // permissionsInfo = CreateDefaultPermissionsInfo();
  350. // }
  351. // System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog();
  352. // /*
  353. // *设置这个对话框的起始保存路径
  354. // */
  355. // sfd.InitialDirectory = cPDFViewer.Document.FilePath;
  356. // /*
  357. // *设置保存的文件的类型,注意过滤器的语法 例子:“文件类型|*.后缀名;*.后缀名;”
  358. // */
  359. // sfd.Filter = "PDF|*.pdf;";
  360. // /*
  361. // *调用ShowDialog()方法显示该对话框,该方法的返回值代表用户是否点击了确定按钮
  362. // */
  363. // sfd.FileName = cPDFViewer.Document.FileName + "_EncryptedFile.pdf";
  364. // /*
  365. // * 做一些工作
  366. // */
  367. // if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  368. // {
  369. // cPDFViewer.Document.Encrypt(openPassword, permissionsPassword, permissionsInfo);
  370. // cPDFViewer.Document.WriteToFilePath(sfd.FileName);
  371. // MessageBoxEx.Show("保存成功");
  372. // RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.OK));
  373. // }
  374. // else
  375. // {
  376. // }
  377. //}
  378. public void CancelEncrypt() => RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.Cancel));
  379. #endregion
  380. #region 框架相关
  381. public string Title => "";
  382. public event Action<IDialogResult> RequestClose;
  383. public bool CanCloseDialog()
  384. {
  385. return true;
  386. }
  387. public void OnDialogClosed()
  388. {
  389. }
  390. public void OnDialogOpened(IDialogParameters parameters)
  391. {
  392. parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out cPDFViewer);
  393. parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
  394. }
  395. #endregion
  396. }
  397. }