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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user