Browse Source

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.
Jonas Jenwald 10 years ago
parent
commit
01e6565dd4
  1. 21
      src/core/fonts.js
  2. 2
      test/pdfs/.gitignore
  3. BIN
      test/pdfs/bug893730.pdf
  4. BIN
      test/pdfs/issue5704.pdf
  5. 14
      test/test_manifest.json

21
src/core/fonts.js

@ -4070,11 +4070,21 @@ var Font = (function FontClosure() { @@ -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') {
var cidToGidMap = properties.cidToGidMap || [];
var isCidToGidMapEmpty = cidToGidMap.length === 0;
var toUnicode = properties.toUnicode;
properties.cMap.forEach(function(charCode, cid) {
assert(cid <= 0xffff, 'Max size of CID is 65,535');
@ -4086,7 +4096,7 @@ var Font = (function FontClosure() { @@ -4086,7 +4096,7 @@ var Font = (function FontClosure() {
}
if (glyphId >= 0 && glyphId < numGlyphs &&
(!missingGlyphs[glyphId] || toUnicode.has(charCode))) {
hasGlyph(glyphId, charCode)) {
charCodeToGlyphId[charCode] = glyphId;
}
});
@ -4146,7 +4156,8 @@ var Font = (function FontClosure() { @@ -4146,7 +4156,8 @@ var Font = (function FontClosure() {
var found = false;
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;
found = true;
break;
@ -4156,7 +4167,7 @@ var Font = (function FontClosure() { @@ -4156,7 +4167,7 @@ var Font = (function FontClosure() {
// Try to map using the post table. There are currently no known
// pdfs that this fixes.
var glyphId = properties.glyphNames.indexOf(glyphName);
if (glyphId > 0) {
if (glyphId > 0 && hasGlyph(glyphId, -1)) {
charCodeToGlyphId[charCode] = glyphId;
}
}

2
test/pdfs/.gitignore vendored

@ -59,6 +59,8 @@ @@ -59,6 +59,8 @@
!zerowidthline.pdf
!bug868745.pdf
!mmtype1.pdf
!issue5704.pdf
!bug893730.pdf
!bug864847.pdf
!issue1002.pdf
!issue925.pdf

BIN
test/pdfs/bug893730.pdf

Binary file not shown.

BIN
test/pdfs/issue5704.pdf

Binary file not shown.

14
test/test_manifest.json

@ -1022,6 +1022,20 @@ @@ -1022,6 +1022,20 @@
"link": true,
"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",
"file": "pdfs/pdfkit_compressed.pdf",
"md5": "ffe9c571d0a1572e234253e6c7cdee6c",

Loading…
Cancel
Save