Browse Source

compdfkit(win) - 替换功能

weixiangjie 1 year ago
parent
commit
7413940b1b

+ 4 - 4
Demo/Examples/Compdfkit_Tools/PDFView/PDFSearch/PDFSearchControl/CPDFSearchControl.xaml

@@ -130,8 +130,8 @@
                     <Image Source="{StaticResource ImageDrawing}" Width="25" Height="25" Margin="0,0,0,0"></Image>
                 </MenuItem.Header>
                 
-                <MenuItem IsCheckable="True" x:Name="CaseChb" Header="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Chb_Case}"></MenuItem>
-                <MenuItem IsCheckable="True" x:Name="MatchChb" Header="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Chb_Match}"></MenuItem>
+                <MenuItem IsCheckable="True" IsChecked="{Binding IsCaseSensitive,Mode=OneWayToSource}" x:Name="CaseChb" Header="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Chb_Case}"></MenuItem>
+                <MenuItem IsCheckable="True" IsChecked="{Binding IsMatchWholeWord,Mode=OneWayToSource}" x:Name="MatchChb" Header="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Chb_Match}"></MenuItem>
             </MenuItem>
         </Menu>
 
@@ -142,8 +142,8 @@
         
         <Border x:Name="ReplaceBorder" Grid.Row="2" Background="White" Height="120">
             <StackPanel Margin="10" HorizontalAlignment="Center" Width="{Binding ElementName=ReplaceBorder,Path=ActualWidth}">
-                <Button Content="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Button_Replace}" Margin="25,10,25,10" Height="30" Background="#2D3D62" Foreground="White" Style="{StaticResource ButtonHoverStyle}"></Button>
-                <Button Content="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Button_ReplaceAll}" Margin="25,0,25,0" Height="30" Background="#E2E3E6" Foreground="Black" Style="{StaticResource ButtonHoverStyle}"></Button>
+                <Button Click="ReplaceCurrent_Click" Content="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Button_Replace}" Margin="25,10,25,10" Height="30" Background="#2D3D62" Foreground="White" Style="{StaticResource ButtonHoverStyle}"></Button>
+                <Button Click="ReplaceAll_Click" Content="{Binding Converter={StaticResource BotaResourceConverter}, ConverterParameter=Button_ReplaceAll}" Margin="25,0,25,0" Height="30" Background="#E2E3E6" Foreground="Black" Style="{StaticResource ButtonHoverStyle}"></Button>
             </StackPanel>
         </Border>
         

+ 54 - 14
Demo/Examples/Compdfkit_Tools/PDFView/PDFSearch/PDFSearchControl/CPDFSearchControl.xaml.cs

@@ -19,6 +19,8 @@ namespace Compdfkit_Tools.PDFControl
         /// </summary>
         private CPDFViewer pdfView;
         private int currentHighLightIndex { get; set; } = -1;
+        
+        private C_Search_Options searchOption = C_Search_Options.Search_Case_Insensitive;
 
         private PDFTextSearch textSearch;
 
@@ -26,13 +28,45 @@ namespace Compdfkit_Tools.PDFControl
         
         private bool isClearResult = false;
         
-
         private SolidColorBrush highLightBrush = new SolidColorBrush(Color.FromArgb(0x99, 0xFF, 0xF7, 0x00));
         
+        public bool IsCaseSensitive
+        {
+            set
+            {
+                if (value)
+                {
+                    searchOption |= C_Search_Options.Search_Case_Sensitive;
+                }
+                else
+                {
+                    searchOption &= ~C_Search_Options.Search_Case_Sensitive;
+                }
+                pdfView?.StartFindText(keyWord,searchOption);
+            }
+        }
+        
+        public bool IsMatchWholeWord
+        {
+            set
+            {
+                if (value)
+                {
+                    searchOption |= C_Search_Options.Search_Match_Whole_Word;
+                }
+                else
+                {
+                    searchOption &= ~C_Search_Options.Search_Match_Whole_Word;
+                }
+                pdfView?.StartFindText(keyWord,searchOption);
+            }
+        }
+        
         public CPDFSearchControl()
         {
             InitializeComponent();
             Loaded += PDFSearch_Loaded;
+            DataContext = this;
         }
 
         public void InitWithPDFViewer(CPDFViewer newPDFView)
@@ -70,6 +104,11 @@ namespace Compdfkit_Tools.PDFControl
 
         private void SearchInput_MoveResultEvent(object sender, CPDFSearchInputUI.MoveDirection e)
         {
+            if (keyWord != SearchInput.SearchKeyWord)
+            {
+                keyWord = SearchInput.SearchKeyWord;
+                pdfView.StartFindText(keyWord, searchOption);
+            }
             if (e == CPDFSearchInputUI.MoveDirection.Previous)
             {
                 pdfView.FindBackward();
@@ -192,17 +231,6 @@ namespace Compdfkit_Tools.PDFControl
             {
                 return;
             }
-
-            var searchOption = C_Search_Options.Search_Case_Insensitive;
-            if (MatchChb.IsChecked)
-            {
-                searchOption |= C_Search_Options.Search_Match_Whole_Word;
-            }
-
-            if (CaseChb.IsChecked)
-            {
-                searchOption |= C_Search_Options.Search_Case_Sensitive;
-            }
             
             keyWord = e;
             textSearch.TextSearchDocument = pdfView.Document;
@@ -219,8 +247,7 @@ namespace Compdfkit_Tools.PDFControl
             }
             else if (ReplaceTog.IsChecked == true)
             {
-                pdfView.StartFindText(keyWord, searchOption);
-                pdfView.FindForward();
+                SearchInput_MoveResultEvent(null, CPDFSearchInputUI.MoveDirection.Next);
             }
         }
 
@@ -275,5 +302,18 @@ namespace Compdfkit_Tools.PDFControl
             SearchResult.Visibility = Visibility.Collapsed;
             ResultBorder.Visibility = Visibility.Collapsed;
         }
+
+        private void ReplaceCurrent_Click(object sender, RoutedEventArgs e)
+        {
+            pdfView.ReplaceText(SearchInput.ReplaceWord);
+        }
+
+        private void ReplaceAll_Click(object sender, RoutedEventArgs e)
+        {
+            for (int index = 0; index < pdfView.Document.PageCount; index++)
+            {
+                pdfView.ReplacePageAllText(SearchInput.ReplaceWord, index);
+            }
+        }
     }
 }