فهرست منبع

ComPDFKit.Tool(win)-补充多选的复制粘贴裁剪删除逻辑

liyijie 8 ماه پیش
والد
کامیت
80634de3c9
1فایلهای تغییر یافته به همراه119 افزوده شده و 2 حذف شده
  1. 119 2
      Demo/Examples/ComPDFKit.Tool/CPDFViewerTool.Command.cs

+ 119 - 2
Demo/Examples/ComPDFKit.Tool/CPDFViewerTool.Command.cs

@@ -225,8 +225,8 @@ namespace ComPDFKit.Tool
                     commandData.CurrentParam = PasteParam;
                     CommandExecutedHandler?.Invoke(this, commandData);
                 }
-                catch (Exception ex) 
-                { 
+                catch (Exception ex)
+                {
 
                 }
             }
@@ -252,6 +252,12 @@ namespace ComPDFKit.Tool
                         {
                             e.CanExecute = true;
                         }
+                        //Add multi status
+                        MultiSelectedRect multiSelectedRect = CommonHelper.FindVisualChild<MultiSelectedRect>(PDFViewer.GetViewForTag(multiSelectedRectViewTag));
+                        if (multiSelectedRect != null && multiSelectedRect.Children.Count > 0)
+                        {
+                            e.CanExecute = true;
+                        }
                         break;
                     }
                 case "Paste":
@@ -465,6 +471,71 @@ namespace ComPDFKit.Tool
                         }
                     }
                 }
+                else
+                { 
+                    //Add multi status
+                    MultiSelectedRect multiSelectedRect = CommonHelper.FindVisualChild<MultiSelectedRect>(PDFViewer.GetViewForTag(multiSelectedRectViewTag));
+                    if (multiSelectedRect != null && multiSelectedRect.Children.Count > 0)
+                    {
+                        foreach (SelectedRect selectedRect in multiSelectedRect.Children)
+                        {
+
+                            EditAreaObject editAreaObject = GetEditAreaObjectListForRect(selectedRect);
+                            if (editAreaObject != null)
+                            {
+                                PDFEditCommandData commandData = new PDFEditCommandData();
+                                if (editAreaObject.cPDFEditArea.Type == CPDFEditType.EditText)
+                                {
+                                    editType = CPDFEditType.EditText;
+                                    CPDFEditTextArea editTextArea = editAreaObject.cPDFEditArea as CPDFEditTextArea;
+                                    commandData.TextContent = editTextArea.SelectText;
+                                    if (!string.IsNullOrEmpty(commandData.TextContent))
+                                    {
+                                        CPDFEditPage editPage = editAreaObject.cPDFEditPage;
+                                        commandData.EditType = CPDFEditType.EditText;
+                                        commandData.EditAreaCopied = editPage.CopyEditArea(editAreaObject.cPDFEditArea);
+                                        if (commandData.EditAreaCopied)
+                                        {
+                                            List<CPDFCopyEditArea> copyList = editPage.GetCopyEditAreaList();
+                                            CPDFCopyEditArea CopyArea = copyList[copyList.Count - 1];
+                                            commandData.TextContent = CopyArea.GetCopyTextAreaContent();
+                                            commandData.CopyArea = CopyArea;
+                                            commandData.EditPage = editPage;
+                                        }
+                                    }
+                                    try
+                                    {
+                                        Clipboard.Clear();
+                                        Clipboard.SetText(commandData.TextContent);
+                                        Clipboard.Flush();
+                                    }
+                                    catch (Exception)
+                                    {
+
+                                    }
+                                    commandData.PDFRect = DataConversionForWPF.CRectConversionForRect(editAreaObject.cPDFEditArea.GetFrame());
+                                    lastPDFEditArgsList.Add(commandData);
+                                }
+                                if (editAreaObject.cPDFEditArea.Type == CPDFEditType.EditImage)
+                                {
+                                    editType = CPDFEditType.EditImage;
+                                    CPDFEditPage editPage = editAreaObject.cPDFEditPage;
+                                    commandData.PDFRect = DataConversionForWPF.CRectConversionForRect(editAreaObject.cPDFEditArea.GetFrame());
+                                    commandData.EditAreaCopied = editPage.CopyEditArea(editAreaObject.cPDFEditArea);
+                                    commandData.EditType = CPDFEditType.EditImage;
+                                    if (commandData.EditAreaCopied)
+                                    {
+                                        List<CPDFCopyEditArea> copyList = editPage.GetCopyEditAreaList();
+                                        commandData.CopyArea = copyList[copyList.Count - 1];
+                                        commandData.EditPage = editPage;
+                                        lastPDFEditArgsList.Add(commandData);
+                                    }
+                                }
+                            }
+                        }
+
+                    }
+                }
             }
             catch
             {
@@ -518,6 +589,52 @@ namespace ComPDFKit.Tool
                     PDFViewer.UndoManager.AddHistory(groupHistory);
                 }
             }
+            else
+            {
+                //Add multi status
+                MultiSelectedRect multiSelectedRect = CommonHelper.FindVisualChild<MultiSelectedRect>(PDFViewer.GetViewForTag(multiSelectedRectViewTag));
+                if (multiSelectedRect != null && multiSelectedRect.Children.Count > 0)
+                {
+                    foreach (SelectedRect selectedRect in multiSelectedRect.Children)
+                    {
+
+                        EditAreaObject editAreaObject = GetEditAreaObjectListForRect(selectedRect);
+                        if (editAreaObject != null)
+                        {
+                            GroupHistory groupHistory = new GroupHistory();
+                            PDFEditHistory editHistory = new PDFEditHistory();
+                            editHistory.EditPage = editAreaObject.cPDFEditPage;
+                            editHistory.PageIndex = editAreaObject.PageIndex;
+                            groupHistory.Histories.Add(editHistory);
+                            if (editAreaObject.cPDFEditArea.Type == CPDFEditType.EditText)
+                            {
+                                editType = CPDFEditType.EditText;
+                                CPDFEditTextArea editTextArea = editAreaObject.cPDFEditArea as CPDFEditTextArea;
+                                string selectContent = editTextArea.SelectText;
+                                RemoveTextBlock(editAreaObject);
+                                PDFEditHistory deleteHistory = new PDFEditHistory();
+                                deleteHistory.EditPage = editAreaObject.cPDFEditPage;
+                                deleteHistory.PageIndex = editAreaObject.PageIndex;
+                                groupHistory.Histories.Add(deleteHistory);
+                            }
+                            if (editAreaObject.cPDFEditArea.Type == CPDFEditType.EditImage)
+                            {
+                                editType = CPDFEditType.EditImage;
+                                RemoveImageBlock(editAreaObject);
+                            }
+
+                            //After removing the data, you need to get the data again.
+                            PDFViewer.UpdateRenderFrame();
+                            if (PDFViewer != null && PDFViewer.UndoManager != null)
+                            {
+                                PDFViewer.UndoManager.AddHistory(groupHistory);
+                            }
+                        }
+                    }
+                    CleanSelectedMultiRect();
+                    OpenSelectedMulti(false);
+                }
+            }
         }
 
         private void PastePDFEditData(out CPDFEditType editType, bool pasteMatchStyle = true)