Correctly clip the text in the text layer (fixes #16316)
This commit is contained in:
parent
f1b005d7b8
commit
19ca41896e
@ -2575,19 +2575,26 @@ class PartialEvaluator {
|
||||
];
|
||||
}
|
||||
|
||||
function compareWithLastPosition() {
|
||||
function compareWithLastPosition(glyphWidth) {
|
||||
const currentTransform = getCurrentTextTransform();
|
||||
let posX = currentTransform[4];
|
||||
let posY = currentTransform[5];
|
||||
|
||||
const shiftedX = posX - viewBox[0];
|
||||
const shiftedY = posY - viewBox[1];
|
||||
|
||||
if (
|
||||
shiftedX < 0 ||
|
||||
shiftedX > viewBox[2] ||
|
||||
shiftedY < 0 ||
|
||||
shiftedY > viewBox[3]
|
||||
// Check if the glyph is in the viewbox.
|
||||
if (textState.font && textState.font.vertical) {
|
||||
if (
|
||||
posX < viewBox[0] ||
|
||||
posX > viewBox[2] ||
|
||||
posY + glyphWidth < viewBox[1] ||
|
||||
posY > viewBox[3]
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
} else if (
|
||||
posX + glyphWidth < viewBox[0] ||
|
||||
posX > viewBox[2] ||
|
||||
posY < viewBox[1] ||
|
||||
posY > viewBox[3]
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
@ -2837,8 +2844,16 @@ class PartialEvaluator {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!category.isZeroWidthDiacritic && !compareWithLastPosition()) {
|
||||
// The glyph is not in page so just skip it.
|
||||
if (
|
||||
!category.isZeroWidthDiacritic &&
|
||||
!compareWithLastPosition(scaledDim)
|
||||
) {
|
||||
// The glyph is not in page so just skip it but move the cursor.
|
||||
if (!font.vertical) {
|
||||
textState.translateTextMatrix(scaledDim * textState.textHScale, 0);
|
||||
} else {
|
||||
textState.translateTextMatrix(0, scaledDim);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -586,3 +586,4 @@
|
||||
!issue16224.pdf
|
||||
!issue16278.pdf
|
||||
!copy_paste_ligatures.pdf
|
||||
!issue16316.pdf
|
||||
|
BIN
test/pdfs/issue16316.pdf
Executable file
BIN
test/pdfs/issue16316.pdf
Executable file
Binary file not shown.
@ -2668,6 +2668,20 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`)
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
||||
it("gets text content with a specific view box", async function () {
|
||||
const loadingTask = getDocument(buildGetDocumentParams("issue16316.pdf"));
|
||||
const pdfDoc = await loadingTask.promise;
|
||||
const pdfPage = await pdfDoc.getPage(1);
|
||||
const { items } = await pdfPage.getTextContent({
|
||||
disableNormalization: true,
|
||||
});
|
||||
const text = mergeText(items);
|
||||
|
||||
expect(text).toEqual("Experimentation,");
|
||||
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
||||
it("gets empty structure tree", async function () {
|
||||
const tree = await page.getStructTree();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user