mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
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
4 changed files with 38 additions and 21 deletions
|
@ -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() {
|
||||
function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId,
|
||||
isSpace, isInFont) {
|
||||
|
@ -2266,26 +2285,6 @@ var Font = (function FontClosure() {
|
|||
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') {
|
||||
var cidToGidMap = properties.cidToGidMap || [];
|
||||
var isCidToGidMapEmpty = cidToGidMap.length === 0;
|
||||
|
@ -2859,11 +2858,21 @@ function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
|
|||
}
|
||||
|
||||
// Lastly, merge in the differences.
|
||||
var differences = properties.differences;
|
||||
var differences = properties.differences, glyphsUnicodeMap;
|
||||
if (differences) {
|
||||
for (charCode in differences) {
|
||||
var glyphName = differences[charCode];
|
||||
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) {
|
||||
charCodeToGlyphId[charCode] = glyphId;
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue