From 1dffe20f05d343bb04d9eed9673a25502f2b1a31 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Mar 2026 10:45:43 +0000 Subject: [PATCH] Fix beamer PDF preview scroll drift on recompile (#32077) GitOrigin-RevId: 6f15671ba7f7944446e48136b775dea7e5c9b34a --- .../features/pdf-preview/util/pdf-js-wrapper.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.ts b/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.ts index 5c73bee2b9..45e7a322db 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.ts +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.ts @@ -161,11 +161,23 @@ export default class PDFJSWrapper { // get the current page, offset and page size get currentPosition() { - const pageIndex = this.viewer.currentPageNumber - 1 + const containerRect = this.container.getBoundingClientRect() + + let pageIndex = this.viewer.currentPageNumber - 1 + for (let i = pageIndex; i >= 0; i--) { + const pageView = this.viewer.getPageView(i) + if (!pageView?.div) continue + const pageRect = pageView.div.getBoundingClientRect() + if (pageRect.bottom < containerRect.top) { + pageIndex = i + 1 + break + } + pageIndex = i + } + const pageView = this.viewer.getPageView(pageIndex) const pageRect = pageView.div.getBoundingClientRect() - const containerRect = this.container.getBoundingClientRect() const dy = containerRect.top - pageRect.top const dx = containerRect.left - pageRect.left const [left, top] = pageView.viewport.convertToPdfPoint(dx, dy)