public PDFHandLayer(PDFRendererControlStats pdf_renderer_control_stats, int page, PDFRendererControl pdf_renderer_control) { this.pdf_renderer_control_stats = pdf_renderer_control_stats; this.page = page; this.pdf_renderer_control = pdf_renderer_control; InitializeComponent(); Background = Brushes.Transparent; Cursor = Cursors.Hand; int start_page_offset = pdf_renderer_control_stats.StartPageOffset; if (0 != start_page_offset) { ObjPageNumberControl.SetPageNumber(String.Format("{2} ({0}/{1})", page, pdf_renderer_control_stats.pdf_document.PDFRenderer.PageCount, (page + start_page_offset - 1))); } else { ObjPageNumberControl.SetPageNumber(String.Format("{0}/{1}", page, pdf_renderer_control_stats.pdf_document.PDFRenderer.PageCount)); } MouseDown += PDFHandLayer_MouseDown; MouseUp += PDFHandLayer_MouseUp; MouseMove += PDFHandLayer_MouseMove; }
internal PDFSearchResult SetCurrentSearchPosition(PDFSearchResult previous_search_result_placeholder) { PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); if (pdf_renderer_control != null) { foreach (PDFTextItem pdf_text_item in Children.OfType <PDFTextItem>()) { ASSERT.Test(pdf_text_item != null); PDFSearchResult search_result_placeholder = pdf_text_item.Tag as PDFSearchResult; // If there was no previous search location, we use the first we find // If the last text item was the match position, use this next one if (previous_search_result_placeholder == search_result_placeholder) { pdf_renderer_control.SelectPage(page); pdf_text_item.BringIntoView(); pdf_text_item.Opacity = 0; Animations.Fade(pdf_text_item, 0.1, 1); return(search_result_placeholder); } } } return(null); }
private void ReevaluateDataContext() { bool have_pdf_to_render = false; GridPreview.Children.Clear(); if (null != DataContext) { AugmentedBindable <PDFDocument> pdf_document_bindable = DataContext as AugmentedBindable <PDFDocument>; if (null != pdf_document_bindable) { if (pdf_document_bindable.Underlying.DocumentExists) { PDFRendererControl pdf_renderer_control = new PDFRendererControl(pdf_document_bindable.Underlying, false, PDFRendererControl.ZoomType.Zoom1Up); GridPreview.Children.Add(pdf_renderer_control); pdf_renderer_control.SelectedPageChanged += pdf_renderer_control_SelectedPageChanged; have_pdf_to_render = true; } } TxtNullDataContext.Visibility = Visibility.Collapsed; ObjDocumentInfo.Visibility = Visibility.Visible; if (!have_pdf_to_render) { ObjAbstract.Expand(); } IsEnabled = true; } else { TxtNullDataContext.Visibility = Visibility.Visible; ObjDocumentInfo.Visibility = Visibility.Collapsed; IsEnabled = false; } }
public PDFRendererPageControl(int page, PDFRendererControl pdf_renderer_control, PDFRendererControlStats pdf_renderer_control_stats, bool add_bells_and_whistles) { InitializeComponent(); this.page = page; this.pdf_renderer_control = pdf_renderer_control; this.pdf_renderer_control_stats = pdf_renderer_control_stats; this.add_bells_and_whistles = add_bells_and_whistles; // Start with a reasonable size this.Background = Brushes.White; this.Height = remembered_image_height * pdf_renderer_control_stats.zoom_factor; this.Width = remembered_image_width * pdf_renderer_control_stats.zoom_factor; page_layers = new List <PageLayer>(); // Try to trap the DAMNED cursor keys escape route KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.None); SetOperationMode(PDFRendererControl.OperationMode.Hand); this.MouseDown += PDFRendererPageControl_MouseDown; this.pdf_renderer_control_stats.pdf_document.PDFRenderer.OnPageTextAvailable += pdf_renderer_OnPageTextAvailable; if (add_bells_and_whistles) { DropShadowEffect dse = new DropShadowEffect(); dse.Color = ThemeColours.Background_Color_Blue_Dark; this.Effect = dse; } PopulateNeededLayers(); }
public PDFTextSentenceLayer(PDFRendererControl pdf_renderer_control, int page) { WPFDoEvents.AssertThisCodeIsRunningInTheUIThread(); this.pdf_renderer_control = new WeakReference <PDFRendererControl>(pdf_renderer_control); this.page = page; InitializeComponent(); Focusable = true; KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.Once); Background = Brushes.Transparent; Cursor = Cursors.IBeam; SizeChanged += PDFTextSentenceLayer_SizeChanged; drag_area_tracker = new DragAreaTracker(this, false); drag_area_tracker.OnDragStarted += drag_area_tracker_OnDragStarted; drag_area_tracker.OnDragInProgress += drag_area_tracker_OnDragInProgress; drag_area_tracker.OnDragComplete += drag_area_tracker_OnDragComplete; text_selection_manager = new TextSelectionManager(); PreviewMouseDown += PDFTextSentenceLayer_PreviewMouseDown; PreviewKeyDown += PDFTextLayer_PreviewKeyDown; RequestBringIntoView += PDFTextSentenceLayer_RequestBringIntoView; text_layer_selection_mode = TextLayerSelectionMode.Sentence; //Unloaded += PDFTextSentenceLayer_Unloaded; Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted; }
private void BuildWords() { ClearChildren(); PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); PDFDocument pdf_document = pdf_renderer_control?.GetPDFDocument(); ASSERT.Test(pdf_document != null); if (pdf_document != null) { WordList words = pdf_document.GetOCRText(page); if (null == words) { Children.Add(new OCRNotAvailableControl()); } else { foreach (var t in Children.OfType <OCRNotAvailableControl>()) { Children.Remove(t); break; } } } }
private void drag_area_tracker_OnDragComplete(bool button_left_pressed, bool button_right_pressed, Point mouse_down_point, Point mouse_up_point) { if (button_left_pressed) { WordList selected_words = text_selection_manager.OnDragComplete(button_left_pressed, button_right_pressed, mouse_down_point, mouse_up_point); ReflectWordList(selected_words); } string selected_text = text_selection_manager.GetLastSelectedWordsString(); if (selected_text.Length > 0) { PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); if (pdf_renderer_control != null) { if (button_right_pressed) { PDFDocument pdf_document = pdf_renderer_control?.GetPDFDocument(); ASSERT.Test(pdf_document != null); PDFTextSelectPopup popup = new PDFTextSelectPopup(selected_text, pdf_document); popup.Open(); } pdf_renderer_control.OnTextSelected(selected_text); } } }
public PDFHandLayer(PDFRendererControl pdf_renderer_control, int page) { WPFDoEvents.AssertThisCodeIsRunningInTheUIThread(); this.page = page; this.pdf_renderer_control = new WeakReference <PDFRendererControl>(pdf_renderer_control); InitializeComponent(); Background = Brushes.Transparent; Cursor = Cursors.Hand; PDFRendererControlStats pdf_renderer_control_stats = pdf_renderer_control.GetPDFRendererControlStats(); int start_page_offset = pdf_renderer_control_stats.StartPageOffset; if (0 != start_page_offset) { ObjPageNumberControl.SetPageNumber(String.Format("{2} ({0}/{1})", page, pdf_renderer_control_stats.pdf_document.PageCountAsString, (page + start_page_offset - 1))); } else { ObjPageNumberControl.SetPageNumber(String.Format("{0}/{1}", page, pdf_renderer_control_stats.pdf_document.PageCountAsString)); } MouseDown += PDFHandLayer_MouseDown; MouseUp += PDFHandLayer_MouseUp; MouseMove += PDFHandLayer_MouseMove; //Unloaded += PDFHandLayer_Unloaded; Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted; }
public JumpToSectionPopup(PDFReadingControl pdf_reading_control, PDFRendererControl pdf_render_control, PDFRendererControlStats pdf_renderer_control_stats) { InitializeComponent(); this.pdf_reading_control = pdf_reading_control; this.pdf_render_control = pdf_render_control; this.pdf_renderer_control_stats = pdf_renderer_control_stats; this.popup = new AugmentedPopup(this); // Add the bit explaining how to use bookmarks { TextBlock tb = new TextBlock(); tb.FontWeight = FontWeights.Bold; tb.Text = "Bookmarks:"; this.Children.Add(tb); } { { MenuItem mi = new MenuItem(); mi.Header = "" + "You can create up to 9 bookmarks while reading a PDF by\n" + "holding down CTRL+SHIFT and pressing a number from 1 to 9."; this.Children.Add(mi); } { MenuItem mi = new MenuItem(); mi.Header = "" + "You can later jump to a remembered bookmark by\n" + "holding down CTRL and pressing a number from 1 to 9."; this.Children.Add(mi); } } this.Children.Add(new AugmentedSpacer()); // Then add the sections { TextBlock tb = new TextBlock(); tb.FontWeight = FontWeights.Bold; tb.Text = "Sections:"; this.Children.Add(tb); } // First try from the PDF { BuildPopupFromPDF build_popup_from_pdf = new BuildPopupFromPDF(this); build_popup_from_pdf.BuildMenu(); } // If there are not enough bookmarks, go the OCR route if (pdf_renderer_control_stats.pdf_document.PDFRenderer.PageCount < 100) { BuildPopupFromOCR build_popup_from_ocr = new BuildPopupFromOCR(this); build_popup_from_ocr.BuildMenu(); } }
protected virtual void Dispose(bool disposing) { Logging.Debug("PDFHandLayer::Dispose({0}) @{1}", disposing, dispose_count); try { if (0 == dispose_count) { WPFDoEvents.InvokeInUIThread(() => { WPFDoEvents.AssertThisCodeIsRunningInTheUIThread(); try { foreach (var el in Children) { IDisposable node = el as IDisposable; if (null != node) { node.Dispose(); } } } catch (Exception ex) { Logging.Error(ex); } try { Children.Clear(); } catch (Exception ex) { Logging.Error(ex); } MouseDown -= PDFHandLayer_MouseDown; MouseUp -= PDFHandLayer_MouseUp; MouseMove -= PDFHandLayer_MouseMove; DataContext = null; }, Dispatcher); } // Clear the references for sanity's sake pdf_renderer_control_stats = null; pdf_renderer_control = null; } catch (Exception ex) { Logging.Error(ex); } ++dispose_count; //base.Dispose(disposing); // parent only throws an exception (intentionally), so depart from best practices and don't call base.Dispose(bool) }
public static void TestPDFRendererControl() { Library library = Library.GuestInstance; PDFDocument pdf_document = library.PDFDocuments[1]; PDFRendererControl pdf_renderer_control = new PDFRendererControl(pdf_document, true); ControlHostingWindow window = new ControlHostingWindow("PDF Renderer Control", pdf_renderer_control); window.Show(); }
private void drag_area_tracker_OnDragStarted(bool button_left_pressed, bool button_right_pressed, Point mouse_down_point) { PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); PDFDocument pdf_document = pdf_renderer_control?.GetPDFDocument(); ASSERT.Test(pdf_document != null); if (pdf_document != null) { WordList words = pdf_document.GetOCRText(page); text_selection_manager.OnDragStarted(text_layer_selection_mode, words, ActualWidth, ActualHeight, button_left_pressed, button_right_pressed, mouse_down_point); } }
private void TopicOverviewControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { // Clear the old ObjPDFRendererControlPlaceholder.Children.Clear(); AugmentedBindable <PDFDocument> pdf_document_bindable = DataContext as AugmentedBindable <PDFDocument>; if (null == pdf_document_bindable) { return; } PDFDocument pdf_document = pdf_document_bindable.Underlying; if (null == pdf_document.Library.ExpeditionManager.ExpeditionDataSource) { return; } ExpeditionDataSource eds = pdf_document.Library.ExpeditionManager.ExpeditionDataSource; LDAAnalysis lda_analysis = eds.LDAAnalysis; try { if (!pdf_document.Library.ExpeditionManager.ExpeditionDataSource.docs_index.ContainsKey(pdf_document.Fingerprint)) { MessageBoxes.Warn("Expedition doesn't have any information about this paper. Please Refresh your Expedition."); return; } } catch (Exception ex) { Logging.Error(ex, "There was a problem with Expedition for document {0}", pdf_document.Fingerprint); } if (pdf_document_bindable.Underlying.DocumentExists) { ObjPDFRendererControlPlaceholderBorder.Visibility = Visibility.Visible; ObjPDFRendererControlPlaceholderRow.Height = new GridLength(1, GridUnitType.Star); PDFRendererControl pdf_renderer_control = new PDFRendererControl(pdf_document_bindable.Underlying, false, PDFRendererControl.ZoomType.Zoom1Up); ObjPDFRendererControlPlaceholder.Children.Add(pdf_renderer_control); } else { ObjPDFRendererControlPlaceholderBorder.Visibility = Visibility.Collapsed; ObjPDFRendererControlPlaceholderRow.Height = new GridLength(0, GridUnitType.Pixel); } }
public JumpToSectionItem(JumpToSectionPopup jtsp, PDFReadingControl pdf_reading_control, PDFRendererControl pdf_render_control, PDFRendererControlStats pdf_renderer_control_stats, string section, int page) { InitializeComponent(); this.jtsp = jtsp; this.pdf_reading_control = pdf_reading_control; this.pdf_render_control = pdf_render_control; this.pdf_renderer_control_stats = pdf_renderer_control_stats; this.section = section; this.page = page; ButtonSection.Header = section; ButtonSection.Click += ButtonSection_Click; }
protected virtual void Dispose(bool disposing) { Logging.Debug("PDFHandLayer::Dispose({0}) @{1}", disposing, dispose_count); WPFDoEvents.SafeExec(() => { if (0 == dispose_count) { WPFDoEvents.AssertThisCodeIsRunningInTheUIThread(); foreach (var el in Children) { IDisposable node = el as IDisposable; if (null != node) { node.Dispose(); } } } }, must_exec_in_UI_thread: true); WPFDoEvents.SafeExec(() => { Children.Clear(); }, must_exec_in_UI_thread: true); WPFDoEvents.SafeExec(() => { MouseDown -= PDFHandLayer_MouseDown; MouseUp -= PDFHandLayer_MouseUp; MouseMove -= PDFHandLayer_MouseMove; }, must_exec_in_UI_thread: true); WPFDoEvents.SafeExec(() => { DataContext = null; }, must_exec_in_UI_thread: true); WPFDoEvents.SafeExec(() => { // Clear the references for sanity's sake pdf_renderer_control_stats = null; pdf_renderer_control = null; }); ++dispose_count; //base.Dispose(disposing); // parent only throws an exception (intentionally), so depart from best practices and don't call base.Dispose(bool) }
private void PDFHandLayer_MouseUp(object sender, MouseButtonEventArgs e) { mouse_pressed = false; ReleaseMouseCapture(); PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); if (pdf_renderer_control != null) { pdf_renderer_control.ScrollPageArea(new Point(0, 0), mouse_last_delta); } e.Handled = true; }
public PDFSearchLayer(PDFRendererControl pdf_renderer_control, int page) { WPFDoEvents.AssertThisCodeIsRunningInTheUIThread(); this.pdf_renderer_control = new WeakReference <PDFRendererControl>(pdf_renderer_control); this.page = page; InitializeComponent(); Background = Brushes.Transparent; SizeChanged += PDFSearchLayer_SizeChanged; //Unloaded += PDFSearchLayer_Unloaded; Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted; }
public static void TestPDFRendererControl() { Library library = Library.GuestInstance; List <PDFDocument> pdf_documents = library.PDFDocuments; if (0 < pdf_documents.Count) { PDFDocument pdf_document = pdf_documents[0]; PDFRenderer pdf_renderer = new PDFRenderer(pdf_document.DocumentPath, null, null); PDFAnnotationList pdf_annotation_list = pdf_document.Annotations; PDFRendererControl control = new PDFRendererControl(pdf_document, true); ControlHostingWindow window = new ControlHostingWindow("PDFRenderer", control); window.Show(); } }
private void PDFHandLayer_MouseDown(object sender, MouseButtonEventArgs e) { PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); if (pdf_renderer_control != null) { mouse_pressed = true; mouse_last_position = mouse_down_position = e.GetPosition(pdf_renderer_control); mouse_last_delta.X = 0; mouse_last_delta.Y = 0; CaptureMouse(); } }
private void ButtonSection_Click(object sender, RoutedEventArgs e) { FeatureTrackingManager.Instance.UseFeature(Features.Document_JumpToSection); PDFRendererControl pdf_renderer_control = pdf_reading_control.GetPDFRendererControl(); PDFRendererPageControl prpc = pdf_renderer_control.GetPageControl(page); string search_query = '"' + section + '"'; pdf_reading_control.SetSearchKeywords(search_query); pdf_renderer_control.SelectedPage = prpc; if (null != pdf_renderer_control.SelectedPage) { pdf_renderer_control.SelectedPage.BringIntoView(); } jtsp.Close(); }
private void PDFHandLayer_MouseMove(object sender, MouseEventArgs e) { PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); if (pdf_renderer_control != null) { Point mouse_current_position = e.GetPosition(pdf_renderer_control); if (mouse_pressed) { if (mouse_last_position.X != mouse_current_position.X || mouse_last_position.Y != mouse_current_position.Y) { mouse_last_delta.X = mouse_last_position.X - mouse_current_position.X; mouse_last_delta.Y = mouse_last_position.Y - mouse_current_position.Y; pdf_renderer_control.ScrollPageArea(mouse_last_delta, new Point(0, 0)); } } mouse_last_position = mouse_current_position; } }
internal PDFSearchResult SetNextSearchPosition(PDFSearchResult previous_search_result_placeholder) { bool have_found_last_search_item = false; PDFRendererControl pdf_renderer_control = GetPDFRendererControl(); if (pdf_renderer_control != null) { foreach (PDFTextItem pdf_text_item in Children.OfType <PDFTextItem>()) { ASSERT.Test(pdf_text_item != null); PDFSearchResult search_result_placeholder = pdf_text_item.Tag as PDFSearchResult; // If there was no previous search location, we use the first we find // If the last text item was the match position, use this next one if (null == previous_search_result_placeholder || have_found_last_search_item && previous_search_result_placeholder != search_result_placeholder) { pdf_renderer_control.SelectPage(page); pdf_text_item.BringIntoView(); pdf_text_item.Opacity = 0; Animations.Fade(pdf_text_item, 0.1, 1); return(search_result_placeholder); } // If we have just found the last match, flag that the next one is the successor match if (previous_search_result_placeholder == search_result_placeholder) { have_found_last_search_item = true; } } } // We have not managed to find a search position if we get this far return(null); }
private void ReflectPDFDocument(string search_terms) { if (0 < pdf_documents_search_pool.Count) { TxtProgress.Text = String.Format("Document {0} of {1}.", pdf_documents_search_index + 1, pdf_documents_search_pool.Count); ObjProgress.Value = pdf_documents_search_index + 1; ObjProgress.Maximum = pdf_documents_search_pool.Count; } else { TxtProgress.Text = "No documents"; ObjProgress.Value = 1; ObjProgress.Maximum = 1; } if (null != this.pdf_document_rendered) { // Clear down the previous renderer control PDFRendererControlArea.Children.Clear(); if (null != this.pdf_renderer_control) { this.pdf_renderer_control.Dispose(); this.pdf_renderer_control = null; } this.pdf_document_rendered = null; this.DataContext = null; } if (null != pdf_document) { // Force inference of the title in case it has not been populated... PDFMetadataInferenceFromOCR.InferTitleFromOCR(pdf_document, true); this.pdf_document_rendered = pdf_document; this.DataContext = pdf_document.Bindable; if (pdf_document.DocumentExists) { ObjNoPDFAvailableMessage.Visibility = Visibility.Collapsed; PDFRendererControlArea.Visibility = Visibility.Visible; // Make sure the first page is OCRed... pdf_document.PDFRenderer.GetOCRText(1); // Set up the new renderer control this.pdf_renderer_control = new PDFRendererControl(this.pdf_document, false, PDFRendererControl.ZoomType.Zoom1Up); this.pdf_renderer_control.ReconsiderOperationMode(PDFRendererControl.OperationMode.TextSentenceSelect); this.pdf_renderer_control.TextSelected += pdf_renderer_control_TextSelected; PDFRendererControlArea.Children.Add(pdf_renderer_control); } else { ObjNoPDFAvailableMessage.Visibility = Visibility.Visible; PDFRendererControlArea.Visibility = Visibility.Collapsed; } // Make sure we have something to search for if (String.IsNullOrEmpty(search_terms)) { string title_combined = pdf_document.TitleCombined; if (PDFDocument.TITLE_UNKNOWN != title_combined && pdf_document.DownloadLocation != title_combined) { search_terms = pdf_document.TitleCombined; } } // Kick off the search if (!String.IsNullOrEmpty(search_terms)) { ObjWebBrowser.DoWebSearch(search_terms); } } }