Преглед на файлове

compdfkit(win) - 顶部签名状态条

weixiangjie преди 1 година
родител
ревизия
1f700826e9

+ 7 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/CPDFSignatureListControl/CPDFSignatureListControl.xaml.cs

@@ -49,7 +49,13 @@ namespace Compdfkit_Tools.DigitalSignature.CPDFSignatureListControl
         
         private void ViewSignatureDetailsMenu_Click(object sender, RoutedEventArgs e)
         {
-            
+            int index = SignatureList.SelectedIndex;
+            if (index >= 0 && index < signatureList.Count)
+            {
+                VerifyDigitalSignatureControl.VerifyDigitalSignatureControl dialog = new VerifyDigitalSignatureControl.VerifyDigitalSignatureControl();
+                dialog.Show();
+                dialog.InitWithSignature(signatureList[index]);
+            }
         }
         
         private void DeleteMenu_Click(object sender, RoutedEventArgs e)

+ 1 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/DigitalSignatureControl/DigitalSignatureControl.xaml

@@ -100,7 +100,7 @@
                 </StackPanel>
             </StackPanel>
         </Border>
-        <Border Grid.Column="2" Grid.Row="1" x:Name="SignatureBorder"></Border>
+        <Border Grid.Column="2" Grid.Row="1" x:Name="SignatureStatusBorder" Visibility="Collapsed"></Border>
         <Border Grid.Row="2" Visibility="Collapsed" Name="BotaContainer"></Border>
         <GridSplitter Grid.Row="2" Name="Splitter" Grid.Column="1" Width="15" ResizeBehavior="PreviousAndNext" Visibility="Collapsed">
             <GridSplitter.Template>

+ 83 - 8
Demo/Examples/Compdfkit_Tools/DigitalSignature/DigitalSignatureControl/DigitalSignatureControl.xaml.cs

@@ -1,14 +1,16 @@
-using ComPDFKit.PDFAnnotation.Form;
-using Compdfkit_Tools.PDFControl;
+using Compdfkit_Tools.PDFControl;
 using ComPDFKitViewer.AnnotEvent;
 using ComPDFKitViewer.PdfViewer;
 using System;
 using System.ComponentModel; 
 using System.Runtime.CompilerServices; 
 using System.Windows;
-using System.Windows.Controls; 
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
 using System.Windows.Input;
-using System.Windows.Media; 
+using System.Windows.Media;
+using Compdfkit_Tools.Helper;
+using ComPDFKit.PDFAnnotation.Form;
 
 namespace Compdfkit_Tools.PDFControl
 { 
@@ -16,7 +18,9 @@ namespace Compdfkit_Tools.PDFControl
     {
         private bool isFirstLoad = true;
         public PDFViewControl PDFViewControl = new PDFViewControl();
-        public SignatureStatusBarControl SignatureStatusBarControl = new SignatureStatusBarControl();
+        private SignatureStatusBarControl signatureStatusBarControl;
+        private PanelState panelState = PanelState.GetInstance();
+        private CPDFDisplaySettingsControl displaySettingsControl = null;
         private bool _isActive = false;
         public event EventHandler<bool> OnCanSaveChanged;
         private CPDFSignatureWidget currentSignatureWidget;
@@ -86,6 +90,7 @@ namespace Compdfkit_Tools.PDFControl
             PDFGrid.Child = null;
             BotaContainer.Child = null;
             PropertyContainer.Child = null;
+            SignatureStatusBorder.Child = null;
         }
 
         public void InitWithPDFViewer(CPDFViewer pdfViewer)
@@ -99,6 +104,10 @@ namespace Compdfkit_Tools.PDFControl
 
             PDFViewControl.PDFView.WidgetClickHandler -= PDFView_WidgetClickHandler;
             PDFViewControl.PDFView.WidgetClickHandler += PDFView_WidgetClickHandler;
+            
+            panelState.PropertyChanged -= PanelState_PropertyChanged;
+            panelState.PropertyChanged += PanelState_PropertyChanged;
+
         }
 
         private void PDFView_WidgetClickHandler(object sender, WidgetArgs e)
@@ -138,7 +147,8 @@ namespace Compdfkit_Tools.PDFControl
             }
             else if (e == Common.CPDFDigitalSignatureBarControl.DigitalSignatureAction.VerifySignature)
             {
-
+                ToggleButton button = sender as ToggleButton;
+                button.IsChecked = false;
             }
         }
 
@@ -169,10 +179,75 @@ namespace Compdfkit_Tools.PDFControl
             PDFViewControl.PDFView.UndoManager.PropertyChanged -= UndoManager_PropertyChanged;
             PDFViewControl.PDFView.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
             PDFViewControl.PDFView.SetFormFieldHighlight(true);
-            SignatureBorder.Child = SignatureStatusBarControl;
-            SignatureStatusBarControl.Status = SignatureStatus.Invalid;
+        }
+        
+        private void PanelState_PropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            if (e.PropertyName == nameof(PanelState.IsLeftPanelExpand))
+            {
+                ExpandLeftPanel(panelState.IsLeftPanelExpand);
+            }
+            else if (e.PropertyName == nameof(PanelState.RightPanel))
+            {
+                if (panelState.RightPanel == PanelState.RightPanelState.ViewSettings)
+                {
+                    ExpandRightPropertyPanel((IsActive)?displaySettingsControl:null, Visibility.Visible);
+                }
+                else
+                {
+                    ExpandRightPropertyPanel(null, Visibility.Collapsed);
+
+                }
+            }
         }
 
+        public void ExpandLeftPanel(bool isExpand)
+        {
+            BotaContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
+            Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
+            if (isExpand)
+            {
+                BodyGrid.ColumnDefinitions[0].Width = new GridLength(320);
+                BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
+            }
+            else
+            {
+                BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
+                BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
+            }
+        }
+        
+        public void ExpandRightPropertyPanel(UIElement propertytPanel, Visibility visible)
+        {
+            PropertyContainer.Width = 260;
+            PropertyContainer.Child = propertytPanel;
+            PropertyContainer.Visibility = visible;
+        }
+        
+        public void SetBOTAContainer(CPDFBOTABarControl botaControl)
+        {
+            this.BotaContainer.Child = botaControl;
+        }
+        
+        public void SetDisplaySettingsControl(CPDFDisplaySettingsControl displaySettingsControl)
+        {
+            this.displaySettingsControl = displaySettingsControl;
+        }
+        
+        public void SetSignatureStatusBarControl(SignatureStatusBarControl signatureStatusBarControl)
+        {
+            this.signatureStatusBarControl = signatureStatusBarControl;
+            SignatureStatusBorder.Child = this.signatureStatusBarControl;
+            if (signatureStatusBarControl.Status != SignatureStatus.None)
+            {
+                SignatureStatusBorder.Visibility = Visibility.Visible;
+            }
+            else
+            {
+                SignatureStatusBorder.Visibility = Visibility.Collapsed;
+            }
+        }
+        
         /// <summary>
         /// Undo Redo Event Noitfy
         /// </summary>

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

@@ -43,6 +43,6 @@
             </Border>
         </Grid>
         <TextBlock Grid.Column="1" Text="{Binding MessageString}" VerticalAlignment="Center" FontSize="14" FontFamily="Segoe UI"></TextBlock>
-        <Button Grid.Column="2" Height="32" Width="128" HorizontalAlignment="Right" Margin="10" BorderBrush="#1460F3" Foreground="#1460F3" Content="Signature Panel" Background="#DDE9FF"></Button>
+        <Button Grid.Column="2" Height="32" Width="128" HorizontalAlignment="Right" Margin="10" BorderBrush="#1460F3" Foreground="#1460F3" Content="View All Signatures" Background="#DDE9FF" Click="ButtonViewSignature_OnClick"></Button>
     </Grid>
 </UserControl>

+ 55 - 8
Demo/Examples/Compdfkit_Tools/DigitalSignature/SignatureStatusBarControl/SignatureStatusBarControl.xaml.cs

@@ -1,8 +1,11 @@
+using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Linq;
 using System.Runtime.CompilerServices;
 using System.Windows;
 using System.Windows.Controls;
+using ComPDFKit.DigitalSign;
 
 namespace Compdfkit_Tools.PDFControl
 {
@@ -11,7 +14,8 @@ namespace Compdfkit_Tools.PDFControl
         None,
         Valid,
         Invalid,
-        Unknown
+        Unknown,
+        MultiSig
     }
     public partial class SignatureStatusBarControl : UserControl, INotifyPropertyChanged
     {
@@ -21,9 +25,12 @@ namespace Compdfkit_Tools.PDFControl
             get => _messageString;
             set => UpdateProper(ref _messageString, value);
         }
-        private string validString = "The signature is valid and the document has not been tampered with";
-        private string invalidString = "At least one signature is invalid";
-        private string unknownString = "There's something wrong with at least one of the signatures";
+        private string validString = "The signature is valid";
+        private string invalidString = "The signature is invalid";
+        private string unknownString = "Signature validity is unknown";
+        private string multiSigString = "At least one signature is invalid";
+
+        public event EventHandler OnViewSignatureButtonClicked;
         
         private SignatureStatus _status;
         public SignatureStatus Status
@@ -36,10 +43,9 @@ namespace Compdfkit_Tools.PDFControl
             }
         }
 
-        public SignatureStatusBarControl(SignatureStatus status = SignatureStatus.None)
+        public SignatureStatusBarControl()
         {
             InitializeComponent();
-            SetStatus(status);
             DataContext = this;
         }
         
@@ -66,7 +72,44 @@ namespace Compdfkit_Tools.PDFControl
                     UnknownBorder.Visibility = Visibility.Visible;
                     MessageString = unknownString;
                     break;
+                case SignatureStatus.MultiSig:
+                    UnknownBorder.Visibility = Visibility.Visible;
+                    MessageString = multiSigString;
+                    break;
+            }
+        }
+
+        public void SetStatus(List<CPDFSignature> signatureList)
+        {
+            SignatureStatus status;
+            if (signatureList.Count > 1)
+            {
+                status = SignatureStatus.MultiSig;
+            }
+            else if (signatureList.Count() == 1)
+            {
+                CPDFSignature signature = signatureList.First();
+                CPDFSigner signer = signature.SignerList.Last();
+                bool isTrusted = signer.IsCertTrusted;
+                bool isVerified = signer.IsSignVerified;
+                if (isTrusted && isVerified)
+                {
+                    status = SignatureStatus.Valid;
+                }
+                else if (!isTrusted && isVerified)
+                {
+                    status = SignatureStatus.Unknown;
+                }
+                else
+                {
+                    status = SignatureStatus.Invalid;
+                }
+            }
+            else
+            {
+                status = SignatureStatus.None;
             }
+            Status = status;
         }
 
         public event PropertyChangedEventHandler PropertyChanged;
@@ -84,7 +127,11 @@ namespace Compdfkit_Tools.PDFControl
 
         protected void OnPropertyChanged([CallerMemberName] string propertyName = "") =>
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
-        
-        
+
+
+        private void ButtonViewSignature_OnClick(object sender, RoutedEventArgs e)
+        {
+            OnViewSignatureButtonClicked?.Invoke(this,null);
+        }
     }
 }

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

@@ -1,4 +1,5 @@
 using System.Windows;
+using ComPDFKit.DigitalSign;
 
 namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
 {
@@ -8,5 +9,10 @@ namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
         {
             InitializeComponent();
         }
+
+        public void InitWithSignature(CPDFSignature signature)
+        {
+            
+        }
     }
 }

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

@@ -32,6 +32,7 @@ namespace Compdfkit_Tools.PDFControl
             CertificateListView.ItemsSource = null;
             certificateList = signature.SignerList.Last().CertificateList;
             CertificateListView.ItemsSource = certificateList;
+            CertificateListView.SelectedIndex = certificateList.Count - 1;
         }
 
         private void CertificateListView_OnSelectionChanged(object sender, SelectionChangedEventArgs e)

+ 7 - 2
Demo/Examples/Compdfkit_Tools/PDFView/RegularViewerControl.xaml

@@ -10,7 +10,12 @@
              Unloaded="UserControl_Unloaded"
              d:DesignHeight="720" d:DesignWidth="1080">
     <Grid>
-        <Grid x:Name="BodyGrid">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="auto"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <Border x:Name="SignatureStatusBorder" Visibility="Collapsed"/>
+        <Grid Grid.Row="1" x:Name="BodyGrid">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="0"></ColumnDefinition>
                 <ColumnDefinition Width="0"></ColumnDefinition>
@@ -36,6 +41,6 @@
                 <Border Grid.Column="2" x:Name="PDFGrid" Background="#CECECE"></Border>
                 <Border Grid.Column="3" Name="PropertyContainer" Visibility="Collapsed" ></Border>
         </Grid>
-        <common:PageNumberControl x:Name="FloatPageTool" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,20"></common:PageNumberControl>
+        <common:PageNumberControl Grid.Row="1" x:Name="FloatPageTool" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,20"></common:PageNumberControl>
     </Grid>
 </UserControl>

+ 16 - 0
Demo/Examples/Compdfkit_Tools/PDFView/RegularViewerControl.xaml.cs

@@ -22,6 +22,7 @@ namespace Compdfkit_Tools.PDFView
     {
         public PDFViewControl PdfViewControl = new PDFViewControl();
         public CPDFAnnotationControl PDFAnnotationControl = new CPDFAnnotationControl();
+        private SignatureStatusBarControl signatureStatusBarControl;
         private CPDFDisplaySettingsControl displaySettingsControl = null;
         private PanelState panelState = PanelState.GetInstance();
         private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
@@ -143,6 +144,20 @@ namespace Compdfkit_Tools.PDFView
             this.displaySettingsControl = displaySettingsControl;
         }
         
+        public void SetSignatureStatusBarControl(SignatureStatusBarControl signatureStatusBarControl)
+        {
+            this.signatureStatusBarControl = signatureStatusBarControl;
+            SignatureStatusBorder.Child = this.signatureStatusBarControl;
+            if (signatureStatusBarControl.Status != SignatureStatus.None)
+            {
+                SignatureStatusBorder.Visibility = Visibility.Visible;
+            }
+            else
+            {
+                SignatureStatusBorder.Visibility = Visibility.Collapsed;
+            }
+        }
+
         #endregion
         
         public void ClearViewerControl()
@@ -150,6 +165,7 @@ namespace Compdfkit_Tools.PDFView
             PDFGrid.Child = null;
             BotaContainer.Child = null;
             PropertyContainer.Child= null;
+            SignatureStatusBorder.Child = null;
         }
         
         #region PropertyChanged

+ 25 - 1
Demo/Examples/DigitalSignature/MainWindow.xaml.cs

@@ -38,6 +38,7 @@ namespace DigitalSignature
         private DigitalSignatureControl digitalSignatureControl = new DigitalSignatureControl();
         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 PanelState panelState = PanelState.GetInstance();
 
@@ -157,6 +158,12 @@ namespace DigitalSignature
             regularViewerControl.SetBOTAContainer(botaBarControl);
             regularViewerControl.SetDisplaySettingsControl(displaySettingsControl);
             PDFGrid.Child = regularViewerControl;
+            
+            signatureStatusBarControl.SetStatus(pdfViewer.PDFView.Document.GetSignatureList());
+            regularViewerControl.SetSignatureStatusBarControl(signatureStatusBarControl);
+
+            signatureStatusBarControl.OnViewSignatureButtonClicked -= ViewAllSignatures;
+            signatureStatusBarControl.OnViewSignatureButtonClicked += ViewAllSignatures;
         }
 
         private void LoadDocument()
@@ -184,6 +191,7 @@ namespace DigitalSignature
             ModeComboBox.SelectedIndex = 0;
             botaBarControl.InitWithPDFViewer(pdfViewer.PDFView);
             botaBarControl.SelectBotaTool(BOTATools.Thumbnail);
+            displaySettingsControl.InitWithPDFViewer(pdfViewer.PDFView);
             LoadCustomControl();
             pdfViewer.PDFView.ChangeFitMode(FitMode.FitWidth);
             CPDFSaclingControl.InitWithPDFViewer(pdfViewer.PDFView);
@@ -264,6 +272,7 @@ namespace DigitalSignature
             else if (currentMode == "Digital Signature")
             {
                 digitalSignatureControl.ClearViewerControl();
+                digitalSignatureControl.IsActive = false;
             }
 
             if (item.Content as string == "Viewer")
@@ -277,24 +286,37 @@ namespace DigitalSignature
                     regularViewerControl.InitWithPDFViewer(pdfViewer.PDFView);
                     regularViewerControl.SetBOTAContainer(botaBarControl);
                     regularViewerControl.SetDisplaySettingsControl(displaySettingsControl);
+                    regularViewerControl.SetSignatureStatusBarControl(signatureStatusBarControl);
                 }
             }
             else if (item.Content as string == "Digital Signature")
             {
+                digitalSignatureControl.IsActive = true;
                 if (digitalSignatureControl.PDFViewControl != null && digitalSignatureControl.PDFViewControl.PDFView != null)
                 {
                     PDFGrid.Child = digitalSignatureControl;
                     digitalSignatureControl.PDFViewControl.PDFView.SetMouseMode(MouseModes.Viewer);
                     digitalSignatureControl.PDFViewControl = pdfViewer;
                     digitalSignatureControl.InitWithPDFViewer(pdfViewer.PDFView);
+                    digitalSignatureControl.SetBOTAContainer(botaBarControl);
+                    digitalSignatureControl.SetDisplaySettingsControl(displaySettingsControl);
+                    digitalSignatureControl.SetSignatureStatusBarControl(signatureStatusBarControl);
                 }
             }
             currentMode = item.Content as string;
         }
+        
+        private void ViewAllSignatures(object sender, EventArgs e)
+        {
+            LeftToolPanelButton.IsChecked = true;
+            panelState.IsLeftPanelExpand = true;
+            botaBarControl.SelectBotaTool(BOTATools.Signature);
+        }
 
         private void ExpandSearchBtn_Click(object sender, RoutedEventArgs e)
         {
             LeftToolPanelButton.IsChecked = true;
+            panelState.IsLeftPanelExpand = true;
             botaBarControl.SelectBotaTool(BOTATools.Search);
         }
 
@@ -307,7 +329,9 @@ namespace DigitalSignature
 
         private void ViewSettingBtn_Click(object sender, RoutedEventArgs e)
         {
-
+            panelState.RightPanel =
+                ((sender as ToggleButton).IsChecked == true) ?
+                    PanelState.RightPanelState.ViewSettings : PanelState.RightPanelState.None;
         }
 
         private void PageInfoBtn_Click(object sender, RoutedEventArgs e)