|
@@ -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()
|
|
|
- }
|
|
|
}
|
|
|
}
|