Browse Source

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.
Brendan Dahl 8 years ago
parent
commit
0bef50d56d
  1. 15
      src/core/fonts.js
  2. 1
      test/pdfs/.gitignore
  3. BIN
      test/pdfs/issue8707.pdf
  4. 7
      test/test_manifest.json

15
src/core/fonts.js

@ -1353,6 +1353,13 @@ var Font = (function FontClosure() { @@ -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() { @@ -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.

1
test/pdfs/.gitignore vendored

@ -56,6 +56,7 @@ @@ -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

Binary file not shown.

7
test/test_manifest.json

@ -682,6 +682,13 @@ @@ -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",

Loading…
Cancel
Save