diff --git a/src/fonts.js b/src/fonts.js index fcec676cb..8609ae608 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -1765,7 +1765,7 @@ var Font = (function FontClosure() { 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 FontClosure() { } // 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 || unicode in usedUnicodes) { + 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 (unusedUnicode in usedUnicodes) + unusedUnicode++; + glyphs[i].unicode = unusedUnicode++; } this.useToUnicode = true; } diff --git a/test/driver.js b/test/driver.js index 2467b57a3..64fceee90 100644 --- a/test/driver.js +++ b/test/driver.js @@ -139,6 +139,11 @@ function nextPage(task, loadError) { if (task.skipPages && task.skipPages.indexOf(task.pageNum) >= 0) { log(' skipping page ' + task.pageNum + '/' + task.pdfDoc.numPages + '... '); + // empty the canvas + canvas.width = 1; + canvas.height = 1; + clear(canvas.getContext('2d')); + snapshotCurrentPage(task, ''); return; } 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 5cf266c63..4d55ac0f7 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -332,5 +332,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" } ]