Ver código fonte

compdfkit(win) - 优化更新签名状态

weixiangjie 1 ano atrás
pai
commit
12be036dd8

+ 9 - 0
Demo/Examples/Compdfkit_Tools/Common/BarControl/CPDFBOTABarControl.xaml.cs

@@ -472,5 +472,14 @@ namespace Compdfkit_Tools.PDFControl
                 ((CPDFAnnotationListControl)currentBotaTool).LoadAnnotationList();
             }
         }
+        
+        public void LoadSignatureList()
+        {
+            UIElement currentBotaTool = GetBotaTool();
+            if (currentBotaTool is CPDFSignatureListControl)
+            {
+                ((CPDFSignatureListControl)currentBotaTool).LoadSignatureList();
+            }
+        }
     }
 }

+ 6 - 5
Demo/Examples/Compdfkit_Tools/DigitalSignature/CPDFSignatureListControl/CPDFSignatureListControl.xaml.cs

@@ -112,18 +112,19 @@ namespace Compdfkit_Tools.DigitalSignature.CPDFSignatureListControl
                     {
                         signature.VerifySignatureWithDocument(pdfViewer.Document);
                         var item = new SignatureData();
-                        CPDFSigner signer = signature.SignerList.Last();
-                        if (!signer.IsSignVerified)
+                        CPDFSigner signer = signature.SignerList.First();
+                        bool isSignVerified = signer.IsSignVerified;
+                        if (isSignVerified && signer.IsCertTrusted)
                         {
-                            item.Status = SignatureStatus.Invalid;
+                            item.Status = SignatureStatus.Valid;
                         }
-                        else if (!signer.IsCertTrusted)
+                        else if (isSignVerified && !signer.IsCertTrusted)
                         {
                             item.Status = SignatureStatus.Unknown;
                         }
                         else
                         {
-                            item.Status = SignatureStatus.Valid;
+                            item.Status = SignatureStatus.Invalid;
                         }
                         
                         item.Signer = signature.Name + "'s signature";

+ 11 - 11
Demo/Examples/Compdfkit_Tools/DigitalSignature/DigitalSignatureControl/DigitalSignatureControl.xaml.cs

@@ -29,6 +29,7 @@ namespace Compdfkit_Tools.PDFControl
         private CPDFSignatureWidget currentSignatureWidget;
         public event EventHandler<string> AfterFillSignature;
 
+        public event EventHandler SignatureStatusChanged;
         public event PropertyChangedEventHandler PropertyChanged;
         protected void OnPropertyChanged([CallerMemberName] string name = null)
         {
@@ -122,17 +123,16 @@ namespace Compdfkit_Tools.PDFControl
         }
          
 
-        public void BotaControlOnDeleteSignatureEvent(object sender, EventArgs e)
-        {
-            UpdateSignatureStatusBarControl();
-        }
+
 
         private void PDFView_WidgetClickHandler(object sender, WidgetArgs e)
         {
             var signatureWidget = (e as WidgetSignArgs).Sign;
             if (signatureWidget.IsSigned())
             {
-                ViewSignatureEvent(sender, signatureWidget.GetSignature());
+                CPDFSignature sig = signatureWidget.GetSignature();
+                sig.VerifySignatureWithDocument(PDFViewControl.PDFView.Document);
+                ViewSignatureEvent(sender, sig);
             }
             else
             {
@@ -180,15 +180,10 @@ namespace Compdfkit_Tools.PDFControl
             {
                 ToggleButton button = sender as ToggleButton;
                 button.IsChecked = false;
-                UpdateSignatureStatusBarControl();
+                SignatureStatusChanged?.Invoke(this, null);
             }
         }
 
-        private void UpdateSignatureStatusBarControl()
-        {
-            signatureStatusBarControl.SetStatus(SignatureHelper.GetEffectiveSignatureList(PDFViewControl.PDFView.Document.GetSignatureList()));
-        }
-
         private string GetTime()
         {
             DateTime dateTime = DateTime.Now;
@@ -269,6 +264,11 @@ namespace Compdfkit_Tools.PDFControl
             ViewCertificateDialog dialog = new ViewCertificateDialog();
             dialog.Show();
             dialog.InitCertificateList(e);
+            dialog.CertificateInfoControl.TrustCertificateEvent += (o, args) =>
+            {
+                e.VerifySignatureWithDocument(PDFViewControl.PDFView.Document);
+                SignatureStatusChanged?.Invoke(this, null);
+            };
         }
 
         public void SetDisplaySettingsControl(CPDFDisplaySettingsControl displaySettingsControl)

+ 1 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/SignatureStatusBarControl/SignatureStatusBarControl.xaml.cs

@@ -94,7 +94,7 @@ namespace Compdfkit_Tools.PDFControl
             else if (signatureList.Count() == 1)
             {
                 CPDFSignature signature = signatureList.First();
-                CPDFSigner signer = signature.SignerList.Last();
+                CPDFSigner signer = signature.SignerList.First();
                 bool isTrusted = signer.IsCertTrusted;
                 bool isVerified = signer.IsSignVerified;
                 if (isTrusted && isVerified)

+ 2 - 2
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/DigitalSignatureInfoControl.xaml.cs

@@ -52,7 +52,7 @@ namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
             if(signature == null)
                 return;
             SignatureStatus status;
-            CPDFSigner signer = signature.SignerList.Last();
+            CPDFSigner signer = signature.SignerList.First();
             bool isTrusted = signer.IsCertTrusted;
             bool isVerified = signer.IsSignVerified;
             if (isTrusted && isVerified)
@@ -73,7 +73,7 @@ namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
             Status = status;
 
             signerName = signature.Name;
-            email = DictionaryValueConverter.GetEmailFormDictionary(signature.SignerList.Last().CertificateList.Last().SubjectDict);
+            email = DictionaryValueConverter.GetEmailFormDictionary(signature.SignerList.First().CertificateList.Last().SubjectDict);
             time = signature.Date;
             SignerInfo = validity + ",Signed by" + "\"" + signerName;
             if (!string.IsNullOrEmpty(email))

+ 3 - 3
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/DigitalSignatureValiditySummaaryControl.xaml.cs

@@ -25,11 +25,11 @@ namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
 
         public void InitWithSignature(CPDFSignature signature)
         {
-            bool isSignVerified = signature.SignerList.Last().IsSignVerified;
-            bool isCertTrusted = signature.SignerList.Last().IsCertTrusted;
+            bool isSignVerified = signature.SignerList.First().IsSignVerified;
+            bool isCertTrusted = signature.SignerList.First().IsCertTrusted;
             bool isDocModified = signature.ModifyInfoList.Count > 0;
             bool isExpired = DateTime.Now >
-            CommonHelper.GetDateTimeFromString(signature.SignerList.Last().CertificateList.Last().ValidityEnds);
+            CommonHelper.GetDateTimeFromString(signature.SignerList.First().CertificateList.First().ValidityEnds);
             
             string validitySummaryString = "";
             if (isCertTrusted)

+ 6 - 0
Demo/Examples/Compdfkit_Tools/DigitalSignature/ViewCertificationControl/CertificateInfoControl.xaml.cs

@@ -18,6 +18,7 @@ using ComPDFKit.DigitalSign;
 namespace Compdfkit_Tools.PDFControl {
     public partial class CertificateInfoControl : UserControl
     {
+        public event EventHandler TrustCertificateEvent;
         public CertificateInfoControl()
         {
             InitializeComponent();
@@ -28,6 +29,11 @@ namespace Compdfkit_Tools.PDFControl {
             SummaryControl.LoadSummaryInfo(certificate);
             CertificateDetailControl.LoadDetailInfo(certificate);
             ConfidenceControl.LoadConfidenceInfo(certificate);
+
+            ConfidenceControl.TrustCertificateEvent += (sender, args) =>
+            {
+                TrustCertificateEvent?.Invoke(sender, null);
+            };
         }
     }
 }

+ 3 - 0
Demo/Examples/Compdfkit_Tools/DigitalSignature/ViewCertificationControl/ConfidenceControl.xaml.cs

@@ -29,6 +29,8 @@ namespace Compdfkit_Tools.PDFControl
         public static ResourceDictionary ResourceDictionary { get; set; }
         private bool isTrusted;
         private CPDFSignatureCertificate cpdfCertificate;
+        
+        public event EventHandler TrustCertificateEvent;
         public bool IsTrusted
         {
             get => isTrusted;
@@ -76,6 +78,7 @@ namespace Compdfkit_Tools.PDFControl
         {
             cpdfCertificate.AddToTrustedCertificates();
             VerifyCertificate();
+            TrustCertificateEvent?.Invoke(this, null);
         }
     }
     

+ 1 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/ViewCertificationControl/ViewCertificateDialog.xaml.cs

@@ -30,7 +30,7 @@ namespace Compdfkit_Tools.PDFControl
         public void InitCertificateList(CPDFSignature signature)
         {
             CertificateListView.ItemsSource = null;
-            certificateList = signature.SignerList.Last().CertificateList;
+            certificateList = signature.SignerList.First().CertificateList;
             CertificateListView.ItemsSource = certificateList;
             CertificateListView.SelectedIndex = certificateList.Count - 1;
         }

+ 36 - 5
Demo/Examples/DigitalSignature/MainWindow.xaml.cs

@@ -22,6 +22,7 @@ using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using ComPDFKit.DigitalSign;
 
 namespace DigitalSignature
 {
@@ -39,6 +40,7 @@ namespace DigitalSignature
         private CPDFBOTABarControl botaBarControl = new CPDFBOTABarControl(BOTATools.Thumbnail | BOTATools.Outline | BOTATools.Bookmark | BOTATools.Search | BOTATools.Annotation | BOTATools.Signature);
         private CPDFDisplaySettingsControl displaySettingsControl = new CPDFDisplaySettingsControl();
         private SignatureStatusBarControl signatureStatusBarControl = new SignatureStatusBarControl();
+        private List<CPDFSignature> signatures = new List<CPDFSignature>();
 
         private PanelState panelState = PanelState.GetInstance();
         public event EventHandler<bool> OnCanSaveChanged;
@@ -163,6 +165,9 @@ namespace DigitalSignature
 
         private void LoadCustomControl()
         {
+            signatures = SignatureHelper.GetEffectiveSignatureList(pdfViewer.PDFView.Document.GetSignatureList());
+            VerifySignatures();
+            
             regularViewerControl.PdfViewControl = pdfViewer;
             regularViewerControl.InitWithPDFViewer(pdfViewer.PDFView);
             regularViewerControl.PdfViewControl.PDFView.SetMouseMode(MouseModes.Viewer);
@@ -171,11 +176,16 @@ namespace DigitalSignature
             regularViewerControl.SetDisplaySettingsControl(displaySettingsControl);
             PDFGrid.Child = regularViewerControl;
             
-            signatureStatusBarControl.SetStatus(SignatureHelper.GetEffectiveSignatureList(pdfViewer.PDFView.Document.GetSignatureList()));
+            signatureStatusBarControl.SetStatus(signatures);
             regularViewerControl.SetSignatureStatusBarControl(signatureStatusBarControl);
 
             signatureStatusBarControl.OnViewSignatureButtonClicked -= ViewAllSignatures;
             signatureStatusBarControl.OnViewSignatureButtonClicked += ViewAllSignatures;
+            
+            digitalSignatureControl.OnCanSaveChanged -= DigitalSignatureControl_OnCanSaveChanged;
+            digitalSignatureControl.OnCanSaveChanged += DigitalSignatureControl_OnCanSaveChanged;
+            digitalSignatureControl.SignatureStatusChanged -= DigitalSignatureControl_OnSignatureStatusChanged;
+            digitalSignatureControl.SignatureStatusChanged += DigitalSignatureControl_OnSignatureStatusChanged;
         }
 
         private void LoadDocument()
@@ -203,8 +213,8 @@ namespace DigitalSignature
             ModeComboBox.SelectedIndex = 0;
             botaBarControl.InitWithPDFViewer(pdfViewer.PDFView);
             botaBarControl.SelectBotaTool(BOTATools.Thumbnail);
-            botaBarControl.DeleteSignatureEvent -= digitalSignatureControl.BotaControlOnDeleteSignatureEvent;
-            botaBarControl.DeleteSignatureEvent += digitalSignatureControl.BotaControlOnDeleteSignatureEvent;
+            botaBarControl.DeleteSignatureEvent -= BotaControlOnDeleteSignatureEvent;
+            botaBarControl.DeleteSignatureEvent += BotaControlOnDeleteSignatureEvent;
             botaBarControl.ViewCertificateEvent -= digitalSignatureControl.ViewCertificateEvent;
             botaBarControl.ViewCertificateEvent += digitalSignatureControl.ViewCertificateEvent;
             botaBarControl.ViewSignatureEvent -= digitalSignatureControl.ViewSignatureEvent;    
@@ -214,12 +224,25 @@ namespace DigitalSignature
             LoadCustomControl();
             pdfViewer.PDFView.ChangeFitMode(FitMode.FitWidth);
             CPDFSaclingControl.InitWithPDFViewer(pdfViewer.PDFView);
-            digitalSignatureControl.OnCanSaveChanged -= DigitalSignatureControl_OnCanSaveChanged;
-            digitalSignatureControl.OnCanSaveChanged += DigitalSignatureControl_OnCanSaveChanged;
+            
             regularViewerControl.IsActive = true;
             digitalSignatureControl.InitWithPDFViewer(pdfViewer.PDFView);
         }
 
+        public void BotaControlOnDeleteSignatureEvent(object sender, EventArgs e)
+        {
+            DigitalSignatureControl_OnSignatureStatusChanged(sender, e);
+        }
+        
+        private void DigitalSignatureControl_OnSignatureStatusChanged(object sender, EventArgs e)
+        {
+            signatures = SignatureHelper.GetEffectiveSignatureList(pdfViewer.PDFView.Document.GetSignatureList());
+            VerifySignatures();
+            signatureStatusBarControl.SetStatus(signatures);
+            botaBarControl.LoadSignatureList();
+            pdfViewer.PDFView.ReloadDocument();
+        }
+
         private void DigitalSignatureControl_OnCanSaveChanged(object sender, bool e)
         {
             this.CanSave = e;
@@ -345,6 +368,14 @@ namespace DigitalSignature
             botaBarControl.SelectBotaTool(BOTATools.Signature);
         }
 
+        private void VerifySignatures()
+        {
+            foreach (var sig in signatures)
+            {
+                sig.VerifySignatureWithDocument(pdfViewer.PDFView.Document);
+            }
+        }
+
         private void ExpandSearchBtn_Click(object sender, RoutedEventArgs e)
         {
             LeftToolPanelButton.IsChecked = true;