From 6a0b047bfaab38e023a8273b454b9000c7cde0c7 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 7 Jun 2016 22:40:06 +0200 Subject: [PATCH] Add upper-case `I` as a possible space replacement fallback in `Font.spaceWidth` to improve text-selection (issue 7180) In fonts with only upper-case glyphs, that are also missing a space glyph, `get spaceWidth` won't be able to return anything useful. By adding upper-case `I` as a fallback, we can thus improve text-selection in some PDF files. Note that locally, the patch causes slight movement in a few existing `text` tests, but in my opinion this actually looks like slight improvements. Fixes 7180. --- src/core/fonts.js | 2 +- test/pdfs/.gitignore | 1 + test/pdfs/issue7180.pdf | Bin 0 -> 10391 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/issue7180.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 56d75c84e81a6..d40907a77e547 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -2650,7 +2650,7 @@ var Font = (function FontClosure() { } // trying to estimate space character width - var possibleSpaceReplacements = ['space', 'minus', 'one', 'i']; + var possibleSpaceReplacements = ['space', 'minus', 'one', 'i', 'I']; var width; for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { var glyphName = possibleSpaceReplacements[i]; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index d0b08ac3012d2..ace230d03704e 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -24,6 +24,7 @@ !issue7020.pdf !issue7101.pdf !issue7115.pdf +!issue7180.pdf !issue7200.pdf !issue7229.pdf !filled-background.pdf diff --git a/test/pdfs/issue7180.pdf b/test/pdfs/issue7180.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d9bfebc7d9468245a2d733f3cd61dc08d00a58c8 GIT binary patch literal 10391 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