Ver Fonte

【EditPDF】整理代码

tangchao há 8 meses atrás
pai
commit
92994c0656

+ 29 - 1
PDF Office/PDF Master/Class/PDFTools/EditPDF/Controller/KMEditPDFPopToolBarController.swift

@@ -14,6 +14,31 @@ import Cocoa
     case fontReduce
     case fontBold
     case fontItalic
+    case textAlignment
+    
+    case leftRotate
+    case rightRotate
+    case reverseX // 左右翻转
+    case reverseY // 上下翻转
+    case crop
+    case replace
+    case export
+    
+    case alignmentLeft
+    case alignmentRight
+    case alignmentCenterX
+    case alignmentjustifiedX // 左右两端对齐
+    case alignmentTop
+    case alignmentBottom
+    case alignmentCenterY
+    case alignmentjustifiedY // 上下两端对齐
+}
+
+struct KMEditPDFToolbarStyle: OptionSet {
+    let rawValue: Int
+    
+    static var text  = KMEditPDFToolbarStyle(rawValue: 1 << 0)
+    static var image   = KMEditPDFToolbarStyle(rawValue: 1 << 1)
 }
 
 class KMEditPDFToolbarItemView: NSView {
@@ -90,7 +115,7 @@ class KMEditPDFColorView: NSView {
         view.wantsLayer = true
         view.layer?.cornerRadius = 10
         view.layer?.masksToBounds = true
-        view.image = NSImage(named: NSImage.colorPanelName)
+        view.image = NSImage(named: "view_color")
         return view
     }()
     
@@ -200,6 +225,9 @@ class KMEditPDFToolbarView: NSView {
 @objcMembers class KMEditPDFPopToolBarWindow: NSWindow {
     static let shared = KMEditPDFPopToolBarWindow()
     
+    var style: KMEditPDFToolbarStyle = .text
+    var isMultiple: Bool = false
+    
     convenience init() {
         let rect = NSRect(x: 0, y: 0, width: 400, height: 44)
         let styleMask: NSWindow.StyleMask = [.fullSizeContentView]

+ 116 - 109
PDF Office/PDF Master/Class/PDFTools/EditPDF/Tools/KMEditPDfHanddler.swift

@@ -94,14 +94,75 @@ class KMEditPDfHanddler: NSObject {
         // 图片是否显示8个操作点
         self.editingConfig?.isDrawRectWithDot = true
     }
+    
+    func showPopWindow(positionRect: NSRect) {
+        let win = KMEditPDFPopToolBarWindow.shared
+        win.show(relativeTo: positionRect, of: self.viewC!.listView, preferredEdge: .maxY)
+        self.viewC?.view.window?.addChildWindow(win, ordered: .above)
+        
+        // 显示新手引导
+        if let toolbarView = (win.contentViewController as? KMEditPDFPopToolBarController)?.toolbarView {
+            if let view = toolbarView.subviews.last {
+                self.showGuideView(view)
+            }
+        }
+    }
+    
+    func showGuideView(_ view: NSView) {
+        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
+            if KMGuideInfoWindowController.availableShow(.editPDFPopWindow) {
+                let guideWC = KMGuideInfoWindowController.currentWC()
+                //                guard let guideWC = guideInfoWindowController else { return }
+                
+                guideWC.type = .editPDFPopWindow
+                var viewFrame = view.superview?.convert(view.frame, to: view.window?.contentView) ?? .zero
+                viewFrame.origin.x += (view.window?.frame.origin.x ?? 0)
+                viewFrame.origin.x -= (self.viewC?.view.window?.frame.origin.x ?? 0)
+                viewFrame.origin.y += (view.window?.frame.origin.y ?? 0)
+                viewFrame.origin.x -= (self.viewC?.view.window?.frame.origin.y ?? 0)
+                
+                viewFrame.origin.x -= KMEditPDFPopGuideView.kWidth
+                viewFrame.origin.y -= KMEditPDFPopGuideView.kHeight
+                
+                viewFrame.origin.y += 26
+                guideWC.digitalBoxRect = viewFrame
+                var beh = view.window?.collectionBehavior ?? []
+                beh.insert(.canJoinAllSpaces)
+                guideWC.window?.collectionBehavior = beh
+                
+                let view_ = self.viewC?.view
+                var rect = view_?.window?.frame ?? .zero
+                rect.size.height -= 20
+                guideWC.window?.setFrame(rect, display: false)
+                guideWC.window?.minSize = rect.size
+                guideWC.window?.maxSize = rect.size
+                view_?.window?.addChildWindow(guideWC.window!, ordered: .above)
+                guideWC.show()
+                
+                guideWC.settingCallback = {
+                    KMPreferenceController.shared.showWindow(nil)
+                }
+            }
+        }
+    }
 }
 
 extension KMEditPDfHanddler: CPDFViewDelegate {
+    // 编辑区块已经改变
     func pdfViewEditingAreaDidChanged(_ pdfView: CPDFView!) {
-        let areas = self.listView?.editingAreas()
-        let annotationType = self.annotationType
-        if areas == nil || areas?.count ?? 0 == 0 {
+        let isEdited = self.listView?.isEdited() ?? false
+        if isEdited {
+            // 记录编辑状态
+            self.viewC?.recordIsPDFDocumentEdited(type: .editText)
+        }
+        if annotationType != .addText {
+            NotificationCenter.default.post(name: NSNotification.Name(rawValue: "kPDFViewEditingAreaDidChanged"), object: self.listView?.document)
+        }
+        
+        let areas = self.listView?.editingAreas() ?? []
+        if areas.isEmpty {
             let toolMode = self.listView?.toolMode ?? .none
+            let annotationType = self.annotationType
             if toolMode == .editPDFToolMode {
                 if annotationType == .addImage || annotationType == .addText {
                     if self.isEditImage {
@@ -111,8 +172,8 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
 //                            self.closeRightPane()
 //                        }
                         if annotationType == .addImage {
-                            if self.viewC?.rightSideViewController.eidtPDFImageProperty != nil {
-                                self.viewC?.rightSideViewController.eidtPDFImageProperty.reloadData()
+                            if self.rightViewC?.eidtPDFImageProperty != nil {
+                                self.rightViewC?.eidtPDFImageProperty.reloadData()
                             }
                         }
 //                        self.openRightPane()
@@ -121,53 +182,42 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
                     self.viewC?.closeRightPane()
                 }
             } else {
-                self.viewC?.rightSideViewController.isHidden = true
+                self.rightViewC?.isHidden = true
                 self.viewC?.closeRightPane()
-                let subViewType = self.viewC?.rightSideViewController.subViewType ?? .None
-                if self.viewC?.rightSideViewController != nil && subViewType == .EditPDFAddText && annotationType == .addText {
-                    self.viewC?.rightSideViewController.eidtPDFTextProperty.initData()
+                if self.subViewType == .EditPDFAddText && annotationType == .addText {
+                    self.rightViewC?.eidtPDFTextProperty.initData()
                 }
             }
-            let isEdited = self.listView?.isEdited() ?? false
-            if isEdited {
-                self.viewC?.recordIsPDFDocumentEdited(type: .editText)
-            }
-            if annotationType != .addText {
-                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "kPDFViewEditingAreaDidChanged"), object: self.listView?.document)
-            }
             return
         }
         
         self.viewC?.model.isPDFTextImageEdited = true
-        let subViewType = self.viewC?.rightSideViewController.subViewType ?? .None
-        if (annotationType == .addImage) && areas!.count > 0 {
+        let subViewType = self.rightViewC?.subViewType ?? .None
+        if self.annotationType == .addImage {
             var isImageArea = false
-            for i in 0 ... areas!.count-1 {
-                if areas![i] is CPDFEditImageArea {
+            for i in 0 ..< areas.count {
+                if areas[i] is CPDFEditImageArea {
                     isImageArea = true
                 }
             }
             if isImageArea {
-//                self.rightSideViewController.view.isHidden = false
-                self.viewC?.rightSideViewController.isHidden = false
-                if self.viewC?.rightSideViewController != nil && subViewType == .EditPDFAddImage {
-                    self.viewC?.rightSideViewController.subViewType = .EditPDFAddImage
-                    self.viewC?.rightSideViewController.eidtPDFImageProperty.reloadData()
+                self.rightViewC?.isHidden = false
+                if self.subViewType == .EditPDFAddImage {
+                    self.rightViewC?.subViewType = .EditPDFAddImage
+                    self.rightViewC?.eidtPDFImageProperty.reloadData()
                 }
                 self.viewC?.openRightPane()
             } else {
-//                self.rightSideViewController.view.isHidden = true
-                self.viewC?.rightSideViewController.isHidden = true
+                self.rightViewC?.isHidden = true
                 self.viewC?.closeRightPane()
             }
-        } else if self.viewC?.rightSideViewController != nil && subViewType == .EditPDFAddText && annotationType == .addText {
-//            self.rightSideViewController.view.isHidden = false
-            self.viewC?.rightSideViewController.isHidden = false
-            let count = self.listView?.editingSelectionString().count ?? 0
+        } else if self.subViewType == .EditPDFAddText && annotationType == .addText {
+            self.rightViewC?.isHidden = false
+            let count = self.listView?.editingSelectionString()?.count ?? 0
             if count != 0 {
-                self.viewC?.rightSideViewController.eidtPDFTextProperty.reloadData()
+                self.rightViewC?.eidtPDFTextProperty.reloadData()
             } else {
-                self.viewC?.rightSideViewController.eidtPDFTextProperty.refreshSelectAreaProperty(needDefaultData: true)
+                self.rightViewC?.eidtPDFTextProperty.refreshSelectAreaProperty(needDefaultData: true)
             }
             self.viewC?.openRightPane()
         } else {
@@ -177,37 +227,26 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
             if count < 1 {
                 return
             }
-            for i in 0 ... areas!.count-1 {
-                if areas![i] is CPDFEditTextArea {
-                    textsAreas.append(areas![i] as! CPDFEditTextArea)
+            for i in 0 ..< areas.count {
+                if areas[i] is CPDFEditTextArea {
+                    textsAreas.append(areas[i] as! CPDFEditTextArea)
                 }
-                if areas![i] is CPDFEditImageArea {
-                    imagesAreas.append(areas![i] as! CPDFEditImageArea)
+                if areas[i] is CPDFEditImageArea {
+                    imagesAreas.append(areas[i] as! CPDFEditImageArea)
                 }
             }
-            if textsAreas.count > 0 && textsAreas.count == areas!.count {
-//                self.rightSideViewController.view.isHidden = false
-                self.viewC?.rightSideViewController.isHidden = false
-                self.viewC?.rightSideViewController.subViewType = .EditPDFAddText
-                self.viewC?.rightSideViewController.eidtPDFTextProperty?.reloadData()
+            if textsAreas.count > 0 && textsAreas.count == areas.count {
+                self.rightViewC?.isHidden = false
+                self.rightViewC?.subViewType = .EditPDFAddText
+                self.rightViewC?.eidtPDFTextProperty?.reloadData()
                 self.viewC?.openRightPane()
             } else if imagesAreas.count > 0 {
-//                self.rightSideViewController.view.isHidden = false
-                self.viewC?.rightSideViewController.isHidden = false
-                self.viewC?.rightSideViewController.subViewType = .EditPDFAddImage
-                self.viewC?.rightSideViewController.eidtPDFImageProperty?.reloadData()
+                self.rightViewC?.isHidden = false
+                self.rightViewC?.subViewType = .EditPDFAddImage
+                self.rightViewC?.eidtPDFImageProperty?.reloadData()
                 self.viewC?.openRightPane()
             }
         }
-        
-        let isEdited = self.listView?.isEdited() ?? false
-        if isEdited {
-            self.viewC?.recordIsPDFDocumentEdited(type: .editText)
-            
-            if annotationType != .addText {
-                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "kPDFViewEditingAreaDidChanged"), object: self.listView?.document)
-            }
-        }
     }
     
     func pdfViewEditingCropBoundsDidChanged(_ pdfView: CPDFView!, editing editArea: CPDFEditArea!) {
@@ -291,9 +330,8 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
                             self.listView?.createImagePath(filePath, rect: imageRect, page: pdfView.currentPage())
                             self.viewC?.model.isPDFTextImageEdited = true
                             self.viewC?.recordIsPDFDocumentEdited(type: .editImage)
-//                            self.asyncSaveDocument { params in
-//
-//                            }
+                            
+                            self.showPopWindow(positionRect: imageRect)
                         }
                     }
                 }
@@ -306,9 +344,13 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
         if (window.isVisible) {
             window.orderOut(nil)
             let areas = self.listView?.editingAreas() as? [CPDFEditArea] ?? []
-//            for area in areas {
-                self.listView?.remove(with: areas)
-//            }
+            if let area = areas.last {
+                if let data = area as? CPDFEditTextArea {
+                    if let str = data.editTextAreaString(), str.isEmpty {
+                        self.listView?.remove(with: [area])
+                    }
+                }
+            }
             return
         }
         var newRect = rect
@@ -337,19 +379,10 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
         if self.subViewType == .EditPDFAddText && self.annotationType == .addText {
             self.rightViewC?.eidtPDFTextProperty.refreshSelectAreaProperty(needDefaultData: true)
         }
-        
-        let win = KMEditPDFPopToolBarWindow.shared
-        win.show(relativeTo: newRect, of: self.viewC!.listView, preferredEdge: .maxY)
-        self.viewC?.view.window?.addChildWindow(win, ordered: .above)
-        
-        if let toolbarView = (win.contentViewController as? KMEditPDFPopToolBarController)?.toolbarView {
-            if let view = toolbarView.subviews.last {
-                self.showGuideView(view)
-            }
-        }
-        
+        self.showPopWindow(positionRect: newRect)
     }
     
+    // 文本区块 选中文本已经变化
     func pdfViewEditingSelectionDidChanged(_ pdfView: CPDFView!) {
         // self.viewC?.rightSideViewController != nil &&
         if self.subViewType == .EditPDFAddText {
@@ -358,41 +391,15 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
         }
     }
     
-    func showGuideView(_ view: NSView) {
-        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
-            if KMGuideInfoWindowController.availableShow(.editPDFPopWindow) {
-                let guideWC = KMGuideInfoWindowController.currentWC()
-                //                guard let guideWC = guideInfoWindowController else { return }
-                
-                guideWC.type = .editPDFPopWindow
-                var viewFrame = view.superview?.convert(view.frame, to: view.window?.contentView) ?? .zero
-                viewFrame.origin.x += (view.window?.frame.origin.x ?? 0)
-                viewFrame.origin.x -= (self.viewC?.view.window?.frame.origin.x ?? 0)
-                viewFrame.origin.y += (view.window?.frame.origin.y ?? 0)
-                viewFrame.origin.x -= (self.viewC?.view.window?.frame.origin.y ?? 0)
-                
-                viewFrame.origin.x -= KMEditPDFPopGuideView.kWidth
-                viewFrame.origin.y -= KMEditPDFPopGuideView.kHeight
-                
-                viewFrame.origin.y += 26
-                guideWC.digitalBoxRect = viewFrame
-                var beh = view.window?.collectionBehavior ?? []
-                beh.insert(.canJoinAllSpaces)
-                guideWC.window?.collectionBehavior = beh
-                
-                let view_ = self.viewC?.view
-                var rect = view_?.window?.frame ?? .zero
-                rect.size.height -= 20
-                guideWC.window?.setFrame(rect, display: false)
-                guideWC.window?.minSize = rect.size
-                guideWC.window?.maxSize = rect.size
-                view_?.window?.addChildWindow(guideWC.window!, ordered: .above)
-                guideWC.show()
-                
-                guideWC.settingCallback = {
-                    KMPreferenceController.shared.showWindow(nil)
-                }
-            }
-        }
+    func pdfViewMobileEditingBegan(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
+        KMPrint("pdfViewMobileEditingBegan")
+    }
+    
+    func pdfViewMobileEditingMove(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
+        KMPrint("pdfViewMobileEditingMove")
+    }
+    
+    func pdfViewMobileEditingEnd(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
+        KMPrint("pdfViewMobileEditingEnd")
     }
 }

+ 12 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift

@@ -1150,6 +1150,18 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
         self.editPDFHanddler.pdfViewEditingAddTextArea(pdfView, add: page, add: rect)
     }
     
+    func pdfViewMobileEditingBegan(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
+        self.editPDFHanddler.pdfViewMobileEditingBegan(point, for: pdfView, forEditing: editingAreas)
+    }
+    
+    func pdfViewMobileEditingMove(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
+        self.editPDFHanddler.pdfViewMobileEditingMove(point, for: pdfView, forEditing: editingAreas)
+    }
+    
+    func pdfViewMobileEditingEnd(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
+        self.editPDFHanddler.pdfViewMobileEditingEnd(point, for: pdfView, forEditing: editingAreas)
+    }
+    
     func pdfListViewKeyDownIsContinue(_ pdfListView: CPDFListView!, theEvent: NSEvent!) -> Bool {
         let command = theEvent.modifierFlags.contains(.command)
         let control = theEvent.modifierFlags.contains(.control)