Fix two cmap related issues.

In issue #8707, there's a char code mapped to a non-
existing glyph which shouldn't be drawn. However, we
saw it was missing and tried to then use the post table and
end up mapping it incorrectly.

This illuminated a problem with issue #5704 and bug
893730 where glyphs disappeared after above fix.  This was
from the cmap returning the wrong glyph id. Which in turn was
caused because the font had multiple of the same type of cmap
table and we were choosing the last one. Now, we instead
default to the first one. I'm unsure if we should instead be
merging the multiple cmaps, but using only the first one works.
This commit is contained in:
Brendan Dahl 2017-08-03 22:19:36 -07:00
parent 5b5781b45d
commit 0bef50d56d
4 changed files with 18 additions and 5 deletions

View File

@ -1353,6 +1353,13 @@ var Font = (function FontClosure() {
var offset = font.getInt32() >>> 0;
var useTable = false;
// Sometimes there are multiple of the same type of table. Default
// to choosing the first table and skip the rest.
if (potentialTable && potentialTable.platformId === platformId &&
potentialTable.encodingId === encodingId) {
continue;
}
if (platformId === 0 && encodingId === 0) {
useTable = true;
// Continue the loop since there still may be a higher priority
@ -2393,11 +2400,9 @@ var Font = (function FontClosure() {
if (cmapMappings[i].charCode !== unicodeOrCharCode) {
continue;
}
if (hasGlyph(cmapMappings[i].glyphId)) {
charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
found = true;
break;
}
charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
found = true;
break;
}
if (!found && properties.glyphNames) {
// Try to map using the post table.

View File

@ -56,6 +56,7 @@
!issue8480.pdf
!issue8570.pdf
!issue8697.pdf
!issue8707.pdf
!bad-PageLabels.pdf
!filled-background.pdf
!ArabicCIDTrueType.pdf

BIN
test/pdfs/issue8707.pdf Normal file

Binary file not shown.

View File

@ -682,6 +682,13 @@
"link": false,
"type": "eq"
},
{ "id": "issue8707",
"file": "pdfs/issue8707.pdf",
"md5": "d3dc670adde9ec9fb82c974027033029",
"rounds": 1,
"link": false,
"type": "eq"
},
{ "id": "issue5509",
"file": "pdfs/issue5509.pdf",
"md5": "1975ef8db7355b1d691bc79d0749574b",