Browse Source

ComPDFKit.Demo(win) - 叠加对比控件UI与交互及功能实现

weixiangjie 6 ngày trước cách đây
mục cha
commit
435e00f1a2

+ 2 - 0
Demo/Examples/Compdfkit.Controls/Common/BaseControl/DropDownNumberBoxControl.xaml.cs

@@ -51,6 +51,7 @@ namespace ComPDFKit.Controls.Common
 
         public event EventHandler<string> InputEnterEvent;
         public event EventHandler<string> SetPresetEvent;
+        public event EventHandler<string> TextChangedEvent;
 
         public DropDownNumberBoxControl()
         {
@@ -125,6 +126,7 @@ namespace ComPDFKit.Controls.Common
                     TextBox.Text = Minimum.ToString();
                 }
             }
+            TextChangedEvent?.Invoke(this, TextBox.Text);
         }
 
         private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)

+ 82 - 0
Demo/Examples/Compdfkit.Controls/Comparison/CompareOverwriteResultControl.xaml

@@ -0,0 +1,82 @@
+<UserControl x:Class="ComPDFKit.Controls.Comparison.CompareOverwriteResultControl"
+    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:pdfControl="clr-namespace:ComPDFKit.Controls.PDFControl"
+    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="1200">
+    <Grid>
+        <Grid Background="White">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="auto"></RowDefinition>
+                <RowDefinition Height="*"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition />
+                    <ColumnDefinition Width="auto"/>
+                </Grid.ColumnDefinitions>
+                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="8,0,0,0">
+                    <StackPanel Orientation="Horizontal" Margin="8,1,0,1">
+                        <Rectangle Fill="Red" Margin="0,0,0,0" Name="OldDocumentRect" RadiusX="2" RadiusY="2" Width="16" Height="16" StrokeThickness="1" Stroke="#1A000000"></Rectangle>
+                        <TextBlock Name="OldDocumentText" Margin="8,0,0,0" VerticalAlignment="Center" MaxWidth="80" TextTrimming="CharacterEllipsis" ToolTip="{Binding ElementName=OldDocumentText,Path=Text}" Text="Old Document"></TextBlock>
+                    </StackPanel>
+                    <StackPanel Orientation="Horizontal" Margin="8,1,0,1" Background="White">
+                        <Rectangle Fill="#2D77FA" Margin="0,0,0,0" Name="NewDocumentRect" RadiusX="2" RadiusY="2" Width="16" Height="16" StrokeThickness="1" Stroke="#1A000000"></Rectangle>
+                        <TextBlock Name="NewDocumentText" Margin="8,0,0,0" VerticalAlignment="Center" MaxWidth="80" TextTrimming="CharacterEllipsis" ToolTip="{Binding ElementName=NewDocumentText,Path=Text}" Text="New Document"></TextBlock>
+                    </StackPanel>
+                </StackPanel>
+                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,12,5" Grid.Column="1" Background="#FCFDFF">
+                    <CheckBox Height="20" Margin="10,8" VerticalContentAlignment="Center" Content="Synchronized scrolling" FontSize="14" IsChecked="True" Visibility="Collapsed"/>
+                    <Button Background="#E1E1E1" BorderBrush="#B4B4B4" BorderThickness="1" Width="Auto" MinWidth="112" Height="32" FontSize="14" Click="Save_MouseLeftDown" Content="Save" Name="BtnSave">
+                    </Button>
+                    <Button Background="#E1E1E1" BorderBrush="#B4B4B4" BorderThickness="1" Width="Auto" MinWidth="112" Height="32" FontSize="14" Margin="10,0,0,0" Click="Close_MouseLeftDown" Content="Exit" Name="BntClose"/>
+                </StackPanel>
+            </Grid>
+            <Grid Grid.Row="1">
+                <pdfControl:PDFViewControl x:Name="OverwriteViewer"/>
+            </Grid>
+        </Grid>
+        <Grid Name="CoverGrid" Background="#20000000" Visibility="Collapsed">
+            <Border Name="SaveConfirmBorder" VerticalAlignment="Center" HorizontalAlignment="Center" CornerRadius="5" Width="320" Height="120" BorderThickness="0.5" BorderBrush="Black" Background="White">
+                <Border.Effect>
+                    <DropShadowEffect ShadowDepth="4" BlurRadius="10" Color="Black" Opacity="0.4"/>
+                </Border.Effect>
+                <Grid Margin="0,0,0,0" HorizontalAlignment="Center">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="auto"></RowDefinition>
+                        <RowDefinition Height="30"></RowDefinition>
+                        <RowDefinition Height="auto"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <TextBlock FontSize="14" FontWeight="Bold" Margin="0,16,0,0" Name="BeforeCloseText" HorizontalAlignment="Center" TextWrapping="WrapWithOverflow">Save file before</TextBlock>
+                    <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
+
+                        <Button Width="80" Padding="0,2,0,2" Background="#E1E1E1" BorderBrush="#FA477EDE" BorderThickness="1" Click="SaveBtn_Click" Name="BtnSave1">Save</Button>
+                        <Button Width="80" Padding="0,2,0,2" Margin="10,0,0,0" Click="CloseBtn_Click" Background="#E1E1E1" BorderBrush="#33000000" BorderThickness="1" Name="BtnCancle">Close</Button>
+                    </StackPanel>
+                </Grid>
+            </Border>
+        </Grid>
+        <Grid Name="CloseConfirmGrid" Background="#20000000" Visibility="Collapsed">
+            <Border VerticalAlignment="Center" HorizontalAlignment="Center" CornerRadius="5" Width="320" Height="168" BorderThickness="0.5" BorderBrush="Black" Background="#FCFDFF">
+                <Border.Effect>
+                    <DropShadowEffect ShadowDepth="4" BlurRadius="10" Color="Black" Opacity="0.4"/>
+                </Border.Effect>
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="auto"></RowDefinition>
+                        <RowDefinition Height="*"></RowDefinition>
+                        <RowDefinition Height="auto"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <TextBlock FontSize="14" FontWeight="Bold" Margin="24,16,24,0" HorizontalAlignment="Left" FontFamily="Segoe UI" TextWrapping="WrapWithOverflow">Attention</TextBlock>
+                    <TextBlock Grid.Row="1" FontSize="14" Margin="24,16,24,0" HorizontalAlignment="Left" FontFamily="Segoe UI" TextWrapping="WrapWithOverflow"
+                               Text="Please confirm that you have saved the comparison results file"></TextBlock>
+                    <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="24,24,24,20">
+                        <Button Width="130" Padding="0,2,0,2"  Background="#E1E1E1" BorderBrush="#33000000" BorderThickness="1" Click="CancelCloseBtn_Click" Name="BtnCancle1">Cancel</Button>
+                        <Button Width="130" Padding="0,2,0,2" Margin="10,0,0,0" Height="32" Click="ConfirmExitBtn_Click" Foreground="White" Background="#1460F3" BorderThickness="1" Name="BtnSave2">Confirm</Button>
+                    </StackPanel>
+                </Grid>
+            </Border>
+        </Grid>
+    </Grid>
+</UserControl>

+ 93 - 0
Demo/Examples/Compdfkit.Controls/Comparison/CompareOverwriteResultControl.xaml.cs

@@ -0,0 +1,93 @@
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Forms;
+using System.Windows.Media;
+using ComPDFKit.Controls.Common;
+using ComPDFKit.Controls.PDFControl;
+using ComPDFKit.Controls.Properties;
+using ComPDFKit.PDFDocument;
+using UserControl = System.Windows.Controls.UserControl;
+
+namespace ComPDFKit.Controls.Comparison
+{
+    public partial class CompareOverwriteResultControl : UserControl
+    {
+        private double[] zoomLevel = { 1.00f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
+        private CPDFDocument CompareDoc { get; set; }
+        public CPDFDocument LeftDoc { get; set; }
+        public CPDFDocument RightDoc { get; set; }
+        public event EventHandler ExitCompareEvent;
+        public PDFViewControl pdfViewerCtrl { get; set; }
+        private bool HasSaved { get; set; }
+        public CompareOverwriteResultControl()
+        {
+            InitializeComponent();
+        }
+        
+        private void CloseLeave()
+        {
+            if (pdfViewerCtrl != null)
+            {
+                ExitCompareEvent?.Invoke(null,null);
+            }
+        }
+        private void Close_MouseLeftDown(object sender, RoutedEventArgs e)
+        {
+            CloseConfirmGrid.Visibility = Visibility.Visible;
+        }
+        public void LoadComparePdf(CPDFDocument leftDoc)
+        {
+            CompareDoc = leftDoc;
+            OverwriteViewer.InitDocument(leftDoc);
+        }
+        private void SaveCompareData()
+        {
+            CoverGrid.Visibility = Visibility.Visible;
+            SaveConfirmBorder.Visibility = Visibility.Collapsed;
+            if (CompareDoc != null)
+            {
+                SaveFileDialog saveFileDialog = new SaveFileDialog();
+                saveFileDialog.Filter = "PDF Files(*.pdf)|*.pdf;";
+                saveFileDialog.FileName = /*App.MainPageLoader.GetString*/("EditPDF_ExportName");
+                if (saveFileDialog.ShowDialog() == DialogResult.OK)
+                {
+                    CompareDoc.WriteFlattenToFilePath(saveFileDialog.FileName);
+                    Process.Start(@"explorer.exe", "/select,\"" + saveFileDialog.FileName + "\"");
+                }
+                HasSaved = true;
+            }
+            CoverGrid.Visibility = Visibility.Collapsed;
+        }
+        private void Save_MouseLeftDown(object sender, RoutedEventArgs e)
+        {
+            SaveCompareData();
+            //CloseLeave();
+        }
+        private void SaveBtn_Click(object sender, RoutedEventArgs e)
+        {
+            SaveCompareData();
+            CloseLeave();
+        }
+        private void CloseBtn_Click(object sender, RoutedEventArgs e)
+        {
+            CloseLeave();
+        }
+        
+        private void ConfirmExitBtn_Click(object sender, RoutedEventArgs e)
+        {
+            CloseConfirmGrid.Visibility = Visibility.Collapsed;
+            CloseLeave();
+        }
+
+        private void CancelCloseBtn_Click(object sender, RoutedEventArgs e)
+        {
+            CloseConfirmGrid.Visibility = Visibility.Collapsed;
+        }
+        public void SetCompareColor(Brush Nbrush, Brush Obrush)
+        {
+            NewDocumentRect.Fill = Nbrush;
+            OldDocumentRect.Fill = Obrush;
+        }
+    }
+}

+ 18 - 3
Demo/Examples/Compdfkit.Controls/Comparison/ComparisonSettingDialog.xaml

@@ -198,10 +198,10 @@
                         <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                             <TextBlock Text="Opacity" FontWeight="DemiBold" FontSize="14" FontFamily="Segoe UI" Width="120" VerticalAlignment="Center"></TextBlock>
                             <TextBlock Text="Old File" FontSize="14" FontFamily="Segoe UI" VerticalAlignment="Center" Margin="20,0,8,0"></TextBlock>
-                            <common:DropDownNumberBoxControl HorizontalContentAlignment="Stretch" Width="154" Height="32" Unit="%" Minimum="1" Maxium="100" Text="50"/>
+                            <common:DropDownNumberBoxControl HorizontalContentAlignment="Stretch" Width="154" Height="32" Unit="%" Minimum="1" Maxium="100" Text="50" x:Name="OldOpacityControl" TextChangedEvent="OldOpacityControl_OnTextInput"/>
                             
                             <TextBlock Text="New File" FontSize="14" FontFamily="Segoe UI" VerticalAlignment="Center" Margin="20,0,8,0"></TextBlock>
-                            <common:DropDownNumberBoxControl HorizontalContentAlignment="Stretch" Width="154" Height="32" Unit="%" Minimum="1" Maxium="100" Text="50"/>
+                            <common:DropDownNumberBoxControl HorizontalContentAlignment="Stretch" Width="154" Height="32" Unit="%" Minimum="1" Maxium="100" Text="50" x:Name="NewOpacityControl" TextChangedEvent="NewOpacityControl_OnTextInput"/>
                         </StackPanel>
                         
                         <StackPanel Orientation="Horizontal" Margin="0,12,0,12" Height="32">
@@ -216,8 +216,23 @@
                         
                         <StackPanel Orientation="Horizontal">
                             <TextBlock Text="Blend Mode" FontWeight="DemiBold" FontSize="14" FontFamily="Segoe UI" Width="120" VerticalAlignment="Center"></TextBlock>
-                            <ComboBox Style="{StaticResource ComboBoxStyle1}" Width="168" Height="32" Margin="20,0,8,0">
+                            <ComboBox Style="{StaticResource ComboBoxStyle1}" Width="168" Height="32" Margin="20,0,8,0" SelectionChanged="Selector_OnSelectionChanged">
                                 <ComboBoxItem Content="Normal" IsSelected="True"></ComboBoxItem>
+                                <ComboBoxItem Content="Multiply"></ComboBoxItem>
+                                <ComboBoxItem Content="Screen"></ComboBoxItem>
+                                <ComboBoxItem Content="Overlay"></ComboBoxItem>
+                                <ComboBoxItem Content="Darken"></ComboBoxItem>
+                                <ComboBoxItem Content="Lighten"></ComboBoxItem>
+                                <ComboBoxItem Content="ColorDodge"></ComboBoxItem>
+                                <ComboBoxItem Content="ColorBurn"></ComboBoxItem>
+                                <ComboBoxItem Content="HardLight"></ComboBoxItem>
+                                <ComboBoxItem Content="SoftLight"></ComboBoxItem>
+                                <ComboBoxItem Content="Difference"></ComboBoxItem>
+                                <ComboBoxItem Content="Exclusion"></ComboBoxItem>
+                                <ComboBoxItem Content="Hue"></ComboBoxItem>
+                                <ComboBoxItem Content="Saturation"></ComboBoxItem>
+                                <ComboBoxItem Content="Color"></ComboBoxItem>
+                                <ComboBoxItem Content="Luminosity"></ComboBoxItem>
                             </ComboBox>
                         </StackPanel>
                     </StackPanel>

+ 63 - 32
Demo/Examples/Compdfkit.Controls/Comparison/ComparisonSettingDialog.xaml.cs

@@ -23,6 +23,7 @@ using ComPDFKit.Controls.PDFControl;
 using ComPDFKit.Controls.Properties;
 using Color = System.Windows.Media.Color;
 using ColorConverter = System.Windows.Media.ColorConverter;
+using ComboBox = System.Windows.Forms.ComboBox;
 using Image = System.Windows.Controls.Image;
 
 namespace ComPDFKit.Controls.Comparison
@@ -71,19 +72,19 @@ namespace ComPDFKit.Controls.Comparison
         {
             CPDFBlendMode.CPDFBlendModeNormal,
             CPDFBlendMode.CPDFBlendModeMultiply,
-            //CPDFBlendMode.CPDFBlendModeScreen,
-            //CPDFBlendMode.CPDFBlendModeOverlay,
+            CPDFBlendMode.CPDFBlendModeScreen,
+            CPDFBlendMode.CPDFBlendModeOverlay,
             CPDFBlendMode.CPDFBlendModeDarken,
-            //CPDFBlendMode.CPDFBlendModeLighten,
-            //CPDFBlendMode.CPDFBlendModeColorDodge,
+            CPDFBlendMode.CPDFBlendModeLighten,
+            CPDFBlendMode.CPDFBlendModeColorDodge,
             CPDFBlendMode.CPDFBlendModeColorBurn,
             CPDFBlendMode.CPDFBlendModeHardLight,
-            //CPDFBlendMode.CPDFBlendModeSoftLight,
+            CPDFBlendMode.CPDFBlendModeSoftLight,
             CPDFBlendMode.CPDFBlendModeDifference,
             CPDFBlendMode.CPDFBlendModeExclusion,
-            //CPDFBlendMode.CPDFBlendModeHue,
-            //CPDFBlendMode.CPDFBlendModeSaturation,
-            //CPDFBlendMode.CPDFBlendModeColor,
+            CPDFBlendMode.CPDFBlendModeHue,
+            CPDFBlendMode.CPDFBlendModeSaturation,
+            CPDFBlendMode.CPDFBlendModeColor,
             CPDFBlendMode.CPDFBlendModeLuminosity
         };
         private bool IsFillWhite { get; set; } = false;
@@ -854,30 +855,32 @@ namespace ComPDFKit.Controls.Comparison
                             CPdfOverlay?.Compare();
                             CPDFDocument resultDoc = CPdfOverlay?.ComparisonDocument();
 
-                            // Dispatcher.Invoke(() =>
-                            // {
-                            //     if (viewCtrl != null && viewCtrl.ParentPage != null)
-                            //     {
-                            //         if (viewCtrl.ParentPage.loadingConceal.Visibility == Visibility.Collapsed)
-                            //         {
-                            //             return;
-                            //         }
-                            //         viewCtrl.ParentPage.loadingConcealBar.Value = 0.6;
-                            //         FileCompareGrid.Visibility = Visibility.Collapsed;
-                            //         CompareOverwriteResultControl resultPage = new CompareOverwriteResultControl();
-                            //         resultPage.SetCompareColor(new SolidColorBrush(NewMarkColor), new SolidColorBrush(OldMarkColor));
-                            //         resultPage.PDFViewControl = viewCtrl;
-                            //         resultPage.PDFViewControl.ParentPage.SetCompareModel(false);
-                            //         viewCtrl.ParentPage.loadingConcealClose.Visibility = Visibility.Visible;
-                            //         viewCtrl.ParentPage.loadingConceal.Visibility = Visibility.Collapsed;
-                            //         resultPage.LoadComparePdf(resultDoc);
-                            //         resultPage.LeftDoc = OldDocument;
-                            //         resultPage.RightDoc = NewDocument;
-                            //         viewCtrl.ParentPage.CompareResultGrid.Children.Clear();
-                            //         viewCtrl.ParentPage.CompareResultGrid.Visibility = Visibility.Visible;
-                            //         viewCtrl.ParentPage.CompareResultGrid.Children.Add(resultPage);
-                            //     }
-                            // });
+                            Dispatcher.Invoke(() =>
+                            {
+                                if (viewCtrl != null)
+                                {
+                                    // if (viewCtrl.ParentPage.loadingConceal.Visibility == Visibility.Collapsed)
+                                    // {
+                                    //     return;
+                                    // }
+                                    // viewCtrl.ParentPage.loadingConcealBar.Value = 0.6;
+                                    FileCompareGrid.Visibility = Visibility.Collapsed;
+                                    CompareOverwriteResultControl resultPage = new CompareOverwriteResultControl();
+                                    resultPage.SetCompareColor(new SolidColorBrush(NewMarkColor), new SolidColorBrush(OldMarkColor));
+                                    resultPage.pdfViewerCtrl = viewCtrl;
+                                    // resultPage.pdfViewerCtrl.ParentPage.SetCompareModel(false);
+                                    // viewCtrl.ParentPage.loadingConcealClose.Visibility = Visibility.Visible;
+                                    // viewCtrl.ParentPage.loadingConceal.Visibility = Visibility.Collapsed;
+                                    resultPage.LoadComparePdf(resultDoc);
+                                    resultPage.LeftDoc = OldDocument;
+                                    resultPage.RightDoc = NewDocument;
+                                    resultPage.ExitCompareEvent += (s, r) =>
+                                    {
+                                        OnCompareStatusChanged?.Invoke(this, null);
+                                    };
+                                    OnCompareStatusChanged?.Invoke(this, resultPage);
+                                }
+                            });
                         });
                     }
                 }
@@ -1506,5 +1509,33 @@ namespace ComPDFKit.Controls.Comparison
         {
             PageRangeBorder.Visibility = Visibility.Collapsed;
         }
+
+        private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if (sender is ComboBox cmb)
+            {
+                if(cmb.SelectedIndex < 0 || cmb.SelectedIndex > 16)
+                {
+                    return;
+                }
+                MixMode = (CPDFBlendMode)cmb.SelectedIndex;
+            }
+        }
+
+        private void OldOpacityControl_OnTextInput(object sender, string e)
+        {
+            if (float.TryParse(e, out float oldOpacity))
+            {
+                OldOpacity = oldOpacity / 100.0;
+            }
+        }
+
+        private void NewOpacityControl_OnTextInput(object sender, string e)
+        {
+            if (float.TryParse(e, out float newOpacity))
+            {
+                NewOpacity = newOpacity / 100.0;
+            }
+        }
     }
 }

+ 4 - 0
Demo/Examples/Compdfkit.Controls/Compdfkit.Controls.csproj

@@ -333,6 +333,9 @@
     <Compile Include="Comparison\CompareContentResultControl.xaml.cs">
       <DependentUpon>CompareContentResultControl.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Comparison\CompareOverwriteResultControl.xaml.cs">
+      <DependentUpon>CompareOverwriteResultControl.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Comparison\ComparisonControl.xaml.cs" />
     <Compile Include="Comparison\ComparisonSettingDialog.xaml.cs">
       <DependentUpon>ComparisonSettingDialog.xaml</DependentUpon>
@@ -1080,6 +1083,7 @@
       <Generator>MSBuild:Compile</Generator>
     </Page>
     <Page Include="Comparison\CompareContentResultControl.xaml" />
+    <Page Include="Comparison\CompareOverwriteResultControl.xaml" />
     <Page Include="Comparison\ComparisonControl.xaml" />
     <Page Include="Comparison\ComparisonSettingDialog.xaml" />
     <Page Include="Compress\CompressDialog.xaml">