using ComPDFKit.Tool.DrawTool; using ComPDFKitViewer.Layer; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; using System.Windows; using ComPDFKitViewer.Helper; using ComPDFKitViewer; using ComPDFKit.Tool.Help; using System.Windows.Media; using System.Xml.Linq; namespace ComPDFKit.Tool { public partial class CPDFViewerTool { int selectTextTag = -1; private void InsertSelectTextView() { SelectText createAnnotTool = new SelectText(); int SelectTextindex = PDFViewer.GetMaxViewIndex(); PDFViewer.InsertView(SelectTextindex, createAnnotTool); selectTextTag = createAnnotTool.GetResTag(); } public bool IsText() { PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint); return PDFHelp.IsTextAtPos(PDFViewer.GetDocument(), pageindex, new Point(DpiHelper.StandardNumToPDFNum(pagepoint.X / PDFViewer.CurrentRenderFrame.ZoomFactor), DpiHelper.StandardNumToPDFNum(pagepoint.Y / PDFViewer.CurrentRenderFrame.ZoomFactor))); } public void DrawStartSelectText() { if (PDFViewer.CurrentRenderFrame == null) { return; } BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint); (baseLayer as SelectText).StartDraw(new Point(DpiHelper.StandardNumToPDFNum(pagepoint.X / PDFViewer.CurrentRenderFrame.ZoomFactor), DpiHelper.StandardNumToPDFNum(pagepoint.Y / PDFViewer.CurrentRenderFrame.ZoomFactor)), pageindex); } public void DrawMoveSelectText(bool DoubleClick) { if (PDFViewer.CurrentRenderFrame == null) { return; } BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint); if(pageindex>=0) { (baseLayer as SelectText).MoveDraw(new Point(DpiHelper.StandardNumToPDFNum(pagepoint.X / PDFViewer.CurrentRenderFrame.ZoomFactor), DpiHelper.StandardNumToPDFNum(pagepoint.Y / PDFViewer.CurrentRenderFrame.ZoomFactor)), pageindex, PDFViewer, new Point(10, 10), DoubleClick); } } public void DrawEndSelectText() { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); (baseLayer as SelectText).EndDraw(); } public bool GetMousePointToTextSelectInfo() { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); TextSelectInfo selectTextInfo = (baseLayer as SelectText).GetTextSelectInfo(); PDFViewer.GetMousePointToPage(out int pageindex, out Point pagepoint); bool PressOnSelectedText = false; if (selectTextInfo.PageSelectTextRectList.Count <= 0) { PressOnSelectedText = false; return PressOnSelectedText; } if (selectTextInfo.PageSelectTextRectList.ContainsKey(pageindex)) { foreach (TextDrawRect textRect in selectTextInfo.PageSelectTextRectList[pageindex]) { Rect RawPaintRect = new Rect( DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Left) * currentZoom, DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Top) * currentZoom, DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Width) * currentZoom, DpiHelper.PDFNumToStandardNum(textRect.DrawRect.Height) * currentZoom); if (RawPaintRect.Contains(pagepoint)) { PressOnSelectedText = true; break; } } } return PressOnSelectedText; } public TextSelectInfo GetTextSelectInfo() { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); return (baseLayer as SelectText).GetTextSelectInfo(); } public void ReDrawSelectText() { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); if ((baseLayer as SelectText).HasSelectTextInfo()) { (baseLayer as SelectText).Draw(PDFViewer); } else { (baseLayer as SelectText).CleanDraw(PDFViewer); } } public void ReDrawSearchText() { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); if ((baseLayer as SelectText).HasSearchInfo()) { (baseLayer as SelectText).Draw(PDFViewer); } else { (baseLayer as SelectText).CleanDraw(PDFViewer); } } public void RemoveSelectTextData() { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); if ((baseLayer as SelectText).HasSelectTextInfo()) { (baseLayer as SelectText).RemoveSelectDataInfo(); (baseLayer as SelectText).Draw(PDFViewer); } } /// /// Set all search results /// /// public void SetPageSelectText(List searchTexts) { if (searchTexts.Count > 0) { TextSelectInfo searchInfo = new TextSelectInfo(); searchInfo.StartPage = searchTexts.Min(x => x.PageIndex); searchInfo.EndPage = searchTexts.Max(x => x.PageIndex); searchInfo.PageRotate = searchTexts[0].PageRotate; searchInfo.RotateRecord = true; List pageIndexList = (from u in searchTexts select u.PageIndex).Distinct().ToList(); foreach (int pageIndex in pageIndexList) { List pageTexts = searchTexts.Where(x => x.PageIndex == pageIndex).ToList(); foreach (TextSearchItem textItem in pageTexts) { if (!searchInfo.PageSelectTextRectList.ContainsKey(pageIndex)) { searchInfo.PageSelectTextRectList[pageIndex] = new List(); } searchInfo.PageSelectTextRectList[pageIndex].Add(new TextDrawRect() { Text = textItem.TextContent, DrawRect = textItem.TextRect, PaintBrush = textItem.PaintBrush, DrawActiveSearch = false, SearchInfo = textItem }); } } BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); (baseLayer as SelectText).SetSearchInfo(searchInfo); } } /// /// Clear the previously cached search results /// public void CleanSearchInfo() { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); (baseLayer as SelectText).CleanSearchInfo(); } public void HighLightSearchText(List selectTexts) { BaseLayer baseLayer = PDFViewer.GetViewForTag(selectTextTag); if ((baseLayer as SelectText).HasSearchInfo()) { TextSelectInfo searchTextInfo = (baseLayer as SelectText).GetSearchInfo(); if (searchTextInfo.PageSelectTextRectList != null) { foreach (int pageIndex in searchTextInfo.PageSelectTextRectList.Keys) { List drawSearchList = searchTextInfo.PageSelectTextRectList[pageIndex]; foreach (TextDrawRect drawRect in drawSearchList) { drawRect.DrawActiveSearch = selectTexts.Contains(drawRect.SearchInfo); if (drawRect.DrawActiveSearch) { drawRect.PaintBrush = drawRect.SearchInfo.PaintBrush; } else { drawRect.PaintBrush = drawRect.SearchInfo.BorderBrush; } } } } } } } }