1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 06:38:07 +02:00

Fix left offset when scrolling to search result

When computing the left offset of the highlighted text, we cannot use
.offsetLeft because the text might have been scaled through CSS, and it
needs to be taken into account.

Use `.getClientRects()`/`.getBoundingClientRect()` instead, which will
return measurements scaled appropriately.
This commit is contained in:
Nicolò Ribaudo 2024-12-16 16:01:08 +01:00
parent 8985d80aef
commit 4e2aabc5cd
No known key found for this signature in database
GPG key ID: AAFDA9101C58F338
4 changed files with 36 additions and 1 deletions

View file

@ -126,4 +126,31 @@ describe("find bar", () => {
);
});
});
describe("issue19207.pdf", () => {
let pages;
beforeAll(async () => {
pages = await loadAndWait("issue19207.pdf", ".textLayer", 200);
});
afterAll(async () => {
await closePages(pages);
});
it("must scroll to the search result text", async () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
// Search for "40"
await page.click("#viewFindButton");
await page.waitForSelector("#viewFindButton", { hidden: false });
await page.type("#findInput", "40");
const highlight = await page.waitForSelector(".textLayer .highlight");
expect(await highlight.isIntersectingViewport()).toBeTrue();
})
);
});
});
});

View file

@ -690,3 +690,4 @@
!inks_basic.pdf
!issue19182.pdf
!issue18911.pdf
!issue19207.pdf

BIN
test/pdfs/issue19207.pdf Normal file

Binary file not shown.

View file

@ -193,8 +193,15 @@ class TextHighlighter {
span.className = `${className} appended`;
span.append(node);
div.append(span);
return className.includes("selected") ? span.offsetLeft : 0;
if (className.includes("selected")) {
const { left } = span.getClientRects()[0];
const parentLeft = div.getBoundingClientRect().left;
return left - parentLeft;
}
return 0;
}
div.append(node);
return 0;
}