|
@@ -0,0 +1,461 @@
|
|
|
+using ComPDFKit.PDFDocument;
|
|
|
+using ComPDFKitViewer.PdfViewer;
|
|
|
+using PDF_Office.Model;
|
|
|
+using Prism.Commands;
|
|
|
+using Prism.Mvvm;
|
|
|
+using Prism.Services.Dialogs;
|
|
|
+using System;
|
|
|
+using PDF_Office.Helper;
|
|
|
+using System.Diagnostics;
|
|
|
+using PDF_Office.CustomControl;
|
|
|
+using PDF_Office.Model.HomePageToolsDialogs;
|
|
|
+
|
|
|
+namespace PDF_Office.ViewModels.Dialog.HomePageToolsDialogs
|
|
|
+{
|
|
|
+ public class HomePageSplitDialogViewModel : BindableBase, IDialogAware
|
|
|
+ {
|
|
|
+ #region 参数和属性
|
|
|
+ public CPDFDocument document;
|
|
|
+
|
|
|
+ private CPDFViewer currentViewer;
|
|
|
+
|
|
|
+ private HomePageSplitDialogModel splitModel = new HomePageSplitDialogModel();
|
|
|
+
|
|
|
+ private string savefilepath { get; set; }
|
|
|
+
|
|
|
+ private string savefilename { get; set; }
|
|
|
+
|
|
|
+ private string pageRangeText = "0";
|
|
|
+ public string PageRangeText { set; get; } = "0";
|
|
|
+
|
|
|
+ public string PageRangeSelectIndex { set; get; } = "0";
|
|
|
+
|
|
|
+ private string averagePagesIsCheck = "True";
|
|
|
+ public string AveragePagesIsCheck
|
|
|
+ {
|
|
|
+ get { return averagePagesIsCheck; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref averagePagesIsCheck, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string averageFilesIsCheck = "False";
|
|
|
+ public string AverageFilesIsCheck
|
|
|
+ {
|
|
|
+ get { return averageFilesIsCheck; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref averageFilesIsCheck, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string customPageRangeIsCheck = "False";
|
|
|
+ public string CustomPageRangeIsCheck
|
|
|
+ {
|
|
|
+ get { return customPageRangeIsCheck; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref customPageRangeIsCheck, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string averagePagesIsEnabled = "True";
|
|
|
+ public string AveragePagesIsEnabled
|
|
|
+ {
|
|
|
+ get { return averagePagesIsEnabled; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref averagePagesIsEnabled, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string averageFilesIsEnabled = "False";
|
|
|
+ public string AverageFilesIsEnabled
|
|
|
+ {
|
|
|
+ get { return averageFilesIsEnabled; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref averageFilesIsEnabled, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string customPageRangeIsEnabled = "False";
|
|
|
+ public string CustomPageRangeIsEnabled
|
|
|
+ {
|
|
|
+ get { return customPageRangeIsEnabled; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref customPageRangeIsEnabled, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string AveragePagesText { set; get; } = "";
|
|
|
+
|
|
|
+ public string AverageFilesText { set; get; } = "";
|
|
|
+
|
|
|
+
|
|
|
+ private string filePathName = "";
|
|
|
+ public string FilePathName
|
|
|
+ {
|
|
|
+ get { return filePathName; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref filePathName, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string FileNameLabelText{ set; get; } = "part";
|
|
|
+
|
|
|
+
|
|
|
+ public string FileNameDeimiterText{ set; get; } = "-";
|
|
|
+
|
|
|
+
|
|
|
+ public string FrontFileIsCheck { set; get; } = "True";
|
|
|
+
|
|
|
+ public string FileNameLabelIsCheck { set; get; } = "True";
|
|
|
+
|
|
|
+ public string FileNameDeimiterIsCheck { set; get; } = "True";
|
|
|
+
|
|
|
+ private string fileNameLabelIsEnabled = "False";
|
|
|
+ public string FileNameLabelIsEnabled
|
|
|
+ {
|
|
|
+ get { return fileNameLabelIsEnabled; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref fileNameLabelIsEnabled, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string fileNameDeimiterIsEnabled = "False";
|
|
|
+ public string FileNameDeimiterIsEnabled
|
|
|
+ {
|
|
|
+ get { return fileNameDeimiterIsEnabled; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty(ref fileNameDeimiterIsEnabled, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 委托声明
|
|
|
+ public DelegateCommand CancelCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand SplitCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand AveragePagesCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand AverageFilesCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand CustomPageRangeCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand FrontFileNameCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand FileNameLabelCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand FileNameDeimiterCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand FileNameDeimiterChangeCommand { get; set; }
|
|
|
+
|
|
|
+ public DelegateCommand FileNameLabelChangeCommand { get; set; }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ public HomePageSplitDialogViewModel()
|
|
|
+ {
|
|
|
+ CancelCommand = new DelegateCommand(cancel);
|
|
|
+ SplitCommand = new DelegateCommand(split);
|
|
|
+ AveragePagesCommand = new DelegateCommand(averagePages);
|
|
|
+ AverageFilesCommand = new DelegateCommand(averageFiles);
|
|
|
+ CustomPageRangeCommand = new DelegateCommand(customPageRange);
|
|
|
+ FrontFileNameCommand = new DelegateCommand(frontFileName);
|
|
|
+ FileNameLabelCommand = new DelegateCommand(fileNameLabel);
|
|
|
+ FileNameDeimiterCommand = new DelegateCommand(fileNameDeimiter);
|
|
|
+ FileNameDeimiterChangeCommand = new DelegateCommand(fileNameDeimiter);
|
|
|
+ FileNameLabelChangeCommand = new DelegateCommand(fileNameLabel);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ #region 逻辑函数
|
|
|
+ private void FileNameIsCheck()
|
|
|
+ {
|
|
|
+
|
|
|
+ if (FileNameDeimiterIsCheck == "True")
|
|
|
+ {
|
|
|
+ splitModel.FileNameDeimiter = FileNameDeimiterText;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ splitModel.FileNameDeimiter = "";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (FileNameDeimiterIsCheck == "True")
|
|
|
+ {
|
|
|
+ splitModel.FileNameDeimiter = FileNameDeimiterText;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ splitModel.FileNameDeimiter = "";
|
|
|
+ }
|
|
|
+ if (FileNameLabelIsCheck == "True")
|
|
|
+ {
|
|
|
+ splitModel.FrontFileName = true;
|
|
|
+ splitModel.FileName = (savefilepath + currentViewer.Document.FileName + splitModel.FileNameDeimiter + splitModel.FileNameLabel);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ splitModel.FrontFileName = false;
|
|
|
+ splitModel.FileName = (savefilepath + splitModel.FileNameLabel + splitModel.FileNameDeimiter + currentViewer.Document.FileName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void cancel()
|
|
|
+ {
|
|
|
+ RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
|
|
|
+ }
|
|
|
+
|
|
|
+ private void split()
|
|
|
+ {
|
|
|
+ HomePageEditHelper.GetPagerange(PageRangeSelectIndex, currentViewer, ref splitModel.PageRange, PageRangeText);
|
|
|
+ FileNameIsCheck();
|
|
|
+ char[] enumerationSeparator = new char[] { ',' };
|
|
|
+ char[] rangeSeparator = new char[] { '-' };
|
|
|
+ if (!CommonHelper.GetPagesInRange(ref splitModel.PageParm, splitModel.PageRange, currentViewer.Document.PageCount, enumerationSeparator, rangeSeparator))
|
|
|
+ { //TODO
|
|
|
+ Trace.WriteLine("输入不对");
|
|
|
+ MessageBoxEx.Show("输入不对");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Trace.WriteLine("splitModel.PageRange: " + splitModel.PageRange + "-----");
|
|
|
+ if (splitModel.Mode == HomePageSplitDialogModel.SplitMode.AveragePages)
|
|
|
+ {
|
|
|
+ if (AveragePagesText != "")
|
|
|
+ {
|
|
|
+ splitModel.GetModeCount = int.Parse(AveragePagesText);
|
|
|
+ }
|
|
|
+ int averagepagesremainder = 0;
|
|
|
+ var averagepagesdocs = HomePageEditHelper.AverageSplitPages(currentViewer.Document.PageCount, splitModel.GetModeCount, ref averagepagesremainder);
|
|
|
+ int averagepagesdoc;
|
|
|
+ for (averagepagesdoc = 1; averagepagesdoc < averagepagesdocs; averagepagesdoc++)
|
|
|
+ {
|
|
|
+ CPDFDocument extractdoc = CPDFDocument.CreateDocument();
|
|
|
+ extractdoc.ImportPages(currentViewer.Document, (1 + splitModel.GetModeCount * (averagepagesdoc - 1)).ToString() + "-" + (splitModel.GetModeCount * averagepagesdoc).ToString());
|
|
|
+
|
|
|
+ extractdoc.WriteToFilePath(splitModel.FileName + averagepagesdoc.ToString() + ".pdf");
|
|
|
+
|
|
|
+ extractdoc.Release();
|
|
|
+ }
|
|
|
+ if (averagepagesdoc == averagepagesdocs)
|
|
|
+ {
|
|
|
+ CPDFDocument extractdoc = CPDFDocument.CreateDocument();
|
|
|
+ extractdoc.ImportPages(currentViewer.Document, (1 + splitModel.GetModeCount * (averagepagesdoc - 1)).ToString() + "-" + currentViewer.Document.PageCount.ToString());
|
|
|
+ extractdoc.WriteToFilePath(splitModel.FileName + averagepagesdoc.ToString() + ".pdf");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (splitModel.Mode == HomePageSplitDialogModel.SplitMode.AverageFiles)
|
|
|
+ {
|
|
|
+ if (AverageFilesText != "")
|
|
|
+ {
|
|
|
+ splitModel.GetModeCount = int.Parse(AverageFilesText);
|
|
|
+ }
|
|
|
+ int averagefilesremainder = 0;
|
|
|
+ var averagefilespages = HomePageEditHelper.AverageSplitDocs(currentViewer.Document.PageCount, splitModel.GetModeCount, ref averagefilesremainder);
|
|
|
+ int averagefilesdoc;
|
|
|
+ if (splitModel.GetModeCount > currentViewer.Document.PageCount)
|
|
|
+ {
|
|
|
+ splitModel.GetModeCount = 10;
|
|
|
+ }
|
|
|
+ for (averagefilesdoc = 1; averagefilesdoc <= splitModel.GetModeCount; averagefilesdoc++)
|
|
|
+ {
|
|
|
+ CPDFDocument extractdoc = CPDFDocument.CreateDocument();
|
|
|
+ if (averagefilesremainder > 0)
|
|
|
+ {
|
|
|
+ extractdoc.ImportPages(currentViewer.Document, (1 + (averagefilespages + 1) * (averagefilesdoc - 1)).ToString() + "-" + ((averagefilespages + 1) * averagefilesdoc).ToString());
|
|
|
+ extractdoc.WriteToFilePath(splitModel.FileName + averagefilesdoc.ToString() + ".pdf");
|
|
|
+ averagefilesremainder--;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ extractdoc.ImportPages(currentViewer.Document, (averagefilespages * averagefilesremainder + averagefilesremainder + 1 + averagefilespages * (averagefilesdoc - 1)).ToString() + "-" + (averagefilespages * averagefilesremainder + averagefilesremainder + (averagefilespages * averagefilesdoc)).ToString());
|
|
|
+ extractdoc.WriteToFilePath(splitModel.FileName + averagefilesdoc.ToString() + ".pdf");
|
|
|
+ }
|
|
|
+ extractdoc.Release();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (splitModel.Mode == HomePageSplitDialogModel.SplitMode.CustomPageRange)
|
|
|
+ {
|
|
|
+ CPDFDocument extractdoc = CPDFDocument.CreateDocument();
|
|
|
+ extractdoc.ImportPages(currentViewer.Document, splitModel.PageRange);
|
|
|
+ extractdoc.WriteToFilePath(splitModel.FileName + "1" + ".pdf");
|
|
|
+ if (splitModel.PageRange != "1-" + currentViewer.Document.PageCount.ToString())
|
|
|
+ {
|
|
|
+ currentViewer.Document.RemovePages(splitModel.PageParm.ToArray());
|
|
|
+ currentViewer.Document.WriteToFilePath(splitModel.FileName + "2" + ".pdf");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.Diagnostics.Process.Start("Explorer", "/select," + currentViewer.Document.FilePath);
|
|
|
+ RequestClose.Invoke(new DialogResult(ButtonResult.OK));
|
|
|
+ }
|
|
|
+
|
|
|
+ private void averagePages()
|
|
|
+ {
|
|
|
+ CustomPageRangeIsCheck = "False";
|
|
|
+ AverageFilesIsCheck = "False";
|
|
|
+ AveragePagesIsCheck = "True";
|
|
|
+
|
|
|
+ CustomPageRangeIsEnabled = "False";
|
|
|
+ AverageFilesIsEnabled = "False";
|
|
|
+ AveragePagesIsEnabled = "True";
|
|
|
+ splitModel.Mode = HomePageSplitDialogModel.SplitMode.AveragePages;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void averageFiles()
|
|
|
+ {
|
|
|
+ CustomPageRangeIsCheck = "False";
|
|
|
+ AverageFilesIsCheck = "True";
|
|
|
+ AveragePagesIsCheck = "False";
|
|
|
+
|
|
|
+ CustomPageRangeIsEnabled = "False";
|
|
|
+ AverageFilesIsEnabled = "True";
|
|
|
+ AveragePagesIsEnabled = "False";
|
|
|
+ splitModel.Mode = HomePageSplitDialogModel.SplitMode.AverageFiles;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void customPageRange()
|
|
|
+ {
|
|
|
+ CustomPageRangeIsCheck = "True";
|
|
|
+ AverageFilesIsCheck = "False";
|
|
|
+ AveragePagesIsCheck = "False";
|
|
|
+
|
|
|
+ CustomPageRangeIsEnabled = "True";
|
|
|
+ AverageFilesIsEnabled = "False";
|
|
|
+ AveragePagesIsEnabled = "False";
|
|
|
+ splitModel.Mode = HomePageSplitDialogModel.SplitMode.CustomPageRange;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void frontFileName()
|
|
|
+ {
|
|
|
+ if (FileNameLabelIsCheck == "False")
|
|
|
+ {
|
|
|
+ FileNameLabelText = "";
|
|
|
+ }
|
|
|
+ if (FileNameDeimiterIsCheck == "False")
|
|
|
+ { FileNameDeimiterText = ""; }
|
|
|
+ if (FrontFileIsCheck == "True")
|
|
|
+ {
|
|
|
+ FilePathName = savefilename + FileNameDeimiterText + FileNameLabelText;
|
|
|
+ splitModel.FrontFileName = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ splitModel.FrontFileName = false;
|
|
|
+ FilePathName = FileNameLabelText + FileNameDeimiterText + savefilename;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void fileNameLabel()
|
|
|
+ {
|
|
|
+ if (FileNameDeimiterIsCheck == "False")
|
|
|
+ {
|
|
|
+ FileNameDeimiterText = "";
|
|
|
+ }
|
|
|
+ if (FileNameLabelIsCheck == "True")
|
|
|
+ {
|
|
|
+ FileNameLabelIsEnabled = "True";
|
|
|
+ if (FrontFileIsCheck == "True")
|
|
|
+ {
|
|
|
+ FilePathName = savefilename + FileNameDeimiterText + FileNameLabelText;
|
|
|
+ splitModel.FrontFileName = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ splitModel.FrontFileName = false;
|
|
|
+ FilePathName = FileNameLabelText + FileNameDeimiterText + savefilename;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FileNameLabelIsEnabled = "False";
|
|
|
+
|
|
|
+ if (FrontFileIsCheck == "True")
|
|
|
+ {
|
|
|
+ FilePathName = savefilename + FileNameDeimiterText;
|
|
|
+ splitModel.FrontFileName = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ splitModel.FrontFileName = false;
|
|
|
+ FilePathName = FileNameDeimiterText + savefilename;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void fileNameDeimiter()
|
|
|
+ {
|
|
|
+
|
|
|
+ if (FileNameLabelIsCheck == "False")
|
|
|
+ {
|
|
|
+ FileNameLabelText = "";
|
|
|
+ }
|
|
|
+ if (FileNameDeimiterIsCheck == "True")
|
|
|
+ {
|
|
|
+ FileNameDeimiterIsEnabled = "True";
|
|
|
+ if (FrontFileIsCheck == "True")
|
|
|
+ {
|
|
|
+ FilePathName = savefilename + FileNameDeimiterText + FileNameLabelText;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FilePathName = FileNameLabelText + FileNameDeimiterText + savefilename;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FileNameDeimiterIsEnabled = "False";
|
|
|
+ if (FrontFileIsCheck == "True")
|
|
|
+ {
|
|
|
+ FilePathName = savefilename + FileNameLabelText;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FilePathName = FileNameLabelText + savefilename;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 构架行为
|
|
|
+ public string Title => "";
|
|
|
+
|
|
|
+ public event Action<IDialogResult> RequestClose;
|
|
|
+
|
|
|
+ public bool CanCloseDialog()
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void OnDialogClosed()
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void OnDialogOpened(IDialogParameters parameters)
|
|
|
+ {
|
|
|
+ CPDFViewer viewer = null;
|
|
|
+ string filepath = "";
|
|
|
+ parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out viewer);
|
|
|
+ parameters.TryGetValue<string>(ParameterNames.FilePath, out filepath);
|
|
|
+ if (viewer != null && viewer.Document != null)
|
|
|
+ {
|
|
|
+ currentViewer = viewer;
|
|
|
+ document = viewer.Document;
|
|
|
+ savefilename = currentViewer.Document.FileName;
|
|
|
+ FilePathName = savefilename + "-" + "part" + ".pdf";
|
|
|
+ savefilepath = filepath.Replace(savefilename + ".pdf", "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+}
|