Преглед на файлове

ComPDFKit.Tool(win)-文件对比选中高亮效果

liyuxuan преди 6 месеца
родител
ревизия
a0668aa71c
променени са 2 файла, в които са добавени 125 реда и са изтрити 0 реда
  1. 124 0
      Demo/Examples/ComPDFKit.Tool/CPDFViewerTool.PDFCompareEffect.cs
  2. 1 0
      Demo/Examples/ComPDFKit.Tool/ComPDFKit.Tool.csproj

+ 124 - 0
Demo/Examples/ComPDFKit.Tool/CPDFViewerTool.PDFCompareEffect.cs

@@ -0,0 +1,124 @@
+using ComPDFKit.Tool.Help;
+using ComPDFKit.Viewer.Layer;
+using ComPDFKitViewer;
+using ComPDFKitViewer.Helper;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Media;
+
+namespace ComPDFKit.Tool
+{
+    public partial class CPDFViewerTool
+    {
+        private int PDFCompareViewID { get; set; } = -1;
+        private int PDFComparePageIndex {  get; set; } = -1;
+        private List<Rect> PDFCompareRectList {  get; set; }
+        private SolidColorBrush PDFCompareBrush { get; set; }
+        private Pen PDFComparePen { get; set; }
+        private CustomizeLayer GetPDFCompareDrawView()
+        {
+            if(PDFViewer==null)
+            {
+                return null;
+            }
+            if (PDFCompareViewID != -1)
+            {
+                return PDFViewer.GetViewForTag(PDFCompareViewID) as CustomizeLayer;
+            }
+            int maxId = PDFViewer.GetMaxViewIndex();
+            CustomizeLayer customizeLayer = new CustomizeLayer();
+            PDFViewer.InsertView(maxId, customizeLayer);
+            PDFCompareViewID = maxId;
+            PDFViewer.DrawChanged -= DrawChangedNotify;
+            PDFViewer.DrawChanged += DrawChangedNotify;
+            return customizeLayer;
+        }
+
+        private void DrawPDFCompare()
+        {
+            CustomizeLayer drawLayer = GetPDFCompareDrawView();
+            if (drawLayer == null)
+            {
+                return;
+            }
+
+            if (PDFViewer.CurrentRenderFrame == null)
+            {
+                return;
+            }
+
+            RenderFrame frame = PDFViewer.CurrentRenderFrame;
+            List<RenderData> drawDataList = frame.GetRenderDatas();
+            if (drawDataList == null || drawDataList.Count == 0)
+            {
+                return;
+            }
+
+            RenderData drawData = null;
+            foreach (RenderData data in drawDataList)
+            {
+                if (data.PageIndex == PDFComparePageIndex)
+                {
+                    drawData = data;
+                    break;
+                }
+            }
+
+          DrawingContext drawDC=  drawLayer.RenderOpen();
+
+            if (drawData != null && PDFCompareRectList != null)
+            {
+                foreach(Rect drawRect in PDFCompareRectList)
+                {
+                    Rect standRect = DpiHelper.PDFRectToStandardRect(drawRect);
+
+                    Rect paintRect = new Rect(
+                        standRect.Left * frame.ZoomFactor,
+                        standRect.Top * frame.ZoomFactor,
+                        standRect.Width * frame.ZoomFactor,
+                        standRect.Height * frame.ZoomFactor);
+
+                    Rect offsetRect = new Rect(
+                        paintRect.Left + drawData.PageBound.Left,
+                        paintRect.Top + drawData.PageBound.Top,
+                        paintRect.Width,
+                        paintRect.Height);
+
+                    drawDC.DrawRectangle(PDFCompareBrush,PDFComparePen,offsetRect);
+                }
+            }
+
+            drawDC.Close();
+        }
+
+        private void DrawChangedNotify(object sender, EventArgs e)
+        {
+            DrawPDFCompare();
+        }
+
+        public void SetPDFCompareView(SolidColorBrush FillBrush,Pen BorderPen,int PageIndex,List<Rect> PDFRectList)
+        {
+            PDFCompareRectList=PDFRectList;
+            PDFComparePageIndex = PageIndex;
+            PDFCompareBrush = FillBrush;
+            PDFComparePen = BorderPen;
+
+            DrawPDFCompare();
+        }
+
+        public void ClearPDFCompareView()
+        {
+            CustomizeLayer drawLayer = GetPDFCompareDrawView();
+            if (drawLayer != null && PDFViewer != null)
+            {
+                PDFViewer.RemoveView(drawLayer);
+                PDFCompareViewID = -1;
+            }
+        }
+    }
+}

+ 1 - 0
Demo/Examples/ComPDFKit.Tool/ComPDFKit.Tool.csproj

@@ -105,6 +105,7 @@
     <Compile Include="CPDFViewerTool.FindReplace.cs" />
     <Compile Include="CPDFViewerTool.MultiSelectedRect.cs" />
     <Compile Include="CPDFViewerTool.PageSelected.cs" />
+    <Compile Include="CPDFViewerTool.PDFCompareEffect.cs" />
     <Compile Include="CPDFViewerTool.SelectImage.cs" />
     <Compile Include="CPDFViewerTool.WidgetTool.cs" />
     <Compile Include="CPDFViewerTool.SelectedRect.cs" />