|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|