From 325f7afcca30c891ec7be06a5178c012a052bd55 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 17 Aug 2016 18:33:06 +0200 Subject: [PATCH] For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142) Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary. Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142. --- src/core/evaluator.js | 5 +++- src/core/fonts.js | 53 ++++++++++++++++++++++++++++++++++------ test/pdfs/.gitignore | 1 + test/pdfs/issue6901.pdf | Bin 0 -> 25100 bytes test/test_manifest.json | 14 +++++++++++ 5 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 test/pdfs/issue6901.pdf diff --git a/src/core/evaluator.js b/src/core/evaluator.js index edc988b96..ba2ee9ef5 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -1757,6 +1757,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { properties.differences = differences; properties.baseEncodingName = baseEncodingName; + properties.hasEncoding = !!baseEncodingName || differences.length > 0; properties.dict = dict; return toUnicodePromise.then(function(toUnicode) { properties.toUnicode = toUnicode; @@ -1774,8 +1775,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { * {ToUnicodeMap|IdentityToUnicodeMap} object. */ buildToUnicode: function PartialEvaluator_buildToUnicode(properties) { + properties.hasIncludedToUnicodeMap = + !!properties.toUnicode && properties.toUnicode.length > 0; // Section 9.10.2 Mapping Character Codes to Unicode Values - if (properties.toUnicode && properties.toUnicode.length !== 0) { + if (properties.hasIncludedToUnicodeMap) { return Promise.resolve(properties.toUnicode); } // According to the spec if the font is a simple font we should only map diff --git a/src/core/fonts.js b/src/core/fonts.js index ae9ced291..6d38a0920 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -163,6 +163,30 @@ function adjustWidths(properties) { properties.defaultWidth *= scale; } +function adjustToUnicode(properties, builtInEncoding) { + if (properties.hasIncludedToUnicodeMap) { + return; // The font dictionary has a `ToUnicode` entry. + } + if (properties.hasEncoding) { + return; // The font dictionary has an `Encoding` entry. + } + if (builtInEncoding === properties.defaultEncoding) { + return; // No point in trying to adjust `toUnicode` if the encodings match. + } + if (properties.toUnicode instanceof IdentityToUnicodeMap) { + return; + } + var toUnicode = [], glyphsUnicodeMap = getGlyphsUnicode(); + for (var charCode in builtInEncoding) { + var glyphName = builtInEncoding[charCode]; + var unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap); + if (unicode !== -1) { + toUnicode[charCode] = String.fromCharCode(unicode); + } + } + properties.toUnicode.amend(toUnicode); +} + function getFontType(type, subtype) { switch (type) { case 'Type1': @@ -261,7 +285,13 @@ var ToUnicodeMap = (function ToUnicodeMapClosure() { charCodeOf: function(v) { return this._map.indexOf(v); - } + }, + + amend: function (map) { + for (var charCode in map) { + this._map[charCode] = map[charCode]; + } + }, }; return ToUnicodeMap; @@ -297,7 +327,11 @@ var IdentityToUnicodeMap = (function IdentityToUnicodeMapClosure() { charCodeOf: function (v) { return (isInt(v) && v >= this.firstChar && v <= this.lastChar) ? v : -1; - } + }, + + amend: function (map) { + error('Should not call amend()'); + }, }; return IdentityToUnicodeMap; @@ -765,6 +799,7 @@ var Font = (function FontClosure() { this.fontMatrix = properties.fontMatrix; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; + this.toUnicode = properties.toUnicode; this.encoding = properties.baseEncoding; this.seacMap = properties.seacMap; @@ -2386,10 +2421,8 @@ var Font = (function FontClosure() { } else { // Most of the following logic in this code branch is based on the // 9.6.6.4 of the PDF spec. - var hasEncoding = - properties.differences.length > 0 || !!properties.baseEncodingName; - var cmapTable = - readCmapTable(tables['cmap'], font, this.isSymbolicFont, hasEncoding); + var cmapTable = readCmapTable(tables['cmap'], font, this.isSymbolicFont, + properties.hasEncoding); var cmapPlatformId = cmapTable.platformId; var cmapEncodingId = cmapTable.encodingId; var cmapMappings = cmapTable.mappings; @@ -2398,7 +2431,7 @@ var Font = (function FontClosure() { // The spec seems to imply that if the font is symbolic the encoding // should be ignored, this doesn't appear to work for 'preistabelle.pdf' // where the the font is symbolic and it has an encoding. - if (hasEncoding && + if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || (cmapPlatformId === -1 && cmapEncodingId === -1 && // Temporary hack @@ -2562,6 +2595,12 @@ var Font = (function FontClosure() { // TODO: Check the charstring widths to determine this. properties.fixedPitch = false; + if (properties.builtInEncoding) { + // For Type1 fonts that do not include either `ToUnicode` or `Encoding` + // data, attempt to use the `builtInEncoding` to improve text selection. + adjustToUnicode(properties, properties.builtInEncoding); + } + var mapping = font.getGlyphMapping(properties); var newMapping = adjustMapping(mapping, properties); this.toFontChar = newMapping.toFontChar; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 546382bea..0e2e4b5a1 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -22,6 +22,7 @@ !issue5808.pdf !issue6204.pdf !issue6782.pdf +!issue6901.pdf !issue6961.pdf !issue6962.pdf !issue7020.pdf diff --git a/test/pdfs/issue6901.pdf b/test/pdfs/issue6901.pdf new file mode 100644 index 0000000000000000000000000000000000000000..90ec417832a12e617fe78d4ceef19ba56548dbe1 GIT binary patch literal 25100 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 Y1kKD9_GgkW;Lk1KMyI2bR+T~jKfgBs`Tzg` literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index bc8b0412c..6ffefb1a2 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1220,6 +1220,20 @@ "link": false, "type": "text" }, + { "id": "issue6901-eq", + "file": "pdfs/issue6901.pdf", + "md5": "1a0604b1a7a3aaf2162b425a9a84230b", + "rounds": 1, + "link": false, + "type": "eq" + }, + { "id": "issue6901-text", + "file": "pdfs/issue6901.pdf", + "md5": "1a0604b1a7a3aaf2162b425a9a84230b", + "rounds": 1, + "link": false, + "type": "text" + }, { "id": "issue6962", "file": "pdfs/issue6962.pdf", "md5": "d40e871ecca68baf93114bd28c782148",