diff --git a/src/core/cff_parser.js b/src/core/cff_parser.js index c92f848db..6a47d16be 100644 --- a/src/core/cff_parser.js +++ b/src/core/cff_parser.js @@ -539,6 +539,16 @@ var CFFParser = (function CFFParserClosure() { if (validationCommand) { if (validationCommand.stem) { state.hints += stackSize >> 1; + if (value === 3 || value === 23) { + // vstem or vstemhm. + state.hasVStems = true; + } else if (state.hasVStems && (value === 1 || value === 18)) { + // Some browsers don't draw glyphs that specify vstems before + // hstems. As a workaround, replace hstem (1) and hstemhm (18) + // with a pointless vstem (3) or vstemhm (23). + warn('CFF stem hints are in wrong order'); + data[j - 1] = (value === 1) ? 3 : 23; + } } if ('min' in validationCommand) { if (!state.undefStack && stackSize < validationCommand.min) { @@ -599,6 +609,7 @@ var CFFParser = (function CFFParserClosure() { firstStackClearing: true, seac: null, width: null, + hasVStems: false, }; var valid = true; var localSubrToUse = null; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 709e141f2..152b463af 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -264,6 +264,7 @@ !annotation-tx3.pdf !coons-allflags-withfunction.pdf !tensor-allflags-withfunction.pdf +!issue10084_reduced.pdf !issue4246.pdf !issue4461.pdf !issue4573.pdf diff --git a/test/pdfs/issue10084_reduced.pdf b/test/pdfs/issue10084_reduced.pdf new file mode 100644 index 000000000..220a645bf Binary files /dev/null and b/test/pdfs/issue10084_reduced.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 31000b690..714ffed8c 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -2750,6 +2750,12 @@ "type": "text", "about": "Note that the text layer seems to be off to the right." }, + { "id": "issue10084", + "file": "pdfs/issue10084_reduced.pdf", + "md5": "ae37cf36f2e319688c608e4086836824", + "rounds": 1, + "type": "eq" + }, { "id": "issue4890", "file": "pdfs/issue4890.pdf", "md5": "1666feb4cd26318c2bdbea6a175dce87",