using ComPDFKit.PDFDocument; using PDF_Office.Model; using PDF_Office.Model.Dialog.ToolsDialogs; using Prism.Commands; using Prism.Mvvm; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using System.Xml.Linq; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window; namespace PDF_Office.ViewModels.Dialog.ToolsDialogs { public class ToolsProgressBarDialogViewModel : BindableBase, IDialogAware { private IntPtr compressingIntpr = IntPtr.Zero; private CPDFDocument.GetPageIndexDelegate indexDelegate = null; private CPDFDocument tempDocument; private string _pageIndex = "0"; /// /// 页面尺寸 /// public string PageIndex { get { return _pageIndex; } set { SetProperty(ref _pageIndex, value); } } private string _pageNumber = ""; /// /// 页面尺寸 /// public string PageNumber { get { return _pageNumber; } set { SetProperty(ref _pageNumber, value); } } private int GetIndex(int pageindex) { PageIndex= pageindex.ToString(); return 0; } public ToolsProgressBarDialogViewModel() { } public string Title => ""; public event Action RequestClose; public bool CanCloseDialog() { return true; } public void OnDialogClosed() { tempDocument.CompressFile_Cancel(compressingIntpr); } public async void OnDialogOpened(IDialogParameters parameters) { CPDFDocument doc = null; string filepath = ""; int compressquality=45; parameters.TryGetValue(ParameterNames.PDFDocument, out doc); parameters.TryGetValue(ParameterNames.FilePath, out filepath); parameters.TryGetValue("compressDialogModel.CompressQuality", out compressquality); if (doc != null) { PageNumber = doc.PageCount.ToString(); CPDFDocument document = CPDFDocument.InitWithFilePath(doc.FilePath); indexDelegate += GetIndex; compressingIntpr = document.CompressFile_Init(compressquality, indexDelegate); //GC.KeepAlive(indexDelegate); tempDocument = document; Trace.WriteLine("compressDialogModel.CompressQuality" + compressquality); await Task.Run(() => { return document.CompressFile_Start(compressingIntpr, filepath); }); RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); document.Release(); } } } }