Try to skip mapping of missing TrueType glyphs
Also don't skip mapping of glyphs which are empty, if the corresponding charCode is included in toUnicode.
This commit is contained in:
		
							parent
							
								
									8174da61fb
								
							
						
					
					
						commit
						01e6565dd4
					
				@ -4070,11 +4070,21 @@ var Font = (function FontClosure() {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var charCodeToGlyphId = [], charCode;
 | 
					      var charCodeToGlyphId = [], charCode, toUnicode = properties.toUnicode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      function hasGlyph(glyphId, charCode) {
 | 
				
			||||||
 | 
					        if (!missingGlyphs[glyphId]) {
 | 
				
			||||||
 | 
					          return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (charCode >= 0 && toUnicode.has(charCode)) {
 | 
				
			||||||
 | 
					          return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      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;
 | 
				
			||||||
        var toUnicode = properties.toUnicode;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        properties.cMap.forEach(function(charCode, cid) {
 | 
					        properties.cMap.forEach(function(charCode, cid) {
 | 
				
			||||||
          assert(cid <= 0xffff, 'Max size of CID is 65,535');
 | 
					          assert(cid <= 0xffff, 'Max size of CID is 65,535');
 | 
				
			||||||
@ -4086,7 +4096,7 @@ var Font = (function FontClosure() {
 | 
				
			|||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if (glyphId >= 0 && glyphId < numGlyphs &&
 | 
					          if (glyphId >= 0 && glyphId < numGlyphs &&
 | 
				
			||||||
              (!missingGlyphs[glyphId] || toUnicode.has(charCode))) {
 | 
					              hasGlyph(glyphId, charCode)) {
 | 
				
			||||||
            charCodeToGlyphId[charCode] = glyphId;
 | 
					            charCodeToGlyphId[charCode] = glyphId;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
@ -4146,7 +4156,8 @@ var Font = (function FontClosure() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var found = false;
 | 
					            var found = false;
 | 
				
			||||||
            for (i = 0; i < cmapMappingsLength; ++i) {
 | 
					            for (i = 0; i < cmapMappingsLength; ++i) {
 | 
				
			||||||
              if (cmapMappings[i].charCode === unicodeOrCharCode) {
 | 
					              if (cmapMappings[i].charCode === unicodeOrCharCode &&
 | 
				
			||||||
 | 
					                  hasGlyph(cmapMappings[i].glyphId, unicodeOrCharCode)) {
 | 
				
			||||||
                charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
 | 
					                charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
 | 
				
			||||||
                found = true;
 | 
					                found = true;
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
@ -4156,7 +4167,7 @@ var Font = (function FontClosure() {
 | 
				
			|||||||
              // Try to map using the post table. There are currently no known
 | 
					              // Try to map using the post table. There are currently no known
 | 
				
			||||||
              // pdfs that this fixes.
 | 
					              // pdfs that this fixes.
 | 
				
			||||||
              var glyphId = properties.glyphNames.indexOf(glyphName);
 | 
					              var glyphId = properties.glyphNames.indexOf(glyphName);
 | 
				
			||||||
              if (glyphId > 0) {
 | 
					              if (glyphId > 0 && hasGlyph(glyphId, -1)) {
 | 
				
			||||||
                charCodeToGlyphId[charCode] = glyphId;
 | 
					                charCodeToGlyphId[charCode] = glyphId;
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -59,6 +59,8 @@
 | 
				
			|||||||
!zerowidthline.pdf
 | 
					!zerowidthline.pdf
 | 
				
			||||||
!bug868745.pdf
 | 
					!bug868745.pdf
 | 
				
			||||||
!mmtype1.pdf
 | 
					!mmtype1.pdf
 | 
				
			||||||
 | 
					!issue5704.pdf
 | 
				
			||||||
 | 
					!bug893730.pdf
 | 
				
			||||||
!bug864847.pdf
 | 
					!bug864847.pdf
 | 
				
			||||||
!issue1002.pdf
 | 
					!issue1002.pdf
 | 
				
			||||||
!issue925.pdf
 | 
					!issue925.pdf
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								test/pdfs/bug893730.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/pdfs/bug893730.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								test/pdfs/issue5704.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/pdfs/issue5704.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@ -1022,6 +1022,20 @@
 | 
				
			|||||||
      "link": true,
 | 
					      "link": true,
 | 
				
			||||||
      "type": "eq"
 | 
					      "type": "eq"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {  "id": "issue5704",
 | 
				
			||||||
 | 
					       "file": "pdfs/issue5704.pdf",
 | 
				
			||||||
 | 
					       "md5": "6e0b62585feef24dff2d7e7687cd8128",
 | 
				
			||||||
 | 
					       "rounds": 1,
 | 
				
			||||||
 | 
					       "link": false,
 | 
				
			||||||
 | 
					       "type": "eq"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {  "id": "bug893730",
 | 
				
			||||||
 | 
					       "file": "pdfs/bug893730.pdf",
 | 
				
			||||||
 | 
					       "md5": "2587379fb1b3bbff89c14f0863e78383",
 | 
				
			||||||
 | 
					       "rounds": 1,
 | 
				
			||||||
 | 
					       "link": false,
 | 
				
			||||||
 | 
					       "type": "eq"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    {  "id": "pdfkit_compressed",
 | 
					    {  "id": "pdfkit_compressed",
 | 
				
			||||||
      "file": "pdfs/pdfkit_compressed.pdf",
 | 
					      "file": "pdfs/pdfkit_compressed.pdf",
 | 
				
			||||||
      "md5": "ffe9c571d0a1572e234253e6c7cdee6c",
 | 
					      "md5": "ffe9c571d0a1572e234253e6c7cdee6c",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user