Fallback to attempt to recover standard glyph names when amending the charCodeToGlyphId
with entries from the differences
array in type1FontGlyphMapping
(issue 7439)
Fixes 7439.
This commit is contained in:
parent
671f33a324
commit
7866109af9
@ -185,6 +185,25 @@ function getFontType(type, subtype) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Some bad PDF generators, e.g. Scribus PDF, include glyph names
|
||||||
|
// in a 'uniXXXX' format -- attempting to recover proper ones.
|
||||||
|
function recoverGlyphName(name, glyphsUnicodeMap) {
|
||||||
|
if (glyphsUnicodeMap[name] !== undefined) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
// The glyph name is non-standard, trying to recover.
|
||||||
|
var unicode = getUnicodeForGlyph(name, glyphsUnicodeMap);
|
||||||
|
if (unicode !== -1) {
|
||||||
|
for (var key in glyphsUnicodeMap) {
|
||||||
|
if (glyphsUnicodeMap[key] === unicode) {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
warn('Unable to recover a standard glyph name for: ' + name);
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
var Glyph = (function GlyphClosure() {
|
var Glyph = (function GlyphClosure() {
|
||||||
function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId,
|
function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId,
|
||||||
isSpace, isInFont) {
|
isSpace, isInFont) {
|
||||||
@ -2266,26 +2285,6 @@ var Font = (function FontClosure() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some bad PDF generators, e.g. Scribus PDF, include glyph names
|
|
||||||
// in a 'uniXXXX' format -- attempting to recover proper ones.
|
|
||||||
function recoverGlyphName(name, glyphsUnicodeMap) {
|
|
||||||
if (glyphsUnicodeMap[name] !== undefined) {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
// The glyph name is non-standard, trying to recover.
|
|
||||||
var unicode = getUnicodeForGlyph(name, glyphsUnicodeMap);
|
|
||||||
if (unicode !== -1) {
|
|
||||||
for (var key in glyphsUnicodeMap) {
|
|
||||||
if (glyphsUnicodeMap[key] === unicode) {
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
warn('Unable to recover a standard glyph name for: ' + name);
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (properties.type === 'CIDFontType2') {
|
if (properties.type === 'CIDFontType2') {
|
||||||
var cidToGidMap = properties.cidToGidMap || [];
|
var cidToGidMap = properties.cidToGidMap || [];
|
||||||
var isCidToGidMapEmpty = cidToGidMap.length === 0;
|
var isCidToGidMapEmpty = cidToGidMap.length === 0;
|
||||||
@ -2859,11 +2858,21 @@ function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Lastly, merge in the differences.
|
// Lastly, merge in the differences.
|
||||||
var differences = properties.differences;
|
var differences = properties.differences, glyphsUnicodeMap;
|
||||||
if (differences) {
|
if (differences) {
|
||||||
for (charCode in differences) {
|
for (charCode in differences) {
|
||||||
var glyphName = differences[charCode];
|
var glyphName = differences[charCode];
|
||||||
glyphId = glyphNames.indexOf(glyphName);
|
glyphId = glyphNames.indexOf(glyphName);
|
||||||
|
|
||||||
|
if (glyphId === -1) {
|
||||||
|
if (!glyphsUnicodeMap) {
|
||||||
|
glyphsUnicodeMap = getGlyphsUnicode();
|
||||||
|
}
|
||||||
|
var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
|
||||||
|
if (standardGlyphName !== glyphName) {
|
||||||
|
glyphId = glyphNames.indexOf(standardGlyphName);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (glyphId >= 0) {
|
if (glyphId >= 0) {
|
||||||
charCodeToGlyphId[charCode] = glyphId;
|
charCodeToGlyphId[charCode] = glyphId;
|
||||||
} else {
|
} else {
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -26,6 +26,7 @@
|
|||||||
!issue7115.pdf
|
!issue7115.pdf
|
||||||
!issue7200.pdf
|
!issue7200.pdf
|
||||||
!issue7229.pdf
|
!issue7229.pdf
|
||||||
|
!issue7439.pdf
|
||||||
!filled-background.pdf
|
!filled-background.pdf
|
||||||
!ArabicCIDTrueType.pdf
|
!ArabicCIDTrueType.pdf
|
||||||
!ThuluthFeatures.pdf
|
!ThuluthFeatures.pdf
|
||||||
|
BIN
test/pdfs/issue7439.pdf
Normal file
BIN
test/pdfs/issue7439.pdf
Normal file
Binary file not shown.
@ -1701,6 +1701,13 @@
|
|||||||
"link": false,
|
"link": false,
|
||||||
"type": "eq"
|
"type": "eq"
|
||||||
},
|
},
|
||||||
|
{ "id": "issue7439",
|
||||||
|
"file": "pdfs/issue7439.pdf",
|
||||||
|
"md5": "56682657990a894c66db26560d3039d7",
|
||||||
|
"rounds": 1,
|
||||||
|
"link": false,
|
||||||
|
"type": "eq"
|
||||||
|
},
|
||||||
{ "id": "bug867484",
|
{ "id": "bug867484",
|
||||||
"file": "pdfs/bug867484.pdf",
|
"file": "pdfs/bug867484.pdf",
|
||||||
"md5": "347af7b0ef7279b1a7f43b03bfda4548",
|
"md5": "347af7b0ef7279b1a7f43b03bfda4548",
|
||||||
|
Loading…
Reference in New Issue
Block a user