From 71e76869504503f39b4f1b1ecdf76042a784923c Mon Sep 17 00:00:00 2001 From: Jani Pehkonen Date: Tue, 3 Mar 2020 21:55:51 +0200 Subject: [PATCH] Fix Type1 font parsing when .notdef is not at index zero Fixes #11477 The PDF draws many space characters but the embedded fonts don't have a glyph named `space`, so `.notdef` should be drawn instead. PDF.js assumed that Type1 fonts define `.notdef` as the first glyph (index 0). However, now the fonts have the glyph `A` at index 0 and `.notdef` is the last one, so `A` appears where spaces are expected. Because the rest of the font machinery in `core/fonts.js` assumes `.notdef` is at index zero, it's easiest to modify `core/type1_parser.js` so that it "repairs" fonts and makes sure `.notdef` is at index 0. --- src/core/type1_parser.js | 10 ++++++++-- test/pdfs/.gitignore | 1 + test/pdfs/issue11477_reduced.pdf | Bin 0 -> 25469 bytes test/test_manifest.json | 6 ++++++ 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 test/pdfs/issue11477_reduced.pdf diff --git a/src/core/type1_parser.js b/src/core/type1_parser.js index ad35fa768..d87c7986d 100644 --- a/src/core/type1_parser.js +++ b/src/core/type1_parser.js @@ -679,13 +679,19 @@ var Type1Parser = (function Type1ParserClosure() { // here and put an endchar to make the validator happy. output = [14]; } - program.charstrings.push({ + const charStringObject = { glyphName: glyph, charstring: output, width: charString.width, lsb: charString.lsb, seac: charString.seac, - }); + }; + if (glyph === ".notdef") { + // Make sure .notdef is at index zero (issue #11477). + program.charstrings.unshift(charStringObject); + } else { + program.charstrings.push(charStringObject); + } // Attempt to replace missing widths, from the font dictionary /Widths // entry, with ones from the font data (fixes issue11150_reduced.pdf). diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index d2db531b2..9b7b4ee8a 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -299,6 +299,7 @@ !issue4573.pdf !issue4722.pdf !issue4800.pdf +!issue11477_reduced.pdf !text_clip_cff_cid.pdf !issue4801.pdf !issue5334.pdf diff --git a/test/pdfs/issue11477_reduced.pdf b/test/pdfs/issue11477_reduced.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d0abc3771373054f2209f43e7e3afd9b665e1407 GIT binary patch literal 25469 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