using ComPDFKit.PDFDocument; using PDF_Office.CustomControl; using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePageBatchProcessing; using PDF_Office.Model; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Windows.Forms; using PDF_Office.Helper; using System.Windows; using System.Data; namespace PDF_Office.ViewModels.Dialog.HomePageToolsDialogs.HomePageBatchProcessing.HomePageWatermark { public class HomePageWatermarkDialogViewModel : BindableBase, INavigationAware { #region 参数和属性 private List fileNames; private CPDFDocument tempDocument; public string PageNumber = ""; public IRegionManager WatermarkRegion; public List fileNamesView = new List(); private int fileNamesIndex = 0; private string watermarkGridIsEnabled = "True"; public string WatermarkGridIsEnabled { get { return watermarkGridIsEnabled; } set { SetProperty(ref watermarkGridIsEnabled, value); } } private string setWatermarkGridIsEnabled = "True"; public string SetWatermarkGridIsEnabled { get { return setWatermarkGridIsEnabled; } set { SetProperty(ref setWatermarkGridIsEnabled, value); } } private DataTable pdfDataTable = new DataTable(); public DataTable PDFDataTable { get { return pdfDataTable; } set { SetProperty(ref pdfDataTable, value); } } private string removeIsEnable = "False"; public string RemoveIsEnable { get { return removeIsEnable; } set { SetProperty(ref removeIsEnable, value); } } private string selectFileName = "False"; public string SelectFileName { get { return selectFileName; } set { SetProperty(ref selectFileName, value); } } private string watermarkRegionName; public string WatermarkRegionName { get { return watermarkRegionName; } set { SetProperty(ref watermarkRegionName, value); } } private Visibility watermarkVisible = Visibility.Collapsed; public Visibility WatermarkVisible { get { return watermarkVisible; } set { SetProperty(ref watermarkVisible, value); } } private Visibility addFileVisibility = Visibility.Hidden; public Visibility AddFileVisibility { get { return addFileVisibility; } set { SetProperty(ref addFileVisibility, value); RaisePropertyChanged(); } } #endregion #region 委托声明 public DelegateCommand ADDPDFCommand { get; set; } public DelegateCommand RemovePDFFileCommand { get; set; } public DelegateCommand CreateCommand { get; set; } public DelegateCommand ADDPDFFilesCommand { get; set; } #endregion public HomePageWatermarkDialogViewModel(IRegionManager watermarkRegion) { PDFDataTable.Columns.Add("FileName"); PDFDataTable.Columns.Add("FilePageRangeText"); PDFDataTable.Columns.Add("FilePageRangeSelectIndex"); PDFDataTable.Columns.Add("FileSize"); PDFDataTable.Columns.Add("FileState"); ADDPDFCommand = new DelegateCommand(addpicture); ADDPDFFilesCommand = new DelegateCommand(addpicturefiles); RemovePDFFileCommand = new DelegateCommand(removepdffile); CreateCommand = new DelegateCommand(create); WatermarkRegion = watermarkRegion; WatermarkRegionName = Guid.NewGuid().ToString(); } #region 逻辑函数 private void create() { fileNamesIndex = 0; WatermarkGridIsEnabled = "False"; foreach (var filename in fileNames) { FileInfo fileinfo = new FileInfo(filename); string OutputPath = fileinfo.DirectoryName; char[] enumerationSeparator = new char[] { ',' }; char[] rangeSeparator = new char[] { '-' }; List PageIndexLists = new List(); CPDFDocument document = CPDFDocument.InitWithFilePath(filename); if (document == null) { PDFDataTable.Rows[fileNamesIndex]["FileState"] = "文件出错"; continue; } if (!CommonHelper.GetPagesInRange(ref PageIndexLists, "1-" + document.PageCount.ToString(), document.PageCount, enumerationSeparator, rangeSeparator)) { //TODO Trace.WriteLine("输入不对"); MessageBoxEx.Show("输入不对"); return; } document.Release(); PDFDataTable.Rows[fileNamesIndex]["FileState"] = "完成"; fileNamesIndex++; } WatermarkGridIsEnabled = "True"; } #endregion #region 批量处理逻辑函数 /// /// 添加PDF文件 /// private void addpicture() { System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog(); dlg.Multiselect = true; dlg.Filter = "PDF|*.pdf;*.PDF;"; if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { fileNames.AddRange(dlg.FileNames.ToList()); RemoveExcess(ref fileNames); SetWatermarkGridIsEnabled = "True"; AddFileVisibility = Visibility.Collapsed; updateListview("待确定"); } } public void addPDFFiles(string filename) { fileNames.Add(filename); RemoveExcess(ref fileNames); SetWatermarkGridIsEnabled = "True"; AddFileVisibility = Visibility.Collapsed; updateListview("待确定"); } /// /// 删除重复的文件 /// public void RemoveExcess(ref List Filenames) { List filenames = new List(); foreach (var fileName in Filenames) { if (!filenames.Contains(fileName)) { filenames.Add(fileName); } } Filenames.Clear(); Filenames = filenames; } /// /// 添加PDF文件夹 /// private void addpicturefiles() { FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径"; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string foldPath = dialog.SelectedPath; var apps = System.IO.Directory.GetFiles(foldPath); foreach (string app in apps) { var fi = new FileInfo(app); if (fi.Extension == ".pdf" || fi.Extension == ".PDF") { fileNames.Add(app); } } RemoveExcess(ref fileNames); updateListview("待确定"); SetWatermarkGridIsEnabled = "True"; AddFileVisibility = Visibility.Collapsed; } } /// /// 更新listview显示 /// state 状态显示字符串 /// public void updateListview(string state) { DataTable pdfdatatable = new DataTable(); pdfdatatable.Columns.Add("FileName"); pdfdatatable.Columns.Add("FileSize"); pdfdatatable.Columns.Add("FileState"); foreach (var fileName in fileNames) { string file_all = fileName; FileInfo f = new FileInfo(file_all); string file_size = (((float)f.Length) / 1024).ToString() + " K"; pdfdatatable.Rows.Add(f.Name, file_size, state); } PDFDataTable = pdfdatatable; HomePageBatchProcessingDialogModel.FilePaths = fileNames; } /// /// 逆序int类型集合 /// public void Reverseorder(ref List Numbers) { Numbers = Numbers.OrderBy(a => a).ToList(); Numbers.Reverse(); } /// /// 打开文件PDF /// public void openfiledialog() { foreach (int filenamesview in fileNamesView) { System.Diagnostics.Process.Start(fileNames[filenamesview]); } } /// /// 删除文件PDF /// public void removepdffile() { Reverseorder(ref fileNamesView); foreach (int filenamesview in fileNamesView) { //Trace.WriteLine(filenamesview); fileNames.Remove(fileNames[filenamesview]); } if (fileNames.Count < 1) { SetWatermarkGridIsEnabled = "False"; AddFileVisibility = Visibility.Visible; } updateListview("待确定"); } public void PDFFileCount() { if (fileNames.Count == 0) { SetWatermarkGridIsEnabled = "False"; AddFileVisibility = Visibility.Visible; } else { SetWatermarkGridIsEnabled = "True"; AddFileVisibility = Visibility.Collapsed; } } #endregion #region 构架行为 public void OnNavigatedTo(NavigationContext navigationContext) { List filepath = new List(); navigationContext.Parameters.TryGetValue>(ParameterNames.FilePath, out filepath); if (filepath != null) { fileNames = filepath; PDFFileCount(); updateListview("待确定"); } } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } #endregion } }