1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-22 16:18:08 +02:00

Improve glyph mapping for non-embedded composite standard fonts with a /CIDToGIDMap (issue 11915)

*Please note:* All of this feels very handwavy, but at least it passes all tests locally. Hopefully we have enough tests for this part of the font code.

For non-embedded composite standard fonts with an "incomplete" /CIDToGIDMap, we'll now fallback to an *explicitly defined* /ToUnicode map even when that one happens to be an /Identity-H or /Identity-V map.

The `Font.fallbackToSystemFont` method is unfortunately getting more and more special-cases, however that might be unavoidable given all the weird non-embedded fonts found in the wild :-(
This commit is contained in:
Jonas Jenwald 2021-09-15 11:06:25 +02:00
parent 7fb653b19a
commit a11343e9af
4 changed files with 22 additions and 0 deletions

View file

@ -1073,6 +1073,7 @@ class Font {
map[+charCode] = SupplementalGlyphMapForCalibri[charCode];
}
}
// Always update the glyph mapping with the `cidToGidMap` when it exists
// (fixes issue12418_reduced.pdf).
if (cidToGidMap) {
@ -1082,6 +1083,20 @@ class Font {
map[+charCode] = cidToGidMap[cid];
}
}
// When the /CIDToGIDMap is "incomplete", fallback to the included
// /ToUnicode-map regardless of its encoding (fixes issue11915.pdf).
if (
cidToGidMap.length !== this.toUnicode.length &&
properties.hasIncludedToUnicodeMap &&
this.toUnicode instanceof IdentityToUnicodeMap
) {
this.toUnicode.forEach(function (charCode, unicodeCharCode) {
const cid = map[charCode];
if (cidToGidMap[cid] === undefined) {
map[+charCode] = unicodeCharCode;
}
});
}
}
if (!(this.toUnicode instanceof IdentityToUnicodeMap)) {