From 18e79e3c0b538d665f31fd671a1a71877ed2bc9a Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Mon, 21 Mar 2022 22:10:46 +0100 Subject: [PATCH] [text selection] Add the whitespaces present in the pdf in the text chunk - it aims to fix issue #14627; - the basic idea of the recent text refactoring was to only consider the rendered visible whitespaces. But sometimes, the heuristics aren't correct and although some whitespaces are in the text stream they weren't in the text chunks because they were too small. Hence we added some exceptions, for example, we always add a whitespace when it is between two non-whitespace chars but only when in the same Tj. So basically, this patch removes the constraint to have the chars in the same Tj (in using a circular buffer to save the two last chars) but don't add a space when the visible space is really too small (hence `NOT_A_SPACE_FACTOR`). --- src/core/evaluator.js | 92 ++++++++++++++++++++++---- test/pdfs/.gitignore | 1 + test/pdfs/issue14627.pdf | Bin 0 -> 62475 bytes test/test_manifest.json | 6 ++ test/unit/api_spec.js | 2 +- test/unit/pdf_find_controller_spec.js | 16 ++--- 6 files changed, 94 insertions(+), 23 deletions(-) create mode 100755 test/pdfs/issue14627.pdf diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 9c8f315f0..4caa568eb 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -2187,17 +2187,62 @@ class PartialEvaluator { spaceInFlowMax: 0, trackingSpaceMin: Infinity, negativeSpaceMax: -Infinity, + notASpace: -Infinity, transform: null, fontName: null, hasEOL: false, }; + // Use a circular buffer (length === 2) to save the last chars in the + // text stream. + // This implementation of the circular buffer is using a fixed array + // and the position of the next element: + // function addElement(x) { + // buffer[pos] = x; + // pos = (pos + 1) % buffer.length; + // } + // It's a way faster than: + // function addElement(x) { + // buffer.push(x); + // buffer.shift(); + // } + // + // It's useful to know when we need to add a whitespace in the + // text chunk. + const twoLastChars = [" ", " "]; + let twoLastCharsPos = 0; + + /** + * Save the last char. + * @param {string} char + * @returns {boolean} true when the two last chars before adding the new one + * are a non-whitespace followed by a whitespace. + */ + function saveLastChar(char) { + const nextPos = (twoLastCharsPos + 1) % 2; + const ret = + twoLastChars[twoLastCharsPos] !== " " && twoLastChars[nextPos] === " "; + twoLastChars[twoLastCharsPos] = char; + twoLastCharsPos = nextPos; + + return ret; + } + + function resetLastChars() { + twoLastChars[0] = twoLastChars[1] = " "; + twoLastCharsPos = 0; + } + // Used in addFakeSpaces. // A white <= fontSize * TRACKING_SPACE_FACTOR is a tracking space // so it doesn't count as a space. const TRACKING_SPACE_FACTOR = 0.1; + // When a white <= fontSize * NOT_A_SPACE_FACTOR, there is no space + // even if one is present in the text stream. + const NOT_A_SPACE_FACTOR = 0.03; + // A negative white < fontSize * NEGATIVE_SPACE_FACTOR induces // a break (a new chunk of text is created). // It doesn't change anything when the text is copied but @@ -2299,6 +2344,7 @@ class PartialEvaluator { textContentItem.trackingSpaceMin = textState.fontSize * TRACKING_SPACE_FACTOR; + textContentItem.notASpace = textState.fontSize * NOT_A_SPACE_FACTOR; textContentItem.negativeSpaceMax = textState.fontSize * NEGATIVE_SPACE_FACTOR; textContentItem.spaceInFlowMin = @@ -2483,6 +2529,7 @@ class PartialEvaluator { return true; } + resetLastChars(); flushTextContentItem(); return true; } @@ -2491,6 +2538,13 @@ class PartialEvaluator { appendEOL(); return true; } + + if (advanceY <= textOrientation * textContentItem.notASpace) { + // The real spacing between 2 consecutive chars is thin enough to be + // considered a non-space. + resetLastChars(); + } + if (advanceY <= textOrientation * textContentItem.trackingSpaceMin) { textContentItem.height += advanceY; } else if ( @@ -2501,6 +2555,7 @@ class PartialEvaluator { ) ) { if (textContentItem.str.length === 0) { + resetLastChars(); textContent.items.push({ str: " ", dir: "ltr", @@ -2532,6 +2587,10 @@ class PartialEvaluator { appendEOL(); return true; } + + // We're moving back so in case the last char was a whitespace + // we cancel it: it doesn't make sense to insert it. + resetLastChars(); flushTextContentItem(); return true; } @@ -2541,12 +2600,19 @@ class PartialEvaluator { return true; } + if (advanceX <= textOrientation * textContentItem.notASpace) { + // The real spacing between 2 consecutive chars is thin enough to be + // considered a non-space. + resetLastChars(); + } + if (advanceX <= textOrientation * textContentItem.trackingSpaceMin) { textContentItem.width += advanceX; } else if ( !addFakeSpaces(advanceX, textContentItem.prevTransform, textOrientation) ) { if (textContentItem.str.length === 0) { + resetLastChars(); textContent.items.push({ str: " ", dir: "ltr", @@ -2600,14 +2666,7 @@ class PartialEvaluator { } let scaledDim = glyphWidth * scale; - if ( - glyph.isWhitespace && - (i === 0 || - i + 1 === ii || - glyphs[i - 1].isWhitespace || - glyphs[i + 1].isWhitespace || - extraSpacing) - ) { + if (glyph.isWhitespace) { // Don't push a " " in the textContentItem // (except when it's between two non-spaces chars), // it will be done (if required) in next call to @@ -2623,6 +2682,7 @@ class PartialEvaluator { charSpacing += -scaledDim + textState.wordSpacing; textState.translateTextMatrix(0, -charSpacing); } + saveLastChar(" "); continue; } @@ -2653,17 +2713,18 @@ class PartialEvaluator { textChunk.prevTransform = getCurrentTextTransform(); } - if (glyph.isWhitespace) { + let glyphUnicode = glyph.unicode; + glyphUnicode = NormalizedUnicodes[glyphUnicode] || glyphUnicode; + glyphUnicode = reverseIfRtl(glyphUnicode); + if (saveLastChar(glyphUnicode)) { + // The two last chars are a non-whitespace followed by a whitespace + // and then this non-whitespace, so we insert a whitespace here. // Replaces all whitespaces with standard spaces (0x20), to avoid // alignment issues between the textLayer and the canvas if the text // contains e.g. tabs (fixes issue6612.pdf). textChunk.str.push(" "); - } else { - let glyphUnicode = glyph.unicode; - glyphUnicode = NormalizedUnicodes[glyphUnicode] || glyphUnicode; - glyphUnicode = reverseIfRtl(glyphUnicode); - textChunk.str.push(glyphUnicode); } + textChunk.str.push(glyphUnicode); if (charSpacing) { if (!font.vertical) { @@ -2679,6 +2740,7 @@ class PartialEvaluator { } function appendEOL() { + resetLastChars(); if (textContentItem.initialized) { textContentItem.hasEOL = true; flushTextContentItem(); @@ -2701,6 +2763,7 @@ class PartialEvaluator { width <= textOrientation * textContentItem.spaceInFlowMax ) { if (textContentItem.initialized) { + resetLastChars(); textContentItem.str.push(" "); } return false; @@ -2715,6 +2778,7 @@ class PartialEvaluator { } flushTextContentItem(); + resetLastChars(); textContent.items.push({ str: " ", // TODO: check if using the orientation from last chunk is diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 83f6f8a9d..71d3bbb2b 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -515,3 +515,4 @@ !issue14497.pdf !issue14502.pdf !issue13211.pdf +!issue14627.pdf diff --git a/test/pdfs/issue14627.pdf b/test/pdfs/issue14627.pdf new file mode 100755 index 0000000000000000000000000000000000000000..ae6ccd269c4bb9b42338c33f2f496d10926b7ff7 GIT binary patch literal 62475 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

{v+P@Fh0nZ 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index e3cdf1fec..ddd2ab8e9 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -6329,5 +6329,11 @@ "md5": "d193853e8a123dc50eeea593a4150b60", "rounds": 1, "type": "eq" + }, + { "id": "issue14627", + "file": "pdfs/issue14627.pdf", + "md5": "5d1bfcc3b3130bfa7e33e43990e2213a", + "rounds": 1, + "type": "text" } ] diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index eca1b0c25..081947830 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -1999,7 +1999,7 @@ describe("api", function () { const data = await Promise.all([defaultPromise, parametersPromise]); expect(!!data[0].items).toEqual(true); - expect(data[0].items.length).toEqual(11); + expect(data[0].items.length).toEqual(15); expect(!!data[0].styles).toEqual(true); const page1 = mergeText(data[0].items); diff --git a/test/unit/pdf_find_controller_spec.js b/test/unit/pdf_find_controller_spec.js index de8f08507..3e87beb4c 100644 --- a/test/unit/pdf_find_controller_spec.js +++ b/test/unit/pdf_find_controller_spec.js @@ -579,14 +579,14 @@ describe("pdf_find_controller", function () { }, pageMatches: [ [ - 299, 337, 414, 476, 623, 797, 978, 984, 1010, 1058, 1079, 1144, 1152, - 1274, 1343, 1391, 1399, 1421, 1497, 1521, 1527, 1684, 1774, 1786, - 1857, 1879, 1909, 1946, 2064, 2074, 2161, 2178, 2213, 2227, 2272, - 2322, 2359, 2401, 2412, 2423, 2462, 2532, 2538, 2553, 2562, 2576, - 2602, 2613, 2638, 2668, 2792, 2805, 2836, 2848, 2859, 2896, 2902, - 2916, 2940, 2960, 3091, 3239, 3249, 3339, 3387, 3394, 3468, 3477, - 3485, 3502, 3690, 3696, 3711, 3758, 3789, 3865, 3977, 4052, 4058, - 4071, + 302, 340, 418, 481, 628, 802, 983, 989, 1015, 1063, 1084, 1149, 1157, + 1278, 1346, 1394, 1402, 1424, 1500, 1524, 1530, 1686, 1776, 1788, + 1859, 1881, 1911, 1948, 2066, 2076, 2163, 2180, 2215, 2229, 2274, + 2324, 2360, 2402, 2413, 2424, 2463, 2532, 2538, 2553, 2562, 2576, + 2602, 2613, 2638, 2668, 2792, 2805, 2836, 2847, 2858, 2895, 2901, + 2915, 2939, 2959, 3089, 3236, 3246, 3336, 3384, 3391, 3465, 3474, + 3482, 3499, 3687, 3693, 3708, 3755, 3786, 3862, 3974, 4049, 4055, + 4068, ], ], pageMatchesLength: [