프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / KCOM / Controls / SearchPanel.xaml.cs @ 0c997b99

이력 | 보기 | 이력해설 | 다운로드 (7.33 KB)

1
using MarkupToPDF.Common;
2
using System;
3
using System.Collections.Generic;
4
using System.Diagnostics;
5
using System.Linq;
6
using System.Text;
7
using System.Windows;
8
using System.Windows.Controls;
9
using System.Windows.Data;
10
using System.Windows.Documents;
11
using System.Windows.Input;
12
using System.Windows.Media;
13
using System.Windows.Media.Imaging;
14
using System.Windows.Navigation;
15
using System.Windows.Shapes;
16

    
17
namespace KCOM.Controls
18
{
19
    public class SearchText
20
    {
21
        public Bytescout.PDFExtractor.ISearchResult searchResult { get; set; }
22
        public int PageNo { get; set; }
23
    }
24
    /// <summary>
25
    /// Interaction logic for SearchPanel.xaml
26
    /// </summary>
27
    public partial class SearchPanel : UserControl
28
    {
29
        //List<HoneyheadTEXT> txtSet = new List<HoneyheadTEXT>();
30
        public System.Collections.ObjectModel.ObservableCollection<SearchText> SearchSet { get; set; }
31
        string RegistrationKey = "193B-FD48-42F4-68E6-2D35-4C94-D07";
32
        string RegistrationName = "license@doftech.co.kr";
33
        Bytescout.PDFExtractor.TextExtractor extractor;
34

    
35
        public SearchPanel()
36
        {
37
            //InitializeComponent();
38
            this.Loaded += SearchPanel_Loaded;
39
            
40
        }
41

    
42
        private void tbSearch_KeyDown(object sender, KeyEventArgs e)
43
        {
44
            if (e.Key == Key.Enter)
45
            {
46
                SearchMethod();
47
            }
48
        }
49

    
50
        private void SearchPanel_Loaded(object sender, RoutedEventArgs e)
51
        {
52
            //측정
53
            //Stopwatch sw = new Stopwatch();
54
            //sw.Start();
55
            InitializeComponent();
56
            //System.Diagnostics.Debug.WriteLine("SearchPanel() : " + sw.ElapsedMilliseconds.ToString() + "ms");
57

    
58
            btnSearch.Click += BtnSearch_Click;
59
            btnSearchPDFDownload.Click += BtnSearchPDFDownload_Click;
60
            SearchSet = new System.Collections.ObjectModel.ObservableCollection<SearchText>();
61
            extractor = new Bytescout.PDFExtractor.TextExtractor(RegistrationName, RegistrationKey);
62
            tbSearch.KeyDown += tbSearch_KeyDown;
63
            this.DataContext = this;
64

    
65
            /*
66
            if (Common.ViewerDataModel.Instance.searchPDF ==null)
67
            {
68

    
69
            }
70
            else
71
            {
72
                border_Overlap.Visibility = Visibility.Collapsed;
73
                tbSearch.Focus();
74
                
75
            }
76
            */
77

    
78
            if (Common.ViewerDataModel.Instance.searchPDF != null)
79
            {
80
                border_Overlap.Visibility = Visibility.Collapsed;
81
                tbSearch.Focus();
82
            }
83
        }
84

    
85
        private void BtnSearchPDFDownload_Click(object sender, RoutedEventArgs e)
86
        {
87
            using (System.Net.WebClient client = new System.Net.WebClient())
88
            {
89
                string instnaceFile = System.IO.Path.GetTempFileName().Replace(".pdf", ".tmp");
90
                client.DownloadFileCompleted += Client_DownloadFileCompleted;
91
                client.DownloadProgressChanged += Client_DownloadProgressChanged;
92
                client.DownloadFileAsync(new Uri(Common.ViewerDataModel.Instance.SystemMain.dzMainMenu._DocInfo.ORIGINAL_FILE), instnaceFile, instnaceFile);
93
            }
94
            
95
        }
96

    
97
        private void Client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
98
        {
99
            border_Overlap.Visibility = Visibility.Collapsed;
100
            Common.ViewerDataModel.Instance.searchPDF = new System.IO.FileInfo(e.UserState.ToString());
101
        }
102

    
103
        private void Client_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
104
        {
105
            tlDonwloadState.Text = "문서를 다운로드 중입니다 : " + e.ProgressPercentage;
106
            
107
        }
108

    
109
        private void BtnSearch_Click(object sender, RoutedEventArgs e)
110
        {
111
            SearchMethod();
112
        }
113

    
114
        private void SearchMethod()
115
        {
116
            extractor.LoadDocumentFromFile(Common.ViewerDataModel.Instance.searchPDF.FullName);
117
            SearchSet.Clear();
118
            string searchString = tbSearch.Text;
119
            int pageCount = extractor.GetPageCount();
120

    
121
            if (chkCurrentPageOnly.IsChecked.Value)
122
            {
123
                var currentPage = Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.pageNavigator.CurrentPage.PageNumber - 1;
124
                if (extractor.Find(currentPage, searchString, false))
125
                    do
126
                    {
127
                        SearchSet.Add(new SearchText { PageNo = currentPage + 1, searchResult = extractor.FoundText });
128
                    }
129
                    while (extractor.FindNext());
130
            }
131
            else
132
            {
133
                for (int i = 0; i < pageCount; i++)
134
                {
135
                    if (extractor.Find(i, searchString, false))
136
                        do
137
                        {
138
                            SearchSet.Add(new SearchText { PageNo = i + 1, searchResult = extractor.FoundText });
139
                        }
140
                        while (extractor.FindNext());
141
                }
142
            }
143

    
144

    
145
            this.DataContext = this;
146
            tbSearch.Text = "";
147
            tbSearch.Focus();
148
        }
149

    
150
        private void chkSelectionChangeEvent(object sender, RoutedEventArgs e)
151
        {
152
            if (Common.ViewerDataModel.Instance.searchPDF != null)
153
            {
154
                if (sender is RadioButton)
155
                {
156
                    switch ((sender as RadioButton).Tag.ToString())
157
                    {
158
                        case "0":
159
                            extractor.WordMatchingMode = Bytescout.PDFExtractor.WordMatchingMode.None;
160
                            break;
161
                        case "1":
162
                            extractor.WordMatchingMode = Bytescout.PDFExtractor.WordMatchingMode.ExactMatch;
163
                            break;
164
                        case "2":
165
                            extractor.WordMatchingMode = Bytescout.PDFExtractor.WordMatchingMode.SmartMatch;
166
                            break;
167
                        default:
168
                            break;
169
                    }
170
                }
171
            }
172
        }
173

    
174
        private void lstSearchWord_SelectionChanged(object sender, SelectionChangedEventArgs e)
175
        {
176
            if(e.AddedItems.Count>0)
177
            {
178
                SearchText item = (e.AddedItems[0] as SearchText);
179

    
180
                Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.pageNavigator.GotoPage(item.PageNo);
181
                var width = Convert.ToDouble(Common.ViewerDataModel.Instance.Document_Info[item.PageNo-1].PAGE_WIDTH);
182
                var height = Convert.ToDouble(Common.ViewerDataModel.Instance.Document_Info[item.PageNo - 1].PAGE_HEIGHT);
183
                var widthScale = width / Convert.ToDouble(extractor.GetPageRect_Width(item.PageNo-1));
184
                var heightScale = height / Convert.ToDouble(extractor.GetPageRect_Height(item.PageNo-1));
185

    
186
                Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.zoomAndPanControl.ZoomTo(new Rect
187
                {
188
                    X = item.searchResult.Left* widthScale,
189
                    Y = item.searchResult.Top * heightScale,
190
                    Width = item.searchResult.Width * widthScale,
191
                    Height = item.searchResult.Height * heightScale
192
                });
193
                
194
            }
195
        }
196
    }
197
}
클립보드 이미지 추가 (최대 크기: 500 MB)