Browse Source

其他 - 替换缩略图控件

liyuxuan 1 year ago
parent
commit
2c495bb214

+ 1 - 1
Demo/Examples/Compdfkit_Tools/PDFView/PDFScaling/PDFScalingControl/CPDFScalingControl.xaml.cs

@@ -86,7 +86,7 @@ namespace Compdfkit_Tools.PDFControl
             {
                 pdfViewer.SetZoom(pdfViewer.GetZoom() + 0.3);
             }
-            SetZoomTextBoxText(string.Format("{0}", (int)pdfViewer.GetZoom() * 100)));
+            SetZoomTextBoxText(string.Format("{0}", (int)pdfViewer.GetZoom()* 100));
         }
 
         private void PDFScalingControl_SetScaleEvent(object sender, string e)

+ 75 - 20
Demo/Examples/Compdfkit_Tools/PDFView/PDFThumbnail/PDFThumbnailControl/CPdfThumbnailControl.xaml.cs

@@ -1,7 +1,10 @@
-using Compdfkit_Tools.PDFControlUI;
-using ComPDFKitViewer.PdfViewer;
+using ComPDFKit.PDFDocument;
+using ComPDFKit.PDFPage;
+using Compdfkit_Tools.PDFControlUI;
+using ComPDFKitViewer;
 using System;
 using System.Collections.Generic;
+using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Input;
@@ -15,7 +18,7 @@ namespace Compdfkit_Tools.PDFControl
         /// <summary>
         /// PDFViewer
         /// </summary>
-        private CPDFViewer pdfView;
+        private PDFViewControl ViewControl;
 
         /// <summary>
         /// Whether the thumbnail has been loaded
@@ -38,7 +41,8 @@ namespace Compdfkit_Tools.PDFControl
         private List<ThumbnailItem> thumbnailItemList { get; set; } = new List<ThumbnailItem>();
 
         private List<int> cachePageList = new List<int>();
-
+        private delegate void OnThumbnailGeneratedEventHandler(int pageIndex, byte[] thumb, int w, int h);
+        private OnThumbnailGeneratedEventHandler OnThumbnailGenerated;
         public CPDFThumbnailControl()
         {
             InitializeComponent();
@@ -59,7 +63,11 @@ namespace Compdfkit_Tools.PDFControl
         /// </summary>
         private void ThumbControl_SelectionChanged(object sender, int e)
         {
-            pdfView?.GoToPage(e);
+            if(ViewControl!=null &&ViewControl.PDFViewTool!=null)
+            {
+                CPDFViewer pdfViewer=ViewControl.PDFViewTool.GetCPDFViewer();
+                pdfViewer?.GoToPage(e, new Point(0, 0));
+            }
         }
 
         /// <summary>
@@ -75,38 +83,46 @@ namespace Compdfkit_Tools.PDFControl
         /// </summary>
         public void LoadThumb()
         {
-            if (pdfView == null || pdfView.Document == null || ThumbLoaded)
+            if (ViewControl == null || ViewControl.PDFViewTool == null || ThumbLoaded)
             {
                 return;
             }
 
-            if (pdfView.Document.IsLocked)
+            CPDFViewer pdfViewer = ViewControl.PDFViewTool.GetCPDFViewer();
+            CPDFDocument document= pdfViewer.GetDocument();
+            if (document==null || document.IsLocked)
             {
                 return;
             }
             cachePageList.Clear();
-            pdfView.OnThumbnailGenerated -= OnThumbnailGenerated;
-            pdfView.OnThumbnailGenerated += OnThumbnailGenerated;
-            pdfView.RenderCompleted -= PdfView_RenderCompleted;
-            pdfView.RenderCompleted += PdfView_RenderCompleted;
+            OnThumbnailGenerated -= ThumbnailGenerated;
+            OnThumbnailGenerated += ThumbnailGenerated;
+
+            pdfViewer.DrawChanged-= PdfView_DrawChanged;
+            pdfViewer.DrawChanged += PdfView_DrawChanged;
+
             PopulateThumbnailList();
             LoadVisibleThumbs();
         }
 
-        private void PdfView_RenderCompleted(object sender, KeyValuePair<string, object> e)
+        private void PdfView_DrawChanged(object sender, EventArgs e)
         {
-            if (e.Key == "RenderNum")
+            if (ViewControl != null && ViewControl.PDFViewTool != null)
             {
-                SelectThumbItemWithoutGoTo(pdfView.CurrentIndex);
+                CPDFViewer pdfViewer = ViewControl.PDFViewTool.GetCPDFViewer();
+                if (pdfViewer != null && pdfViewer.CurrentRenderFrame != null)
+                {
+                    SelectThumbItemWithoutGoTo(pdfViewer.CurrentRenderFrame.PageIndex);
+                }
             }
         }
 
         /// <summary>
         /// Set up PDFViewer
         /// </summary>
-        public void InitWithPDFViewer(CPDFViewer newPDFView)
+        public void InitWithPDFViewer(PDFViewControl viewControl)
         {
-            pdfView = newPDFView;
+            ViewControl = viewControl;
         }
 
         /// <summary>
@@ -127,9 +143,20 @@ namespace Compdfkit_Tools.PDFControl
         {
             int thumbnailWidth = thumbnailSize[zoomLevel];
             thumbnailItemList.Clear();
-            for (int i = 0; i < pdfView.Document.PageCount; i++)
+            if (ViewControl == null || ViewControl.PDFViewTool == null)
+            {
+                return;
+            }
+
+            CPDFViewer pdfViewer = ViewControl.PDFViewTool.GetCPDFViewer();
+            CPDFDocument pdfdoc= pdfViewer?.GetDocument();
+            if (pdfdoc == null)
+            {
+                return;
+            }
+            for (int i = 0; i < pdfdoc.PageCount; i++)
             {
-                Size pageSize = pdfView.Document.GetPageSize(i);
+                Size pageSize = pdfdoc.GetPageSize(i);
 
                 int imageWidth = 0; 
                 int imageHeight = 0; 
@@ -177,7 +204,7 @@ namespace Compdfkit_Tools.PDFControl
                         if (cachePageList.Contains(item.PageIndex) == false)
                         {
                             cachePageList.Add(item.PageIndex);
-                            await pdfView.GetThumbnail(item.PageIndex, item.ImageWidth, item.ImageHeight);
+                            await GetThumbnail(item.PageIndex, item.ImageWidth, item.ImageHeight);
                         }
                     }
                 }
@@ -188,7 +215,7 @@ namespace Compdfkit_Tools.PDFControl
             }
         }
 
-        private void OnThumbnailGenerated(int pageIndex, byte[] thumb, int w, int h)
+        private void ThumbnailGenerated(int pageIndex, byte[] thumb, int w, int h)
         {
             try
             {
@@ -229,5 +256,33 @@ namespace Compdfkit_Tools.PDFControl
                 LoadThumb();
             }
         }
+
+        public async Task GetThumbnail(int pageIndex, int imageWidth, int imageHeight)
+        {
+            if (imageWidth <= 0 || imageHeight <= 0)
+            {
+                return;
+            }
+            if (ViewControl == null || ViewControl.PDFViewTool == null)
+            {
+                return;
+            }
+
+            CPDFViewer pdfViewer = ViewControl.PDFViewTool.GetCPDFViewer();
+            CPDFDocument pdfdoc = pdfViewer?.GetDocument();
+            if (pdfdoc == null)
+            {
+                return;
+            }
+
+            CPDFPage page = pdfdoc.PageAtIndex(pageIndex);
+            byte[] bmpData = new byte[imageWidth * imageHeight * 4];
+
+            await Task.Run(() => page.RenderPageBitmap(0, 0, imageWidth, imageHeight, 0xFFFFFFFF, bmpData, 1, true));
+            if (OnThumbnailGenerated != null)
+            {
+                OnThumbnailGenerated(pageIndex, bmpData, imageWidth, imageHeight);
+            }
+        }
     }
 }