Browse Source

【综合】电子签名和数字签名合并

tangchao 7 months ago
parent
commit
be6983dd5d

+ 40 - 2
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarViewController.swift

@@ -26,6 +26,7 @@ import Cocoa
     case LeftPanel
     case RightPanel
     case viewSetting
+    case sign
     case AITools
     
     func isToolMode() -> Bool {
@@ -743,7 +744,7 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
                     KMDocumentFormToolbarItemIdentifier,
                     KMDocumentFillSginToolbarItemIdentifier,
                     KMDocumentEditToolbarItemIdentifier,
-                    KMDocumentDigitalSignToolbarItemIdentifier,
+                    KMDocumentSignToolbarItemIdentifier,
                     KMDocumentRedactToolbarItemIdentifier,
                     KMDocumentScanOCRToolbarItemIdentifier,
                     KMDocumentAIToolsToolbarItemIdentifier]
@@ -786,7 +787,7 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
                     KMToolbarToolListBoxItemIdentifier,
                     KMToolbarToolPullDownmenuItemIdentifier,
                     KMToolbarToolButtonIdentifier,
-                    KMToolbarToolSignBoxIdentifier,
+//                    KMToolbarToolSignBoxIdentifier,
                     KMToolbarDividerItemIdentifier,
                     KMToolbarToolFormAlignIdentifier]
         case .FillSign:
@@ -817,6 +818,8 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
         case .viewSetting:
             return [KMToolbarViewSettingIdentifier, KMToolbarCropIdentifier,
                     KMToolbarSnapshotIdentifier, KMToolbarTTSIdentifier]
+        case .sign:
+            return [KMToolbarToolSignBoxIdentifier, KMSignDigitalSignToolbarItemIdentifier]
         default:
             break
         }
@@ -980,6 +983,8 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
                     }
                     
                     return item!
+                } else if KMSignIdentifiers.contains(identifier) {
+                    self._setupSignItem(item)
                 }
             }
 
@@ -1531,6 +1536,20 @@ extension KMToolbarViewController {
             let view = NSView()
             view.frame = NSMakeRect(0, 0, 36, 36)
             item?.customizeView = view
+        } else if identifier == KMDocumentSignToolbarItemIdentifier {
+            item?.image = NSImage(named: "DigitalSign_icon")
+            item?.target = self
+//            item?.toolTip = NSLocalizedString("Digital signature ensures the authenticity and integrity of digital files. Click and drag the cursor to create a signature field on the page.", comment: "")
+            item?.titleName = NSLocalizedString("Signature", comment: "")
+            item?.selectBackgroundType = .imageBox
+            item?.boxImagePosition = .imageAbove
+            item?.btnAction = #selector(_itemAction)
+            item?.promptIdentifier = identifier
+            
+            let menuItem = NSMenuItem.init(title: NSLocalizedString("Digital Sign", comment: ""), action: #selector(_menuItemAction), target: self)
+            menuItem.tag = item!.btnTag
+            menuItem.representedObject = identifier
+            item?.menuFormRepresentation = menuItem
         }
     }
     
@@ -2320,6 +2339,25 @@ extension KMToolbarViewController {
             item?.btnAction = #selector(mergeMenuItemAction)
         }
     }
+    
+    private func _setupSignItem(_ item: KMToolbarItemView?) {
+        let identifier = item?.itemIdentifier
+        if identifier == KMSignDigitalSignToolbarItemIdentifier {
+            item?.image = NSImage(named: "DigitalSign_icon")
+            item?.target = self
+            item?.toolTip = NSLocalizedString("Digital signature ensures the authenticity and integrity of digital files. Click and drag the cursor to create a signature field on the page.", comment: "")
+            item?.titleName = NSLocalizedString("Digital Sign", comment: "")
+//            item?.selectBackgroundType = .imageBox
+            item?.boxImagePosition = .imageLeft
+            item?.btnAction = #selector(_itemAction)
+            item?.promptIdentifier = identifier
+            
+            let menuItem = NSMenuItem.init(title: NSLocalizedString("Digital Sign", comment: ""), action: #selector(_menuItemAction), target: self)
+            menuItem.tag = item!.btnTag
+            menuItem.representedObject = identifier
+            item?.menuFormRepresentation = menuItem
+        }
+    }
 }
 
 extension KMToolbarViewController: NSMenuItemValidation {

+ 6 - 1
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/PublicKey.swift

@@ -22,6 +22,7 @@ let KMDocumentFillSginToolbarItemIdentifier = "KMDocumentFillSginToolbarItemIden
 let KMDocumentToolToolbarItemIdentifier = "KMDocumentToolToolbarItemIdentifier"
 let KMDocumentRedactToolbarItemIdentifier = "KMDocumentRedactToolbarItemIdentifier"
 let KMDocumentDigitalSignToolbarItemIdentifier = "KMDocumentDigitalSignToolbarItemIdentifier"
+let KMDocumentSignToolbarItemIdentifier = "KMDocumentSignToolbarItemIdentifier"
 let KMDocumentViewDisplayToolbarItemIdentifier = "KMDocumentViewDisplayToolbarItemIdentifier"
 let KMDocumentPrintToolbarItemIdentifier = "KMDocumentPrintToolbarItemIdentifier"
 let KMDocumentAITranslationToolbarItemIdentifier = "KMDocumentAITranslationToolbarItemIdentifier"
@@ -37,7 +38,8 @@ let KMDocumentPresentationToolbarItemIdentifier = "presentationItemIdentifier"
 
 let mainToolIdentifiers = [KMLeftControlToolbarItemIdentifier,
                            KMDocumentZoomViewToolbarItemIdentifier, KMDocumentPreviousPageToolbarItemIdentifier,
-                           KMDocumentHomeToolbarItemIdentifier, KMDocumentAnnotationToolbarItemIdentifier, KMDocumentPageToolbarItemIdentifier, KMDocumentConversonToolbarItemIdentifier,KMDocumentRedactToolbarItemIdentifier,KMDocumentAIToolsToolbarItemIdentifier,KMDocumentViewDisplayToolbarItemIdentifier,KMDocumentScanOCRToolbarItemIdentifier, KMDocumentFormToolbarItemIdentifier, KMDocumentEditToolbarItemIdentifier, KMDocumentDigitalSignToolbarItemIdentifier,
+                           KMDocumentHomeToolbarItemIdentifier, KMDocumentAnnotationToolbarItemIdentifier, KMDocumentPageToolbarItemIdentifier, KMDocumentConversonToolbarItemIdentifier,KMDocumentRedactToolbarItemIdentifier,KMDocumentAIToolsToolbarItemIdentifier,KMDocumentViewDisplayToolbarItemIdentifier,KMDocumentScanOCRToolbarItemIdentifier, KMDocumentFormToolbarItemIdentifier, KMDocumentEditToolbarItemIdentifier,
+                           KMDocumentDigitalSignToolbarItemIdentifier,KMDocumentSignToolbarItemIdentifier,
                            KMDocumentFillSginToolbarItemIdentifier, KMDocumentToolToolbarItemIdentifier, KMDocumentPrintToolbarItemIdentifier,
                            KMDocumentShareToolbarItemIdentifier, KMDocumentSearchToolbarItemIdentifier, KMRightControlToolbarItemIdentifier,
                            KMDocumentPreviousBackToolbarItemIdentifier, KMDocumentFirstLastToolbarItemIdentifier,
@@ -182,6 +184,9 @@ let KMToolbarSnapshotIdentifier = "KMToolbarTakeSnapshotItemIdentifier"
 let KMToolbarTTSIdentifier = "KMToolbarTTSViewItemIdentifier"
 let KMViewDisplayIdentifiers = [KMToolbarViewSettingIdentifier, KMToolbarCropIdentifier, KMToolbarSnapshotIdentifier, KMToolbarTTSIdentifier]
 
+let KMSignDigitalSignToolbarItemIdentifier = "KMSignDigitalSignToolbarItemIdentifier"
+let KMSignIdentifiers = [KMToolbarToolSignBoxIdentifier, KMSignDigitalSignToolbarItemIdentifier]
+
 let KMNewToolbarSpaceItemIdentifier         =  "KMNewToolbarSpaceItemIdentifier"
 //let KMToolbarDividerItemIdentifier          =  "KMToolbarDividerItemIdentifier"
 

+ 30 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -4380,6 +4380,10 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
                     self.showPrintWindow()
                 } else if itemID == KMDocumentPresentationToolbarItemIdentifier {
                     self.enterPresentation()
+                } else if itemID == KMDocumentSignToolbarItemIdentifier {
+                    let isSelected = toolbarItem.isSelected
+                    self.toolbarController.toolbarType = isSelected ? .None : .sign
+                    toolbarItem.isSelected = !isSelected
                 }
             } else {
                 if toolbarItem.itemIdentifier == KMToolbarAnnotationSettingItemIdentifier {
@@ -4449,6 +4453,19 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
                 } else if toolbarItem.itemIdentifier == KMToolbarPageEditSplitItemIdentifier { // 拆分
                     let windowC = SplitWindowController(document: self.listView.document)
                     self.km_beginSheet(windowC: windowC)
+                } else if itemID == KMSignDigitalSignToolbarItemIdentifier {
+                    if self.canEnterDigitalSign() == false {
+                        Task {
+                            _ = await KMAlertTool.runModel(message: NSLocalizedString("This is a secured document. Editing is not permitted.", comment: ""))
+                        }
+                        return
+                    }
+                    toolbarItem.isSelected = !toolbarItem.isSelected
+                    self.toolbarController.lastItemBox = toolbarItem
+                    if toolbarItem.isSelected {
+                        FMTrackEventManager.defaultManager.trackEvent(event: "Tbr", withProperties: ["Tbr_Btn": "Btn_Tbr_DigitalSignature"])
+                    }
+                    self.enterDigitalSign()
                 }
             }
         }
@@ -4616,6 +4633,19 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
                 FMTrackEventManager.defaultManager.trackEvent(event: "Tbr", withProperties: ["Tbr_Btn": "Btn_Tbr_DigitalSignature"])
             }
             self.enterDigitalSign()
+        } else if itemId == KMSignDigitalSignToolbarItemIdentifier {
+            if self.canEnterDigitalSign() == false {
+                Task {
+                    _ = await KMAlertTool.runModel(message: NSLocalizedString("This is a secured document. Editing is not permitted.", comment: ""))
+                }
+                return
+            }
+            toolbarItem.isSelected = !toolbarItem.isSelected
+            self.toolbarController.lastItemBox = toolbarItem
+            if toolbarItem.isSelected {
+                FMTrackEventManager.defaultManager.trackEvent(event: "Tbr", withProperties: ["Tbr_Btn": "Btn_Tbr_DigitalSignature"])
+            }
+            self.enterDigitalSign()
         } else if itemId == KMDocumentAIToolsToolbarItemIdentifier {
             self.showAITypeChooseView(aiConfigType: .none)
         }

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

@@ -324,12 +324,23 @@ extension KMMainViewController: KMToolbarControllerDelegate {
             } else {
                 self.listView.toolMode = .textToolMode
             }
+            let type = CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown
+            if type == .signature {
+                self.toolbarController.findItem(KMToolbarToolSignBoxIdentifier)?.isSelected = false
+            }
             self.listView.annotationType = .unkown
             self.closeRightPane()
         } else {
             let type = CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown
             self.trackEvent(annotationType: type)
 
+            if type == .signature {
+                if self.listView.toolMode != .formToolMode {
+                    self.listView.toolMode = .formToolMode
+                    
+                    self.toolbarController.findItem(KMToolbarToolSignBoxIdentifier)?.isSelected = true
+                }
+            }
             self.listView.annotationType = type
             
             if self.listView.currentSelection != nil {

+ 2 - 1
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift

@@ -1132,7 +1132,8 @@ import Cocoa
         self.digitalSignController?.view.removeFromSuperview()
 //        self.digitalSignController = nil
         
-        self.toolbarController.findItem(KMDocumentDigitalSignToolbarItemIdentifier)?.isSelected = false
+        // KMDocumentDigitalSignToolbarItemIdentifier
+        self.toolbarController.findItem(KMDocumentSignToolbarItemIdentifier)?.isSelected = false
     }
     
     func showDigitalSignWindow(withFilePathURL fileURL: URL) {