diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor
index 738babe8..d0ca42b4 100644
--- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor
+++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor
@@ -9,15 +9,21 @@
@if (PageCount > 0)
{
@@ -121,6 +127,7 @@
private bool _isDragging;
private double _grabOffsetXPt;
private double _grabOffsetYPt;
+ private int _currentPage = 1;
private static string GetFieldStyle(SenderPdfFieldOverlay field, double pageWidthPt, double pageHeightPt)
{
@@ -163,6 +170,17 @@
return $"aspect-ratio:{ratioText};cursor:{cursor};";
}
+ protected override void OnParametersSet()
+ {
+ if (PageCount <= 0)
+ {
+ _currentPage = 1;
+ return;
+ }
+
+ _currentPage = Math.Max(1, Math.Min(_currentPage, PageCount));
+ }
+
private async Task HandleClickAsync(MouseEventArgs args)
{
if (EditorClick.HasDelegate)
@@ -219,6 +237,65 @@
await MoveField.InvokeAsync(new SenderPdfFieldMoveRequest(_draggedFieldIndex.Value, pageNumber, xPt, yPt));
}
+ private async Task OnGoFirstPageAsync()
+ {
+ await NavigateToPageAsync(1);
+ }
+
+ private async Task OnGoPreviousPageAsync()
+ {
+ await NavigateToPageAsync(_currentPage - 1);
+ }
+
+ private async Task OnGoNextPageAsync()
+ {
+ await NavigateToPageAsync(_currentPage + 1);
+ }
+
+ private async Task OnGoLastPageAsync()
+ {
+ await NavigateToPageAsync(PageCount);
+ }
+
+ private async Task OnGoToPageAsync(int page)
+ {
+ await NavigateToPageAsync(page);
+ }
+
+ private async Task NavigateToPageAsync(int targetPage)
+ {
+ if (PageCount <= 0)
+ return;
+
+ var page = Math.Max(1, Math.Min(targetPage, PageCount));
+ _currentPage = page;
+
+ await JSRuntime.InvokeVoidAsync(
+ "envelopeEditor.scrollToPdfPage",
+ "sender-editor-pdf-viewer",
+ page);
+ }
+
+ private async Task OnEditorScrollAsync(EventArgs _)
+ {
+ if (PageCount <= 0)
+ return;
+
+ var visiblePage = await JSRuntime.InvokeAsync
(
+ "envelopeEditor.getVisiblePdfPageNumber",
+ "sender-editor-pdf-viewer");
+
+ if (!visiblePage.HasValue)
+ return;
+
+ var clamped = Math.Max(1, Math.Min(visiblePage.Value, PageCount));
+ if (clamped == _currentPage)
+ return;
+
+ _currentPage = clamped;
+ await InvokeAsync(StateHasChanged);
+ }
+
private void OnEditorMouseUp(MouseEventArgs args)
{
_draggedFieldIndex = null;
diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor
index 28137a86..0f2a3e36 100644
--- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor
+++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor
@@ -1,35 +1,55 @@