diff --git a/src/fonts.js b/src/fonts.js index 1a4366c19..fa2c0a7f1 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -1765,7 +1765,7 @@ var Font = (function Font() { var hasShortCmap = !!cmapTable.hasShortCmap; var toUnicode = this.toUnicode; - if (toUnicode) { + if (toUnicode && toUnicode.length > 0) { // checking if cmap is just identity map var isIdentity = true; for (var i = 0, ii = glyphs.length; i < ii; i++) { @@ -1776,9 +1776,22 @@ var Font = (function Font() { } // if it is, replacing with meaningful toUnicode values if (isIdentity) { + var usedUnicodes = [], unassignedUnicodeItems = []; for (var i = 0, ii = glyphs.length; i < ii; i++) { - var unicode = toUnicode[i + 1] || i + 1; + var unicode = toUnicode[i + 1]; + if (!unicode || usedUnicodes[unicode]) { + unassignedUnicodeItems.push(i); + continue; + } glyphs[i].unicode = unicode; + usedUnicodes[unicode] = true; + } + var unusedUnicode = kCmapGlyphOffset; + for (var j = 0, jj = unassignedUnicodeItems.length; j < jj; j++) { + var i = unassignedUnicodeItems[j]; + while (usedUnicodes[unusedUnicode]) + unusedUnicode++; + glyphs[i].unicode = unusedUnicode++; } this.useToUnicode = true; } diff --git a/test/pdfs/lista_preliminar.pdf.link b/test/pdfs/lista_preliminar.pdf.link new file mode 100644 index 000000000..54102b3b1 --- /dev/null +++ b/test/pdfs/lista_preliminar.pdf.link @@ -0,0 +1 @@ +http://www.lfg.com.br/concursodebolsas/lista_preliminar_classificao.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index bd50068f7..0e6e1913c 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -311,5 +311,13 @@ "pageLimit": 5, "skipPages": [1], "type": "eq" + }, + { "id": "lista_preliminar", + "file": "pdfs/lista_preliminar.pdf", + "md5": "4eff251319eeb660ba8a7a5cfac7787d", + "rounds": 1, + "link": true, + "pageLimit": 3, + "type": "eq" } ]