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;
}
}
}
}
}
}
}
}