CompressDialogModel.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using ComPDFKit.PDFDocument;
  2. using Microsoft.Office.Interop.Word;
  3. using PDF_Master.Helper;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Task = System.Threading.Tasks.Task;
  11. namespace PDF_Master.Model.Dialog.ToolsDialogs
  12. {
  13. public class CompressDialogModel
  14. {
  15. CPDFDocument tempDocument = null;
  16. IntPtr compressingIntpr = IntPtr.Zero;
  17. public enum EnumQualityLevel
  18. {
  19. StatusLarge = 100,
  20. StatusStandard = 80,
  21. StatusDefault = 40,
  22. StatusLittle = 40,
  23. StatusMicro = 10
  24. }
  25. public EnumQualityLevel CompressQuality { get; set; }
  26. public static string PageIndex { get; set; }
  27. public void CompressClear()
  28. {
  29. tempDocument.CompressFile_Cancel(compressingIntpr);
  30. App.mainWindowViewModel.IsProcessVisible = System.Windows.Visibility.Collapsed;
  31. }
  32. private int GetIndex(int pageindex)
  33. {
  34. App.mainWindowViewModel.Value = (pageindex + 1);
  35. if (App.mainWindowViewModel.Value == App.mainWindowViewModel.MaxValue) { App.mainWindowViewModel.IsProcessVisible = System.Windows.Visibility.Collapsed; }
  36. return 0;
  37. }
  38. public async void OnOpened(Prism.Services.Dialogs.DialogResult e)
  39. {
  40. string filepath = "";
  41. string password = "";
  42. try
  43. {
  44. if (e.Result == Prism.Services.Dialogs.ButtonResult.Cancel || e.Result == Prism.Services.Dialogs.ButtonResult.None) { return; }
  45. CPDFDocument doc = null;
  46. CPDFDocument.GetPageIndexDelegate indexDelegate = null;
  47. int compressquality = 45;
  48. doc = e.Parameters.GetValue<CPDFDocument>(ParameterNames.PDFDocument);
  49. filepath = e.Parameters.GetValue<string>(ParameterNames.FilePath);
  50. password = e.Parameters.GetValue<string>(ParameterNames.PassWord);
  51. compressquality = e.Parameters.GetValue<int>("compressDialogModel.CompressQuality");
  52. if (doc != null)
  53. {
  54. App.mainWindowViewModel.Value = 0;
  55. App.mainWindowViewModel.ProgressTitle = "Compressing";
  56. App.mainWindowViewModel.IsProcessVisible = System.Windows.Visibility.Visible;
  57. App.mainWindowViewModel.MaxValue = doc.PageCount;
  58. CPDFDocument document = CPDFDocument.InitWithFilePath(doc.FilePath);
  59. document.UnlockWithPassword(password);
  60. indexDelegate += GetIndex;
  61. compressingIntpr = document.CompressFile_Init(compressquality, indexDelegate);
  62. //GC.KeepAlive(indexDelegate);
  63. tempDocument = document;
  64. Trace.WriteLine("compressDialogModel.CompressQuality" + compressquality);
  65. App.mainWindowViewModel.ProcessCloseAction = CompressClear;
  66. if (await Task.Run<bool>(() => { return document.CompressFile_Start(compressingIntpr, filepath); })) { CommonHelper.ShowFileBrowser(filepath); }
  67. document.Release();
  68. }
  69. }
  70. catch {
  71. tempDocument.CompressFile_Cancel(compressingIntpr);
  72. App.mainWindowViewModel.IsProcessVisible = System.Windows.Visibility.Collapsed;
  73. }
  74. }
  75. }
  76. }