Jelajahi Sumber

【数字签名】补充删除逻辑

lizhe 10 bulan lalu
induk
melakukan
5800572898

+ 1 - 1
PDF Office/PDF Master/Class/DigtalSignature/CPDFDigtalView/CPDFDigtalView.h

@@ -109,5 +109,5 @@
 
 - (void)PDFListViewEditAnnotation:(CPDFDigtalView *)pdfListView forAnnotation:(CPDFAnnotation *)anotation;
 
-
+- (void)PDFListViewDeleteAnnotation:(CPDFDigtalView *)pdfListView forAnnotation:(CPDFAnnotation *)anotation;
 @end

+ 9 - 0
PDF Office/PDF Master/Class/DigtalSignature/CPDFDigtalView/CPDFDigtalView.m

@@ -801,6 +801,15 @@
     [tarr removeObjectsInArray:removeAnnotations];
     self.activeAnnotations = tarr;
     isContains = YES;
+    
+    if(isContains) {
+        if([self.pdfListViewDelegate respondsToSelector:@selector(PDFListViewDeleteAnnotation:forAnnotation:)])
+            [self.pdfListViewDelegate PDFListViewDeleteAnnotation:self forAnnotation:removeAnnotations.firstObject];
+
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [[NSNotificationCenter defaultCenter] postNotificationName:CPDFListViewActiveAnnotationsChangeNotification object:self];
+        });
+    }
 
 //    if(isContains) {
 //        if([self.pdfListViewDelegate respondsToSelector:@selector(PDFListViewChangeatioActiveAnnotations:forActiveAnnotations:isRightMenu:)])

+ 96 - 64
PDF Office/PDF Master/Class/DigtalSignature/CPDFDigtalView/KMPDFDigitalSignViewController.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMPDFDigitalSignViewController: NSViewController, CPDFViewDelegate, CPDFDigtalViewDelegate {
+class KMPDFDigitalSignViewController: NSViewController, CPDFViewDelegate {
 
     @IBOutlet weak var contendView: NSView!
     @IBOutlet weak var headerView: NSView!
@@ -266,7 +266,78 @@ class KMPDFDigitalSignViewController: NSViewController, CPDFViewDelegate, CPDFDi
         }
         callBack(title, self.currentPageIndex)
     }
+
+    func popUpSignatureWidgetState(_ signature: CPDFSignature, _ pdfListView: CPDFDigtalView) ->(){
+        
+        if self.stateVC == nil {
+            self.stateVC = CDSignatureCertificateStateViewController.init()
+        }
+        self.stateVC.signature = signature
+        self.stateVC.pdfListView = pdfListView
+        self.stateVC.actionBlock = { stateVCSelf, actionType in
+            if actionType == .cancel {
+                stateVCSelf.dismiss(stateVCSelf)
+            } else if actionType == .confirm {
+                let signer = signature.signers.first
+                if let data = signer?.certificates {
+                    let signatureDetail = DSignatureDetailsViewController.init()
+                    signatureDetail.certificates = data
+                    signatureDetail.signature = signature
+                    signatureDetail.pdfListView = pdfListView
+                    stateVCSelf.presentAsSheet(signatureDetail)
+                } else {
+                    NSSound.beep()
+                }
+            }
+        }
+        self.presentAsSheet(self.stateVC)
+        self.stateVC.reloadData()
+    }
+     
+    func signElectronicSignature(_ signatureWidgetAnnotation: CPDFSignatureWidgetAnnotation) -> () {
+        
+//        PDFCustomSignatureWindowController *signatureWindowController = [[PDFCustomSignatureWindowController alloc] init];
+//        __block typeof(self) blockSelf = self;
+//        [signatureWindowController beginSheetModalForWindow:[NSApp mainWindow] completionHandler:^(PDFSignature *signature){
+//            if (signature) {
+//                [signatureWidgetAnnotation signWithImage:signature.pathsImage];
+//                [blockSelf.PDFListView setNeedsDisplayAnnotationViewForPage:signatureWidgetAnnotation.page];
+//            }
+//        }];
+//        [signatureWindowController release];
+    }
     
+    //MARK: Notification
+    @objc fileprivate func signatureStateChangeNoti() {
+         
+        let signatures = self.pdfView.document.signatures()!
+        
+        let tempArr = NSMutableArray()
+        for signature in signatures {
+            if signature.signers != nil {
+                if signature.signers.count > 0 {
+                    signature.verifySignature(with: self.pdfView.document)
+                    tempArr.add(signature)
+                }
+            }
+        }
+        self.pdfView.signatures = tempArr as? [Any]
+        
+        self.reloadState()
+        
+        if self.stateVC != nil {
+            let signatureWidget = self.editWidgeAnnotation!
+            var signature = signatureWidget.signature()
+            if signature == nil {
+                return
+            }
+            self.stateVC.signature = signature
+            self.stateVC.reloadData()
+        }
+    }
+}
+
+extension KMPDFDigitalSignViewController: CPDFDigtalViewDelegate {
     func pdfListViewAddAnnotation(_ pdfListView: CPDFDigtalView!, forAdd annotation: CPDFAnnotation!, in pdfPage: CPDFPage!) {
         
         let widget = CPDFSignatureWidgetAnnotation.init(PDFListViewNoteWith: self.pdfView.document)
@@ -348,73 +419,34 @@ class KMPDFDigitalSignViewController: NSViewController, CPDFViewDelegate, CPDFDi
 //            }
         }
     }
-
-    func popUpSignatureWidgetState(_ signature: CPDFSignature, _ pdfListView: CPDFDigtalView) ->(){
-        
-        if self.stateVC == nil {
-            self.stateVC = CDSignatureCertificateStateViewController.init()
-        }
-        self.stateVC.signature = signature
-        self.stateVC.pdfListView = pdfListView
-        self.stateVC.actionBlock = { stateVCSelf, actionType in
-            if actionType == .cancel {
-                stateVCSelf.dismiss(stateVCSelf)
-            } else if actionType == .confirm {
-                let signer = signature.signers.first
-                if let data = signer?.certificates {
-                    let signatureDetail = DSignatureDetailsViewController.init()
-                    signatureDetail.certificates = data
-                    signatureDetail.signature = signature
-                    signatureDetail.pdfListView = pdfListView
-                    stateVCSelf.presentAsSheet(signatureDetail)
-                } else {
-                    NSSound.beep()
-                }
-            }
-        }
-        self.presentAsSheet(self.stateVC)
-        self.stateVC.reloadData()
-    }
-     
-    func signElectronicSignature(_ signatureWidgetAnnotation: CPDFSignatureWidgetAnnotation) -> () {
-        
-//        PDFCustomSignatureWindowController *signatureWindowController = [[PDFCustomSignatureWindowController alloc] init];
-//        __block typeof(self) blockSelf = self;
-//        [signatureWindowController beginSheetModalForWindow:[NSApp mainWindow] completionHandler:^(PDFSignature *signature){
-//            if (signature) {
-//                [signatureWidgetAnnotation signWithImage:signature.pathsImage];
-//                [blockSelf.PDFListView setNeedsDisplayAnnotationViewForPage:signatureWidgetAnnotation.page];
-//            }
-//        }];
-//        [signatureWindowController release];
-    }
     
-    //MARK: Notification
-    @objc fileprivate func signatureStateChangeNoti() {
-         
-        let signatures = self.pdfView.document.signatures()!
+    func pdfListViewDeleteAnnotation(_ pdfListView: CPDFDigtalView!, for anotation: CPDFAnnotation!) {
+        let fileName = self.pdfView.document.documentURL?.lastPathComponent
+        let fileNameWithoutExtension = URL(fileURLWithPath: fileName!).deletingPathExtension().lastPathComponent
         
-        let tempArr = NSMutableArray()
-        for signature in signatures {
-            if signature.signers != nil {
-                if signature.signers.count > 0 {
-                    signature.verifySignature(with: self.pdfView.document)
-                    tempArr.add(signature)
+        let outputSavePanel = NSSavePanel()
+        outputSavePanel.directoryURL = self.pdfView.document.documentURL.deletingLastPathComponent()
+        outputSavePanel.title = NSLocalizedString("", comment: "Save as PDF")
+        outputSavePanel.allowedFileTypes = ["pdf"]
+        outputSavePanel.nameFieldStringValue = fileNameWithoutExtension + "_" + NSLocalizedString("Signed", comment: "")
+        let result = outputSavePanel.runModal()
+        if result == .OK {
+            let success = self.pdfView.document.write(to: outputSavePanel.url)
+            if success {
+                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+                    NSDocumentController.shared.openDocument(withContentsOf: outputSavePanel.url!, display: true) { document, documentWasAlreadyOpen, error in
+                        if error != nil {
+                            NSApp.presentError(error!)
+                            return
+                        }
+                    }
                 }
+            } else {
+                let alert = NSAlert.init()
+                alert.messageText = NSLocalizedString("Save failed!", comment: "")
+                alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
+                alert.runModal()
             }
         }
-        self.pdfView.signatures = tempArr as? [Any]
-        
-        self.reloadState()
-        
-        if self.stateVC != nil {
-            let signatureWidget = self.editWidgeAnnotation!
-            var signature = signatureWidget.signature()
-            if signature == nil {
-                return
-            }
-            self.stateVC.signature = signature
-            self.stateVC.reloadData()
-        }
     }
 }