Browse Source

PDFView(Windows) - 补充密码框高保真

liyuxuan 1 year ago
parent
commit
278b515d7e

compdfkit_demo_windows/compdfkit/compdfkit-assets/resourse/ComPDFKit_Logo.png → compdfkit_demo_windows/compdfkit/compdfkit-assets/Resource/ComPDFKit_Logo.png


BIN
compdfkit_demo_windows/compdfkit/compdfkit-assets/Resource/warn.png


+ 4 - 1
compdfkit_demo_windows/compdfkit/compdfkit-assets/compdfkit-assets.csproj

@@ -107,9 +107,12 @@
     </None>
   </ItemGroup>
   <ItemGroup>
-    <Resource Include="Resourse\ComPDFKit_Logo.png">
+    <Resource Include="Resource\ComPDFKit_Logo.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
   </ItemGroup>
+  <ItemGroup>
+    <Resource Include="Resource\warn.png" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>

BIN
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/ComPDFKit.Desk.dll


BIN
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/ComPDFKit.Viewer.dll


+ 41 - 23
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/MainWindow.xaml

@@ -31,10 +31,20 @@
                 </Grid.ColumnDefinitions>
 
                 <!--左侧工具栏-->
-                <StackPanel Orientation="Horizontal" Height="40" Margin="30,0,0,0">
+                <StackPanel Orientation="Horizontal" Height="40" Margin="20,0,0,0">
+
+                    <Button BorderThickness="0" VerticalContentAlignment="Center" Width="30" Height="30" Style="{StaticResource LightButtonStyle}" Background="Transparent" Click="OpenFile_Click">
+                        <Button.Content>
+                            <Path Fill="#43474D" >
+                                <Path.Data>
+                                    M15.5 4.70985L8 0.424133L0.5 4.70985V15.5H6.5V11.5H9.5V15.5H15.5V4.70985ZM8 1.57601L14.5 5.29101V14.5H10.5V10.5H5.5V14.5H1.5V5.29001L8 1.57601Z
+                                </Path.Data>
+                            </Path>
+                        </Button.Content>
+                    </Button>
 
                     <!--工具栏展开收缩-->
-                    <ToggleButton BorderThickness="0" Width="30" Height="30" Style="{StaticResource ToggleButtonStyle}" Background="Transparent" Click="ToolExpand_Click">
+                    <ToggleButton Margin="13,0,0,0" BorderThickness="0" Width="30" Height="30" Style="{StaticResource ToggleButtonStyle}" Background="Transparent" Click="ToolExpand_Click">
                         <ToggleButton.Content>
                             <Path Fill="#43474D" Width="30" Height="30">
                                 <Path.Data>
@@ -46,7 +56,7 @@
 
                     <Line Margin="13,0,13,0" Stroke="#E0E0E0" X1="0" Y1="5" X2="0" Y2="35"></Line>
 
-                    <ToggleButton BorderThickness="0" Width="30" Height="30" Style="{StaticResource ToggleButtonStyle}" Background="Transparent">
+                    <ToggleButton BorderThickness="0" Width="30" Height="30" Style="{StaticResource ToggleButtonStyle}" Background="Transparent" IsChecked="True" IsEnabled="False">
                         <ToggleButton.Content>
                             <Path Fill="#43474D">
                                 <Path.Data>
@@ -301,28 +311,36 @@
         </Grid>
 
         <Border Name="PopupBorder" Background="#A0000000" Visibility="Collapsed">
-            <Grid  Width="422" Height="680" HorizontalAlignment="Center" VerticalAlignment="Center" Background="White">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="*"></ColumnDefinition>
-                    <ColumnDefinition Width="*"></ColumnDefinition>
-                </Grid.ColumnDefinitions>
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="auto"></RowDefinition>
-                    <RowDefinition Height="*"></RowDefinition>
-                </Grid.RowDefinitions>
+            <Grid>
                 
-                <TextBlock Width="50" Height="20" FontSize="14" LineHeight="16" Margin="12,6,0,0" HorizontalAlignment="Left">FileInfo:</TextBlock>
-                <Button Grid.Column="1" Width="16" Height="16" HorizontalAlignment="Right" Margin="0,8,8,0" BorderThickness="0" Click="FileInfoCloseBtn_Click">
-                    <Button.Content>
-                        <Path Fill="Black">
-                            <Path.Data>
-                                M6.69495 6L11.5 1.19495L10.805 0.5L6 5.30505L1.19495 0.5L0.5 1.19495L5.30505 6L0.5 10.805L1.19495 11.5L6 6.69495L10.805 11.5L11.5 10.805L6.69495 6Z
-                            </Path.Data>
-                        </Path>
-                    </Button.Content>
-                </Button>
-                <cpdftools:CPDFInfoControl Grid.Row="1" Margin="25,10,25,0" Grid.ColumnSpan="2" Name="FileInfoControl"></cpdftools:CPDFInfoControl>
+                <!--文件信息-->
+                <Grid Name="FileInfoUI"  Width="422" Height="680" HorizontalAlignment="Center" VerticalAlignment="Center" Background="White" Visibility="Collapsed">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="*"></ColumnDefinition>
+                        <ColumnDefinition Width="*"></ColumnDefinition>
+                    </Grid.ColumnDefinitions>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="auto"></RowDefinition>
+                        <RowDefinition Height="*"></RowDefinition>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Width="50" Height="20" FontSize="14" LineHeight="16" Margin="12,6,0,0" HorizontalAlignment="Left">FileInfo:</TextBlock>
+                    <Button Grid.Column="1" Width="16" Height="16" HorizontalAlignment="Right" Margin="0,8,8,0" BorderThickness="0" Click="FileInfoCloseBtn_Click">
+                        <Button.Content>
+                            <Path Fill="Black">
+                                <Path.Data>
+                                    M6.69495 6L11.5 1.19495L10.805 0.5L6 5.30505L1.19495 0.5L0.5 1.19495L5.30505 6L0.5 10.805L1.19495 11.5L6 6.69495L10.805 11.5L11.5 10.805L6.69495 6Z
+                                </Path.Data>
+                            </Path>
+                        </Button.Content>
+                    </Button>
+                    <cpdftools:CPDFInfoControl Grid.Row="1" Margin="25,10,25,0" Grid.ColumnSpan="2" Name="FileInfoControl"></cpdftools:CPDFInfoControl>
+                </Grid>
+                
+                <!--密码验证-->
+                <local:PasswordDialog x:Name="PasswordUI" Visibility="Collapsed"></local:PasswordDialog>
             </Grid>
+
         </Border>
     </Grid>
 </Window>

+ 79 - 2
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/MainWindow.xaml.cs

@@ -1,6 +1,8 @@
-using compdfkit_tools.PDFControl;
+using compdfkit_tools.Helper;
+using compdfkit_tools.PDFControl;
 using compdfkit_tools.PDFControlUI;
 using ComPDFKitViewer.PdfViewer;
+using System;
 using System.Collections.Generic;
 using System.Windows;
 using System.Windows.Controls;
@@ -15,6 +17,7 @@ namespace viewer_ctrl_demo
     public partial class MainWindow : Window
     {
         private CPDFViewer pdfViewer;
+        private CPDFViewer passwordViewer;
         private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
         public MainWindow()
         {
@@ -45,6 +48,9 @@ namespace viewer_ctrl_demo
             pdfViewer.MouseWheelZoomHandler -= PdfViewer_MouseWheelZoomHandler;
             pdfViewer.MouseWheelZoomHandler += PdfViewer_MouseWheelZoomHandler;
             pdfViewer.InfoChanged += PdfViewer_InfoChanged;
+            PasswordUI.Closed += PasswordUI_Closed;
+            PasswordUI.Canceled += PasswordUI_Canceled;
+            PasswordUI.Confirmed += PasswordUI_Confirmed;
 
             UIElement currentBotaTool = GetBotaTool();
             if (currentBotaTool is CPDFSearchControl)
@@ -68,6 +74,39 @@ namespace viewer_ctrl_demo
             ZoomTextBox.Text = string.Format("{0}", (int)(pdfViewer.ZoomFactor * 100)) + "%";
         }
 
+        private void PasswordUI_Confirmed(object sender, string e)
+        {
+            if(passwordViewer!=null && passwordViewer.Document!=null)
+            {
+                passwordViewer.Document.UnlockWithPassword(e);
+                if (passwordViewer.Document.IsLocked == false)
+                {
+                    PasswordUI.SetShowError("", Visibility.Collapsed);
+                    PasswordUI.ClearPassword();
+                    PasswordUI.Visibility = Visibility.Collapsed;
+                    PopupBorder.Visibility = Visibility.Collapsed;
+                    pdfViewer = passwordViewer;
+                    LoadDocument();
+                }
+                else
+                {
+                    PasswordUI.SetShowError("error", Visibility.Visible);
+                }
+            }
+        }
+
+        private void PasswordUI_Canceled(object sender, EventArgs e)
+        {
+            PopupBorder.Visibility = Visibility.Collapsed;
+            PasswordUI.Visibility = Visibility.Collapsed;
+        }
+
+        private void PasswordUI_Closed(object sender, EventArgs e)
+        {
+            PopupBorder.Visibility = Visibility.Collapsed;
+            PasswordUI.Visibility = Visibility.Collapsed;
+        }
+
         private void PdfViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
         {
            if(e.Key== "PageNum")
@@ -382,14 +421,52 @@ namespace viewer_ctrl_demo
 
         private void PageInfoBtn_Click(object sender, RoutedEventArgs e)
         {
-            PopupBorder.Visibility= Visibility.Visible;
+            PasswordUI.Visibility=Visibility.Collapsed;
+            FileInfoUI.Visibility = Visibility.Visible;
             FileInfoControl.InitWithPDFViewer(pdfViewer);
+            PopupBorder.Visibility = Visibility.Visible;
         }
 
         private void FileInfoCloseBtn_Click(object sender, RoutedEventArgs e)
         {
             PopupBorder.Visibility = Visibility.Collapsed;
         }
+
+        private void OpenFile_Click(object sender, RoutedEventArgs e)
+        {
+            try
+            {
+                string filePath = CommonHelper.GetFilePathOrEmpty();
+                if (!string.IsNullOrEmpty(filePath) && pdfViewer != null)
+                {
+                    passwordViewer = new CPDFViewer();
+                    passwordViewer.InitDocument(filePath);
+                    if(passwordViewer.Document == null)
+                    {
+                        MessageBox.Show("Open File Failed");
+                        return;
+                    }
+
+                    if (passwordViewer.Document.IsLocked)
+                    {
+                        PasswordUI.SetShowText(System.IO.Path.GetFileName(filePath)+ " password encrypted.");
+                        PasswordUI.ClearPassword();
+                        PopupBorder.Visibility=Visibility.Visible;
+                        PasswordUI.Visibility=Visibility.Visible;
+                    }
+                    else
+                    {
+                        pdfViewer = passwordViewer;
+                        LoadDocument();
+                    }
+                }
+            }
+            catch(Exception ex)
+            {
+
+            }
+           
+        }
     }
 }
 

+ 61 - 0
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/PasswordDialog.xaml

@@ -0,0 +1,61 @@
+<UserControl x:Class="viewer_ctrl_demo.PasswordDialog"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:viewer_ctrl_demo"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800" BorderBrush="Black" BorderThickness="1">
+    
+    <Grid  Width="534" Height="206" HorizontalAlignment="Center" VerticalAlignment="Center" Background="White">
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"></ColumnDefinition>
+            <ColumnDefinition Width="*"></ColumnDefinition>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="auto"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+            <RowDefinition Height="auto"></RowDefinition>
+        </Grid.RowDefinitions>
+
+        <TextBlock Height="20" FontSize="14" LineHeight="16" Margin="12,6,0,0" HorizontalAlignment="Left">Please enter the password:</TextBlock>
+        
+        <Button Grid.Column="1" Width="16" Height="16" HorizontalAlignment="Right" Margin="0,8,8,0" BorderThickness="0" Click="PasswordDialogClose_Click">
+            <Button.Content>
+                <Path Fill="Black">
+                    <Path.Data>
+                        M6.69495 6L11.5 1.19495L10.805 0.5L6 5.30505L1.19495 0.5L0.5 1.19495L5.30505 6L0.5 10.805L1.19495 11.5L6 6.69495L10.805 11.5L11.5 10.805L6.69495 6Z
+                    </Path.Data>
+                </Path>
+            </Button.Content>
+        </Button>
+
+        <Grid Grid.Row="1" Margin="0,36,0,0" Grid.ColumnSpan="2">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="80"></ColumnDefinition>
+                <ColumnDefinition Width="*"></ColumnDefinition>
+            </Grid.ColumnDefinitions>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="auto"></RowDefinition>
+                <RowDefinition Height="auto"></RowDefinition>
+            </Grid.RowDefinitions>
+
+            <Image Width="32" Height="32" Source="pack://application:,,,/compdfkit-assets;component/Resource/warn.png"/>
+
+            <TextBlock FontSize="14" Foreground="#43474D" Grid.Column="1" Name="FileEncryptText" VerticalAlignment="Center"></TextBlock>
+
+            <StackPanel Orientation="Horizontal" Grid.Column="1" Grid.Row="1" Height="52" Margin="0,22,0,0" >
+                <TextBlock FontSize="14" Foreground="#43474D" Margin="0,-20,0,0"  VerticalAlignment="Center">Please enter the password:</TextBlock>
+                <StackPanel Margin="8,0,0,0">
+                    <PasswordBox Name="PasswordBoxText" Padding="5,0,0,0" Height="32" Width="185"  VerticalContentAlignment="Center" VerticalAlignment="Center"></PasswordBox>
+                    <TextBlock Name="ErrorTipsText" Foreground="Red" Margin="0,4,0,0" Visibility="Collapsed"></TextBlock>
+                </StackPanel>
+            </StackPanel>
+        </Grid>
+
+        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="2" Margin="0,0,24,12" Grid.ColumnSpan="2">
+            <Button Width="112" Height="32" Click="PasswordDialogConfirm_Click">OK</Button>
+            <Button Width="112" Height="32" Margin="8,0,0,0" Click="PasswordDialogCancel_Click">Cancel</Button>
+        </StackPanel>
+    </Grid>
+</UserControl>

+ 64 - 0
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/PasswordDialog.xaml.cs

@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace viewer_ctrl_demo
+{
+    /// <summary>
+    /// PasswordDialog.xaml 的交互逻辑
+    /// </summary>
+    public partial class PasswordDialog : UserControl
+    {
+        public event EventHandler Closed;
+
+        public event EventHandler Canceled;
+
+        public event EventHandler<string> Confirmed;
+        public PasswordDialog()
+        {
+            InitializeComponent();
+        }
+
+        public void SetShowText(string newText)
+        {
+            FileEncryptText.Text = newText;
+        }
+
+        private void PasswordDialogClose_Click(object sender, RoutedEventArgs e)
+        {
+            Closed?.Invoke(this, EventArgs.Empty);
+        }
+
+        private void PasswordDialogCancel_Click(object sender, RoutedEventArgs e)
+        {
+            Canceled?.Invoke(this, EventArgs.Empty);
+        }
+
+        private void PasswordDialogConfirm_Click(object sender, RoutedEventArgs e)
+        {
+            Confirmed?.Invoke(this, PasswordBoxText.Password);
+        }
+
+        public void SetShowError(string errorText,Visibility visible)
+        {
+            ErrorTipsText.Text = errorText;
+            ErrorTipsText.Visibility = visible;
+        }
+
+        public void ClearPassword()
+        {
+            PasswordBoxText.Password = string.Empty;
+        }
+    }
+}

+ 7 - 0
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/viewer-ctrl-demo.csproj

@@ -73,12 +73,19 @@
       <DependentUpon>MainWindow.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Page Include="PasswordDialog.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="PDFDisplaySettings\PDFDisplaySettings.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="PasswordDialog.xaml.cs">
+      <DependentUpon>PasswordDialog.xaml</DependentUpon>
+    </Compile>
     <Compile Include="PDFDisplaySettings\PDFDisplaySettings.xaml.cs">
       <DependentUpon>PDFDisplaySettings.xaml</DependentUpon>
     </Compile>

BIN
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/x64/ComPDFKit.dll


BIN
compdfkit_demo_windows/compdfkit/viewer-ctrl-demo/x86/ComPDFKit.dll