ソースを参照

合并-添加文件添加安全检查,默认添加页面范围列表

liyijie 1 年間 前
コミット
f59a4624fa

+ 61 - 32
PDF Office/ViewModels/Dialog/ToolsDialogs/MergeDialogViewModel.cs

@@ -18,6 +18,7 @@ using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
+using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Reflection;
@@ -336,9 +337,19 @@ namespace PDF_Master.ViewModels.Dialog.ToolsDialogs
                 List<int> listnum = new List<int>();
                 if (MergeObjectlist[i].SetPageRange == null || MergeObjectlist[i].SetPageRange.Count == 0)
                 {
-                    AlertsMessage alertsMessage = new AlertsMessage();
-                    alertsMessage.ShowDialog("", App.MainPageLoader.GetString("PageRangeWarning"), App.ServiceLoader.GetString("Text_ok"));
-                    return;
+                    if (MergeObjectlist[i].SDKPageCount == 0) {
+                        mergeObject.SetPageRange = pageRangeList;
+                        AlertsMessage alertsMessage = new AlertsMessage();
+                        alertsMessage.ShowDialog("", App.MainPageLoader.GetString("PageRangeWarning"), App.ServiceLoader.GetString("Text_ok"));
+                        return;
+                    }
+                    List<int> pageRangeList = new List<int>();
+                    for (int page1 = 0; page1 < MergeObjectlist[i].SDKPageCount; page1++)
+                    {
+                        pageRangeList.Add(page1);
+                    }
+                    MergeObjectlist[i].SetPageRange = pageRangeList;
+                   
                 }
             }
 
@@ -355,46 +366,61 @@ namespace PDF_Master.ViewModels.Dialog.ToolsDialogs
                 {
                     if (Path.GetExtension(MergeObjectlist[i].FilePath).Trim().ToLower() == ".gif")
                     {//GIF下面方法产生虚影改成与图片转PDF一致
-                        System.Drawing.Image img = System.Drawing.Image.FromFile(MergeObjectlist[i].FilePath);
-                        string tempFileName = Path.GetTempPath() + "pngtemp.jpg";
-                        if (!PictureConverter.SaveJpeg(MergeObjectlist[i].FilePath, tempFileName))
+                        try
                         {
-                            MessageBoxEx.Show("图片格式有问题");
+                            System.Drawing.Image img = System.Drawing.Image.FromFile(MergeObjectlist[i].FilePath);
+                            string tempFileName = Path.GetTempPath() + "pngtemp.jpg";
+                            if (!PictureConverter.SaveJpeg(MergeObjectlist[i].FilePath, tempFileName))
+                            {
+                                MessageBoxEx.Show("图片格式有问题");
+                            }
+                            // 之前插入位置为零点导致插入为第一页,改为尾插 2023/5/24
+                            result = SaveDoc.InsertPage(SaveDoc.PageCount, img.Width, img.Height, tempFileName);
+                            try { if (File.Exists(tempFileName)) File.Delete(tempFileName); }
+                            catch
+                            { }
+                            if (!result)
+                            {
+                                SaveDoc.Release();
+                                return;
+                            }
+                            continue;
                         }
-                        // 之前插入位置为零点导致插入为第一页,改为尾插 2023/5/24
-                        result = SaveDoc.InsertPage(SaveDoc.PageCount, img.Width, img.Height, tempFileName);
-                        try { if (File.Exists(tempFileName)) File.Delete(tempFileName); }
                         catch
-                        { }
-                        if (!result)
                         {
-                            SaveDoc.Release();
-                            return;
-                        }
-                        continue;
+                            continue;
+                        }
+
                     }
                     else
                     {
-                        BitmapSource frame = MergeObjectlist[i].DocThumbnail;
-                        byte[] imageData = new byte[frame.PixelWidth * frame.PixelHeight * 4];
-                        if (frame.Format != PixelFormats.Bgra32)
-                        {
-                            FormatConvertedBitmap covert = new FormatConvertedBitmap(frame, PixelFormats.Bgra32, frame.Palette, 0);
-                            covert.CopyPixels(imageData, frame.PixelWidth * 4, 0);
-                        }
-                        else
+                        try
                         {
+                            BitmapSource frame = MergeObjectlist[i].DocThumbnail;
+                            byte[] imageData = new byte[frame.PixelWidth * frame.PixelHeight * 4];
+                            if (frame.Format != PixelFormats.Bgra32)
+                            {
+                                FormatConvertedBitmap covert = new FormatConvertedBitmap(frame, PixelFormats.Bgra32, frame.Palette, 0);
+                                covert.CopyPixels(imageData, frame.PixelWidth * 4, 0);
+                            }
+                            else
+                            {
+                                frame.CopyPixels(imageData, frame.PixelWidth * 4, 0);
+                            }
                             frame.CopyPixels(imageData, frame.PixelWidth * 4, 0);
+                            // 之前插入位置为零点导致插入为第一页,改为尾插 2023/5/24
+                            result = SaveDoc.InsertPage(SaveDoc.PageCount, frame.PixelWidth, frame.PixelHeight, imageData, CPDFDocumentImageMode.CPDFDocumentImageModeScaleToFill);
+                            if (!result)
+                            {
+                                SaveDoc.Release();
+                                return;
+                            }
+                            continue;
                         }
-                        frame.CopyPixels(imageData, frame.PixelWidth * 4, 0);
-                        // 之前插入位置为零点导致插入为第一页,改为尾插 2023/5/24
-                        result = SaveDoc.InsertPage(SaveDoc.PageCount, frame.PixelWidth, frame.PixelHeight, imageData, CPDFDocumentImageMode.CPDFDocumentImageModeScaleToFill);
-                        if (!result)
+                        catch
                         {
-                            SaveDoc.Release();
-                            return;
+                            continue;
                         }
-                        continue;
                     }
                 }
                 else
@@ -599,6 +625,7 @@ namespace PDF_Master.ViewModels.Dialog.ToolsDialogs
                     mergeObject.DocName = Path.GetFileName(mergeObject.FilePath);
                     mergeObject.DocPageCount = 1 + " " + App.MainPageLoader.GetString("Merge_ItemPages");
                     mergeObject.SDKPageCount = 1;
+                    mergeObject.SetPageRange = new List<int>() { 0 };
                     mergeObject.DocSize = CommonHelper.GetFileSize(mergeObject.FilePath);
                     try
                     {
@@ -690,6 +717,7 @@ namespace PDF_Master.ViewModels.Dialog.ToolsDialogs
                         mergeObject.IsEvenPageIsEnabled = false;
                     }
                     mergeObject.SDKPageCount = doc.PageCount;
+                    
                     mergeObject.DocSize = CommonHelper.GetFileSize(mergeObject.FilePath);
 
                     //获取第一页缩略图
@@ -712,7 +740,8 @@ namespace PDF_Master.ViewModels.Dialog.ToolsDialogs
                 CurrentValue = i;
                 UpDataMergeObjectIndex();
             }
-            ProcessVisible = Visibility.Collapsed;
+            ProcessVisible = Visibility.Collapsed;
+
             if (showDialog)
             {
                 AlertsMessage alertsMessage = new AlertsMessage();

+ 33 - 45
PDF Office/Views/Dialog/ToolsDialogs/MergeDialog.xaml.cs

@@ -94,9 +94,9 @@ namespace PDF_Master.Views.Dialog.ToolsDialogs
             }
             MergeObject soureNode = souredata.DataContext as MergeObject;
             //防止在外部点击拖入异常
-            if (soureNode == null) 
+            if (soureNode == null)
             {
-                return; 
+                return;
             }
             Point pos = e.GetPosition(MergeView);
             HitTestResult result = VisualTreeHelper.HitTest(MergeView, pos);
@@ -240,25 +240,9 @@ namespace PDF_Master.Views.Dialog.ToolsDialogs
                 bool isFolder = Directory.Exists(f);
                 if (isFolder)
                 {
-                    foreach (string fi in Directory.GetFiles(f)) // 这里使用 "*.jpg" 作为搜索模式,可以根据需要修改
-                    {
-                        // 处理图片文件,这里只是简单地输出文件路径
-
-                        System.IO.FileInfo info = new System.IO.FileInfo(fi);
-                        //只要拖拽进来的文件里包含有pdf格式文件,就允许拖入
-                        if (System.IO.Path.GetExtension(fi).ToLower() == ".pdf" && info.Length > 0)
-                        {
-                            DragDropHelper.DragEnter(this, e);
-                            IsFile = true;
-                        }
-                        //图片格式
-                        else if (Properties.Resources.imageex.Contains(System.IO.Path.GetExtension(fi).ToLower()) && info.Length > 0)
-                        {
-
-                            DragDropHelper.DragEnter(this, e);
-                            IsFile = true;
-                        }
-                    }
+                    DragDropHelper.DragEnter(this, e);
+                    IsFile = true;
+                    TraverseFiles(f, null, e);
                 }
                 else
                 {
@@ -294,10 +278,11 @@ namespace PDF_Master.Views.Dialog.ToolsDialogs
                     TraverseFiles(file1, names);
                     (DataContext as MergeDialogViewModel).AddFiles(names.ToArray());
                 }
-                else {
+                else
+                {
                     (DataContext as MergeDialogViewModel).AddFiles(file);
                 }
-                
+
             }
         }
 
@@ -314,25 +299,9 @@ namespace PDF_Master.Views.Dialog.ToolsDialogs
                 bool isFolder = Directory.Exists(f);
                 if (isFolder)
                 {
-                    foreach (string fi in Directory.GetFiles(f)) // 这里使用 "*.jpg" 作为搜索模式,可以根据需要修改
-                    {
-                        // 处理图片文件,这里只是简单地输出文件路径
-
-                        System.IO.FileInfo info = new System.IO.FileInfo(fi);
-                        //只要拖拽进来的文件里包含有pdf格式文件,就允许拖入
-                        if (System.IO.Path.GetExtension(fi).ToLower() == ".pdf" && info.Length > 0)
-                        {
-                            DragDropHelper.DragEnter(this, e);
-                            IsFile = true;
-                        }
-                        //图片格式
-                        else if (Properties.Resources.imageex.Contains(System.IO.Path.GetExtension(fi).ToLower()) && info.Length > 0)
-                        {
-
-                            DragDropHelper.DragEnter(this, e);
-                            IsFile = true;
-                        }
-                    }
+                    DragDropHelper.DragEnter(this, e);
+                    IsFile = true;
+                    TraverseFiles(f, null, e);
                 }
                 else
                 {
@@ -351,7 +320,7 @@ namespace PDF_Master.Views.Dialog.ToolsDialogs
                         IsFile = true;
                     }
                 }
-                
+
             }
         }
 
@@ -421,15 +390,34 @@ namespace PDF_Master.Views.Dialog.ToolsDialogs
         /// </summary>
         /// <param name="folderPath"></param>
         /// <param name="names"></param>
-        public void TraverseFiles(string folderPath, List<string> names)
+        public void TraverseFiles(string folderPath, List<string> names, DragEventArgs e = null)
         {
             // 获取当前文件夹下的所有文件
             string[] files = Directory.GetFiles(folderPath);
 
             foreach (string file in files)
             {
+                if (names != null) { names.Add(file); }
                 // 处理文件
-                names.Add(file);
+
+
+                if (e != null)
+                {
+                    System.IO.FileInfo info = new System.IO.FileInfo(file);
+                    //只要拖拽进来的文件里包含有pdf格式文件,就允许拖入
+                    if (System.IO.Path.GetExtension(file).ToLower() == ".pdf" && info.Length > 0)
+                    {
+                        DragDropHelper.DragEnter(this, e);
+                        IsFile = true;
+                    }
+                    //图片格式
+                    else if (Properties.Resources.imageex.Contains(System.IO.Path.GetExtension(file).ToLower()) && info.Length > 0)
+                    {
+
+                        DragDropHelper.DragEnter(this, e);
+                        IsFile = true;
+                    }
+                }
             }
 
             // 获取当前文件夹下的所有子文件夹