Quellcode durchsuchen

compdfkit(win) - 设置签名

liuaoran vor 1 Jahr
Ursprung
Commit
2b23feaf04

BIN
Demo/Examples/Compdfkit_Tools/Asset/Resource/ComPDFKit_Logo.png


BIN
Demo/Examples/Compdfkit_Tools/Asset/Resource/Logo.png


+ 8 - 2
Demo/Examples/Compdfkit_Tools/Common/Helper/CommonHelper.cs

@@ -48,10 +48,16 @@ namespace Compdfkit_Tools.Helper
     }
 
     public static class CommonHelper
-    { 
+    {
+        public static int GetBitmapPointer(Bitmap bitmap)
+        {
+            IntPtr hBitmap = bitmap.GetHbitmap();
+            int bitmapPointer = hBitmap.ToInt32();
 
-        public static string EmailPattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
+            return bitmapPointer;
+        }
 
+        public static string EmailPattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
 
         public static bool IsValidEmail(string email)
         {

+ 1 - 3
Demo/Examples/Compdfkit_Tools/Compdfkit_Tools.csproj

@@ -458,10 +458,8 @@
     <Resource Include="Asset\Resource\Color_btn_ic.png" />
     <Resource Include="Asset\Resource\Transparent_btn_ic.png" />
     <Resource Include="Asset\Resource\warn.png" />
-    <Resource Include="Asset\Resource\ComPDFKit_Logo.png">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Resource>
     <Resource Include="ComPDFKit_Logo.ico" />
+    <Resource Include="Asset\Resource\Logo.png" />
     <Content Include="VirtualizingWrapPanel.dll">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>

+ 12 - 2
Demo/Examples/Compdfkit_Tools/DigitalSignature/AddCertificationControl/AddCertificationDialog.xaml.cs

@@ -23,6 +23,8 @@ namespace Compdfkit_Tools.PDFControl
         private AddCustomCertificationControl addCustomCertificationControl = null;
         private AddExistedCertificationControl addExistedCertificationControl = null;
         private SaveCerficateControl saveCerficateControl = null;
+        public event EventHandler<CertificateAccess> FillSignatureEvent;
+
 
         public AddCertificationDialog()
         {
@@ -47,7 +49,10 @@ namespace Compdfkit_Tools.PDFControl
                 this.Width = addExistedCertificationControl.Width + 20;
                  
                 addExistedCertificationControl.CancelEvent += CancelEvent;
-                
+                addExistedCertificationControl.FillSignatureEvent -= AddExistedCertificationControl_FillSignatureEvent;
+                addExistedCertificationControl.FillSignatureEvent += AddExistedCertificationControl_FillSignatureEvent;
+
+
             }
             else if(e == CreateCertificationMode.AddCustomCertification)
             {
@@ -71,7 +76,12 @@ namespace Compdfkit_Tools.PDFControl
                 this.Width = saveCerficateControl.Width + 20;
             }
         }
-        
+
+        private void AddExistedCertificationControl_FillSignatureEvent(object sender, CertificateAccess e)
+        {
+            Close();
+            FillSignatureEvent?.Invoke(sender, e);
+        }
 
         private void CancelEvent(object sender, EventArgs e)
         {

+ 7 - 6
Demo/Examples/Compdfkit_Tools/DigitalSignature/AddCertificationControl/AddExistedCertificationControl.xaml.cs

@@ -1,6 +1,7 @@
 using ComPDFKit.DigitalSign;
 using Compdfkit_Tools.Helper;
 using System;
+using System.Windows;
 using System.Windows.Controls;
 
 namespace Compdfkit_Tools.PDFControl
@@ -9,6 +10,7 @@ namespace Compdfkit_Tools.PDFControl
     {
         public event EventHandler SaveEvent;
         public event EventHandler CancelEvent;
+        public event EventHandler<CertificateAccess> FillSignatureEvent;
         public AddExistedCertificationControl()
         {
             InitializeComponent();
@@ -29,16 +31,15 @@ namespace Compdfkit_Tools.PDFControl
             {
                 return;
             }
-            else if(!CPDFPKCS12CertHelper.CheckPKCS12Password(FileNameTxt.Text, PasswordBoxTxt.Password))
+            else if (!CPDFPKCS12CertHelper.CheckPKCS12Password(FileNameTxt.Text, PasswordBoxTxt.Password))
             {
-                return; 
+                return;
             }
             else
             {
-                FillDigitalSignatureDialog fillDigitalSignatureDialog = new FillDigitalSignatureDialog();
-                fillDigitalSignatureDialog.FilePath = FileNameTxt.Text;
-                fillDigitalSignatureDialog.ShowDialog();
-            } 
+                FillSignatureEvent?.Invoke(sender, new CertificateAccess { filePath = FileNameTxt.Text, password = PasswordBoxTxt.Password });
+                
+            }
         }
 
         private void SelectFileBtn_Click(object sender, System.Windows.RoutedEventArgs e)

+ 22 - 5
Demo/Examples/Compdfkit_Tools/DigitalSignature/DigitalSignatureControl/DigitalSignatureControl.xaml.cs

@@ -1,4 +1,5 @@
-using Compdfkit_Tools.PDFControl;
+using ComPDFKit.PDFAnnotation.Form;
+using Compdfkit_Tools.PDFControl;
 using ComPDFKitViewer.AnnotEvent;
 using ComPDFKitViewer.PdfViewer;
 using System;
@@ -18,6 +19,7 @@ namespace Compdfkit_Tools.PDFControl
         public SignatureStatusBarControl SignatureStatusBarControl = new SignatureStatusBarControl();
         private bool _isActive = false;
         public event EventHandler<bool> OnCanSaveChanged;
+        private CPDFSignatureWidget currentSignatureWidget;
 
         public event PropertyChangedEventHandler PropertyChanged;
         protected void OnPropertyChanged([CallerMemberName] string name = null)
@@ -97,17 +99,32 @@ namespace Compdfkit_Tools.PDFControl
 
             PDFViewControl.PDFView.WidgetClickHandler -= PDFView_WidgetClickHandler;
             PDFViewControl.PDFView.WidgetClickHandler += PDFView_WidgetClickHandler;
-
         }
 
         private void PDFView_WidgetClickHandler(object sender, WidgetArgs e)
         {
             Window parentWindow = Window.GetWindow((DependencyObject)sender);
-            AddCertificationDialog addCertificationControl = new AddCertificationDialog();
-            addCertificationControl.Owner = parentWindow;
-            addCertificationControl.ShowDialog();
+            AddCertificationDialog addCertificationControl = new AddCertificationDialog
+            {
+                Owner = parentWindow
+            };
+            currentSignatureWidget = (e as WidgetSignArgs).Sign;
+            addCertificationControl.FillSignatureEvent -= AddCertificationControl_FillSignatureEvent;
+            addCertificationControl.FillSignatureEvent += AddCertificationControl_FillSignatureEvent;
+            addCertificationControl.ShowDialog(); 
         }
 
+        private void AddCertificationControl_FillSignatureEvent(object sender, CertificateAccess e)
+        {
+            FillDigitalSignatureDialog fillDigitalSignatureDialog = new FillDigitalSignatureDialog
+            {
+                FilePath = e.filePath,
+                Password = e.password,
+                SignatureWidget = currentSignatureWidget,
+                Document = PDFViewControl.PDFView.Document
+            };
+            fillDigitalSignatureDialog.ShowDialog();
+        }
 
         private void DigitalSignatureBarControl_DigitalSignatureActionChanged(object sender, Common.CPDFDigitalSignatureBarControl.DigitalSignatureAction e)
         {

+ 6 - 0
Demo/Examples/Compdfkit_Tools/DigitalSignature/DigitalSignatureData/DigitalSignatureData.cs

@@ -32,6 +32,12 @@ namespace Compdfkit_Tools.PDFControl
         public CPDFCertUsage PurposeType;
     }
     
+    public class CertificateAccess
+    {
+        public string filePath;
+        public string password; 
+    }
+
     internal class DigitalSignatureData
     {
           

+ 31 - 21
Demo/Examples/Compdfkit_Tools/DigitalSignature/FillDigitalSignatureControl/FillDigitalSignatureControl.xaml

@@ -72,8 +72,8 @@
 
             <StackPanel Grid.Row="2" Name="ImagePickPanel" HorizontalAlignment="Right" Orientation="Horizontal" Margin="0,6,30,0"
                         Visibility="Hidden">
-                <TextBlock Foreground="Blue">Browse</TextBlock>
-                <TextBlock Margin="10,0,0,0" Foreground="Blue">Clear</TextBlock>
+                <TextBlock x:Name="BrowseTxt" Foreground="Blue" MouseLeftButtonDown="BrowseTxt_MouseLeftButtonDown">Browse</TextBlock>
+                <TextBlock x:Name="ClearTxt" Margin="10,0,0,0" Foreground="Blue" MouseLeftButtonDown="ClearTxt_MouseLeftButtonDown">Clear</TextBlock>
             </StackPanel>
 
             <Grid Grid.Row="3" Margin="25,0,25,0">
@@ -109,7 +109,7 @@
                     <ColumnDefinition Width="auto"></ColumnDefinition>
                 </Grid.ColumnDefinitions>
                 
-                <Grid Width="320" HorizontalAlignment="Left">
+                <Grid HorizontalAlignment="Left">
                     <Grid.RowDefinitions>
                         <RowDefinition Height="32"></RowDefinition>
                         <RowDefinition Height="32"></RowDefinition>
@@ -118,26 +118,38 @@
                     </Grid.RowDefinitions>
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="auto"></ColumnDefinition>
-                        <ColumnDefinition Width="*"></ColumnDefinition>
+                        <ColumnDefinition Width="50"></ColumnDefinition>
+                        <ColumnDefinition Width="auto"></ColumnDefinition>
                         <ColumnDefinition Width="auto"></ColumnDefinition>
                     </Grid.ColumnDefinitions>
 
-                    <CheckBox FontSize="14">Name</CheckBox>
-                    <CheckBox FontSize="14" Grid.Row="1">Date</CheckBox>
-                    <CheckBox FontSize="14" Grid.Row="2">Logo</CheckBox>
-                    <CheckBox FontSize="14" Grid.Row="3" Click="ReasonCheckBox_Click">Reason</CheckBox>
-
-                    <CheckBox FontSize="14" Grid.Column="2">Distinguishable name</CheckBox>
-                    <CheckBox FontSize="14" Grid.Column="2" Grid.Row="1">ComPDFKit Versions</CheckBox>
-                    <CheckBox FontSize="14" Grid.Column="2" Grid.Row="2">Position</CheckBox>
-                    <CheckBox FontSize="14" Grid.Column="2" Grid.Row="3">Tab</CheckBox>
-
+                    <CheckBox x:Name="NameChk" FontSize="14" Click="NameChk_Click">Name</CheckBox>
+                    <CheckBox x:Name="DateChk" FontSize="14" Grid.Row="1" Click="DateChk_Click">Date</CheckBox>
+                    <CheckBox x:Name="LogoChk" FontSize="14" Grid.Row="2" Click="LogoChk_Click">Logo</CheckBox>
+                    <CheckBox x:Name="ReasonChk" FontSize="14" Grid.Row="3" Click="ReasonChk_Click">Reason</CheckBox>
+
+                    <CheckBox x:Name="DistinguishableNameChk" FontSize="14" Grid.Column="2" Click="DistinguishableNameChk_Click">Distinguishable name</CheckBox>
+                    <CheckBox x:Name="ComPDFKitVersionChk" FontSize="14" Grid.Column="2" Grid.Row="1" Click="ComPDFKitVersionChk_Click">ComPDFKit Versions</CheckBox>
+                    <CheckBox x:Name="PositionChk" FontSize="14" Grid.Column="2" Grid.Row="2" Click="PositionChk_Click">Position</CheckBox>
+                    <CheckBox x:Name="TabChk" FontSize="14" Grid.Column="2" Grid.Row="3" Click="TabChk_Click">Tab</CheckBox>
+
+                    <StackPanel x:Name="Reasonstp" Visibility="Collapsed" Orientation="Horizontal" Grid.Column="4" Margin="50,0,0,0" Grid.RowSpan="2" Height="30" Width="280">
+                        <TextBlock Text="Reason: " VerticalAlignment="Center"></TextBlock>
+                        <ComboBox x:Name="ReasonCmb"  SelectionChanged="ReasonCmb_SelectionChanged" VerticalContentAlignment="Center">
+                            <ComboBoxItem Content="I am the owner of the document." IsSelected="True"></ComboBoxItem>
+                            <ComboBoxItem Content="I am approving the document."></ComboBoxItem>
+                            <ComboBoxItem Content="I have reviewed this document"></ComboBoxItem>
+                        </ComboBox>
+                    </StackPanel>
+                    <StackPanel x:Name="PositionStp" Visibility="Collapsed" Orientation="Horizontal" Grid.Column="4" Grid.Row="1" Margin="50,10,0,0"  Grid.RowSpan="2" Height="30" Width="280">
+                        <TextBlock Text="Position: " VerticalAlignment="Center"></TextBlock>
+                        <TextBox Width="180" x:Name="PositionTbx" TextChanged="PositionTbx_TextChanged"></TextBox>
+                    </StackPanel>
                 </Grid>
 
                 <StackPanel Name="ReasonPanel" Grid.Column="1" Orientation="Horizontal" Margin="15,10,0,0" VerticalAlignment="Top"
                             Visibility="Collapsed">
-                    <TextBlock VerticalAlignment="Center" Margin="0,0,5,0">Reason</TextBlock>
-                    <ComboBox Style="{StaticResource ComboBoxStyle1}" Width="197" Height="32"></ComboBox>
+                    <TextBlock VerticalAlignment="Center" Margin="0,0,5,0">Reason</TextBlock> 
                 </StackPanel>
 
             </Grid>
@@ -154,12 +166,10 @@
                 <TextBlock Foreground="#43474D" FontSize="14" VerticalAlignment="Center">Present name</TextBlock>
                 <TextBox Grid.Column="1" Width="250" Height="30" Margin="10,0,0,0" VerticalContentAlignment="Center"></TextBox>
 
-                <Button Grid.Column="3" Height="32" Width="82" Style="{StaticResource LightButtonStyle}"
-                        Background="#DFE9FF" BorderThickness="0">Cancel</Button>
-                <Button Grid.Column="4" Margin="10,0,25,0" Height="32" Width="97" Style="{StaticResource ButtonStyle}">Continue</Button>
-
+                <Button x:Name="CancelBtn" Grid.Column="3" Height="32" Width="82" Style="{StaticResource LightButtonStyle}"
+                        Background="#DFE9FF" BorderThickness="0" Click="CancelBtn_Click">Cancel</Button>
+                <Button x:Name="ContinueBtn" Grid.Column="4" Margin="10,0,25,0" Height="32" Width="97" Style="{StaticResource ButtonStyle}" Click="ContinueBtn_Click">Continue</Button>
             </Grid>
-            
         </Grid>
 
         <Border Name="CanvaDrawPopup" Background="#A0000000" Visibility="Collapsed">

+ 274 - 16
Demo/Examples/Compdfkit_Tools/DigitalSignature/FillDigitalSignatureControl/FillDigitalSignatureControl.xaml.cs

@@ -1,8 +1,10 @@
-using ComPDFKit.Import;
+using ComPDFKit.DigitalSign;
+using ComPDFKit.Import;
 using ComPDFKit.PDFAnnotation;
 using ComPDFKit.PDFAnnotation.Form;
 using ComPDFKit.PDFDocument;
 using ComPDFKit.PDFPage;
+using Compdfkit_Tools.Helper;
 using System;
 using System.Collections.Generic;
 using System.Drawing;
@@ -25,11 +27,19 @@ namespace Compdfkit_Tools.PDFControl
     /// CPDFSignControl.xaml 的交互逻辑
     /// </summary>
     public partial class FillDigitalSignatureControl : UserControl
-    {
+    { 
         private Dictionary<string, Border> TabDict { get; set; }
 
         private SignatureConfig tempSignatureConfig = new SignatureConfig();
 
+        private CPDFSignatureCertificate signatureCertificate;
+
+        public CPDFDocument Document;
+
+        private string location = string.Empty;
+
+        private string reason = string.Empty;
+
         private string _filePath = string.Empty;
         public string FilePath
         {
@@ -40,6 +50,23 @@ namespace Compdfkit_Tools.PDFControl
             }
         }
 
+        private string _password = string.Empty;
+        public string Password
+        {
+            get => _password;
+            set
+            {
+                _password = value;
+                signatureCertificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path(FilePath, Password);
+            }
+        }
+
+        public CPDFSignatureWidget signatureWidget { get; set; }
+
+        private readonly string logoPath = "Logo.png";
+        private string imagePath = string.Empty;
+        private string Text = string.Empty;
+
         public FillDigitalSignatureControl()
         {
             InitializeComponent();
@@ -51,7 +78,6 @@ namespace Compdfkit_Tools.PDFControl
                 ["None"] = NoneBorder
             };
             SetCheckedTab("Keyboard");
-
             CreateTempSignature();
         }
 
@@ -61,28 +87,27 @@ namespace Compdfkit_Tools.PDFControl
             tempDocument.InsertPage(0, 200, 200, string.Empty);
             CPDFPage page = tempDocument.PageAtIndex(0);
             CPDFSignatureWidget signatureWidget = page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS) as CPDFSignatureWidget;
-            signatureWidget.SetRect(new CRect(0, 100, 200, 0));
-            tempSignatureConfig.IsDrawLogo = true;
-            tempSignatureConfig.LogoBitmap = new Bitmap("C:\\Users\\dkan\\Pictures\\Screenshots\\hao.jpg");
+            signatureWidget.SetRect(new CRect(0, 100, 300, 0));
+            tempSignatureConfig.IsDrawLogo = (bool)LogoChk.IsChecked;
+            tempSignatureConfig.LogoBitmap = new Bitmap(logoPath);
+            tempSignatureConfig.Content = Text;
 
             signatureWidget.UpdataApWithSignature(tempSignatureConfig);
 
-            //signatureWidget.UpdateApWithImage("C:\\Users\\dkan\\Pictures\\Screenshots\\hao.jpg", "", 0);
             byte[] signatureBitmapBytes = GetTempSignatureImage(signatureWidget, out int width, out int height);
-            tempDocument.WriteToFilePath("E:\\testfile1.pdf");
 
             signatureWidget.ReleaseAnnot();
-             
+
             if (signatureBitmapBytes.Length > 0)
             {
                 PixelFormat fmt = PixelFormats.Bgra32;
                 BitmapSource bps = BitmapSource.Create(width, height, 96, 96, fmt, null, signatureBitmapBytes, (width * fmt.BitsPerPixel + 7) / 8);
-                imageControl.Source = bps; 
+                imageControl.Source = bps;
             }
             else
             {
                 imageControl.Source = null;
-            } 
+            }
         }
 
         public static byte[] GetTempSignatureImage(CPDFSignatureWidget signatureWidget, out int width, out int height)
@@ -112,12 +137,16 @@ namespace Compdfkit_Tools.PDFControl
             checkBtn.IsChecked = true;
             if (checkBtn != TextAlignLeftBtn)
             {
+                tempSignatureConfig.IsContentAlginLeft = true;
                 TextAlignLeftBtn.IsChecked = false;
             }
             if (checkBtn != TextAlignRightBtn)
             {
+                tempSignatureConfig.IsContentAlginLeft = false;
                 TextAlignRightBtn.IsChecked = false;
             }
+            CreateTempSignature();
+
         }
 
         private void Border_MouseDown(object sender, MouseButtonEventArgs e)
@@ -129,15 +158,35 @@ namespace Compdfkit_Tools.PDFControl
             }
             SetCheckedTab(clickBorder.Tag.ToString());
             ImagePickPanel.Visibility = Visibility.Hidden;
-            if (clickBorder == TrackpadBorder)
+
+            if (clickBorder == NoneBorder)
             {
-                CanvaDrawPopup.Visibility = Visibility.Visible;
+                tempSignatureConfig.IsDrawOnlyContent = true;
             }
-
-            if (clickBorder == ImageBorder)
+            else
             {
-                ImagePickPanel.Visibility = Visibility.Visible;
+                if (clickBorder == KeyboardBorder)
+                {
+                    tempSignatureConfig.ImageBitmap = null;
+                }
+                else
+                {
+                    if (clickBorder == TrackpadBorder)
+                    {
+                        CanvaDrawPopup.Visibility = Visibility.Visible;
+                    }
+                    else if (clickBorder == ImageBorder)
+                    {
+                        if (!string.IsNullOrEmpty(imagePath))
+                        {
+                            tempSignatureConfig.ImageBitmap = new Bitmap(imagePath);
+                        }
+                        tempSignatureConfig.Content = string.Empty;
+                    }
+                }
+
             }
+            CreateTempSignature();
         }
 
         private void SetCheckedTab(string tab)
@@ -214,6 +263,81 @@ namespace Compdfkit_Tools.PDFControl
             }
         }
 
+        private void SetProperty()
+        {
+            Text = string.Empty;
+            if ((bool)NameChk.IsChecked)
+            {
+                if ((bool)TabChk.IsChecked)
+                {
+                    Text += "Name: ";
+                }
+                Text += DictionaryValueConverter.GetGrantorFormDictionary(signatureCertificate.SubjectDict) + "\n";
+            }
+
+            if ((bool)DateChk.IsChecked)
+            {
+                if ((bool)TabChk.IsChecked)
+                {
+                    Text += "Date: ";
+                }
+                DateTime currentDateTime = DateTime.Now;
+
+                string customFormat = "yyyy.MM.dd HH:mm:ss";
+
+                string formattedDateTime = currentDateTime.ToString(customFormat);
+                Text += formattedDateTime + "\n";
+            }
+
+            if ((bool)LogoChk.IsChecked)
+            {
+                tempSignatureConfig.IsDrawLogo = true;
+            }
+            else
+            {
+                tempSignatureConfig.IsDrawLogo = false;
+            }
+
+            if ((bool)ReasonChk.IsChecked)
+            {
+                if ((bool)TabChk.IsChecked)
+                {
+                    Text += "Reason: ";
+                }
+                Text += (ReasonCmb.SelectedItem as ComboBoxItem).Content.ToString() + "\n";
+            }
+
+            if ((bool)DistinguishableNameChk.IsChecked)
+            {
+                if ((bool)TabChk.IsChecked)
+                {
+                    Text += "DN: ";
+                }
+                Text += DictionaryValueConverter.GetDNFromDictionary(signatureCertificate.SubjectDict) + "\n";
+            }
+
+            if ((bool)ComPDFKitVersionChk.IsChecked)
+            {
+                Assembly assembly = Assembly.GetExecutingAssembly();
+                Version version = assembly.GetName().Version;
+                if ((bool)TabChk.IsChecked)
+                {
+                    Text += "ComPDFKit Version: ";
+                }
+                Text += version.Major.ToString() + "." + version.Minor.ToString() + "." + version.Build.ToString() + "." + version.Revision.ToString() + "\n";
+
+            }
+
+            if ((bool)PositionChk.IsChecked)
+            {
+                if ((bool)TabChk.IsChecked)
+                {
+                    Text += "Location: ";
+                }
+                Text += PositionTbx.Text + "\n";
+            }
+        }
+
         private void ReasonCheckBox_Click(object sender, RoutedEventArgs e)
         {
             CheckBox checkItem = sender as CheckBox;
@@ -224,5 +348,139 @@ namespace Compdfkit_Tools.PDFControl
 
             ReasonPanel.Visibility = checkItem.IsChecked == true ? Visibility.Visible : Visibility.Collapsed;
         }
+
+        private void BrowseTxt_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+        {
+            string pngPath = CommonHelper.GetExistedPathOrEmpty("PNG files (*.png)|*.png");
+            if (pngPath != string.Empty)
+            {
+                imagePath = CommonHelper.GetExistedPathOrEmpty(pngPath);
+            }
+            else
+            {
+
+            }
+        }
+
+        private void ClearTxt_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+        {
+
+        }
+
+        private void NameChk_Click(object sender, RoutedEventArgs e)
+        {
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void DateChk_Click(object sender, RoutedEventArgs e)
+        {
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void LogoChk_Click(object sender, RoutedEventArgs e)
+        {
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void ReasonChk_Click(object sender, RoutedEventArgs e)
+        {
+            if (!(bool)ReasonChk.IsChecked)
+            {
+                Reasonstp.Visibility = Visibility.Collapsed;
+            }
+            else
+            {
+                Reasonstp.Visibility = Visibility.Visible;
+            }
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void DistinguishableNameChk_Click(object sender, RoutedEventArgs e)
+        {
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void PositionChk_Click(object sender, RoutedEventArgs e)
+        {
+            if (!(bool)PositionChk.IsChecked)
+            {
+                PositionStp.Visibility = Visibility.Collapsed;
+            }
+            else
+            {
+                PositionStp.Visibility = Visibility.Visible;
+            }
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void TabChk_Click(object sender, RoutedEventArgs e)
+        {
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void ReasonCmb_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void ComPDFKitVersionChk_Click(object sender, RoutedEventArgs e)
+        {
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void PositionTbx_TextChanged(object sender, TextChangedEventArgs e)
+        {
+            if (!(bool)PositionChk.IsChecked)
+            {
+                PositionStp.Visibility = Visibility.Collapsed;
+            }
+            else
+            {
+                PositionStp.Visibility = Visibility.Visible;
+            }
+            SetProperty();
+            CreateTempSignature();
+        }
+
+        private void ContinueBtn_Click(object sender, RoutedEventArgs e)
+        {
+            string filePath = CommonHelper.GetGeneratePathOrEmpty("PDF files (*.pdf)|*.pdf");
+            if (!string.IsNullOrEmpty(filePath))
+            {
+                if ((bool)ReasonChk.IsChecked)
+                {
+                    reason = PositionTbx.Text;
+                }
+                else
+                {
+                    reason = string.Empty;
+                }
+
+                if ((bool)PositionChk.IsChecked)
+                {
+                    location = (ReasonCmb?.SelectedItem as ComboBoxItem)?.Content?.ToString();
+                }
+                else
+                {
+                    location = string.Empty;
+                }
+
+                Document.WriteSignatureToFilePath(signatureWidget, filePath, FilePath, Password, location, reason , false);
+            }
+        }
+
+        private void CancelBtn_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
     }
 }

+ 36 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/FillDigitalSignatureControl/FillDigitalSignatureDialog.xaml.cs

@@ -1,4 +1,6 @@
-using System;
+using ComPDFKit.PDFAnnotation.Form;
+using ComPDFKit.PDFDocument;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -30,6 +32,39 @@ namespace Compdfkit_Tools.PDFControl
             }
         }
 
+        private string _password = string.Empty;
+        public string Password
+        {
+            get => _password;
+            set
+            {
+                _password = value;
+                FillDigitalSignatureControl.Password = value;
+            }
+        }
+
+        private CPDFSignatureWidget _signatureWidget;
+        public CPDFSignatureWidget SignatureWidget
+        {
+            get => this._signatureWidget;
+            set
+            {
+                this._signatureWidget = value;
+                FillDigitalSignatureControl.signatureWidget = value;
+            }
+        }
+
+        private CPDFDocument _document;
+        public CPDFDocument Document
+        {
+            get => _document;
+            set
+            {
+                _document = value;
+                FillDigitalSignatureControl.Document = value;
+            }
+        }
+
         public FillDigitalSignatureDialog()
         {
             InitializeComponent();

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

@@ -74,7 +74,48 @@ namespace Compdfkit_Tools.PDFControl
             }
             return grantor;
         }
-        
+
+        public static string GetDNFromDictionary(Dictionary<string, string> dictionary)
+        {
+            List<string> dnParts = new List<string>();
+
+            if (dictionary.TryGetValue("CN", out string cn))
+            {
+                if (!string.IsNullOrEmpty(cn))
+                {
+                    dnParts.Add("CN=" + cn);
+                }
+            }
+
+            if (dictionary.TryGetValue("O", out string o))
+            {
+                if (!string.IsNullOrEmpty(o))
+                {
+                    dnParts.Add("O=" + o);
+                }
+            }
+
+            if (dictionary.TryGetValue("OU", out string ou))
+            {
+                dnParts.Add("OU=" + ou);
+            }
+
+            if (dictionary.TryGetValue("C", out string c))
+            {
+                dnParts.Add("C=" + c);
+            }
+
+            if (dictionary.TryGetValue("ST", out string st))
+            {
+                dnParts.Add("ST=" + st);
+            }
+             
+            string DN = string.Join(", ", dnParts);
+
+            return DN;
+        }
+
+
         public static string GetEmailFormDictionary(Dictionary<string, string> dictionary)
         {
             string email = string.Empty;

BIN
Demo/Examples/DigitalSignature/ComPDFKit.png


+ 9 - 0
Demo/Examples/DigitalSignature/DigitalSignature.csproj

@@ -88,6 +88,15 @@
       <DependentUpon>Settings.settings</DependentUpon>
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
     </Compile>
+    <None Include="ComPDFKit.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="hao2.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="Logo.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>

BIN
Demo/Examples/DigitalSignature/Logo.png


BIN
Demo/Examples/DigitalSignature/hao2.png