diff --git a/src/core/evaluator.js b/src/core/evaluator.js index ff6699cf8..d7bccc401 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -16,8 +16,8 @@ import { AbortException, assert, CMapCompressionType, createPromiseCapability, FONT_IDENTITY_MATRIX, FormatError, getLookupTableFactory, IDENTITY_MATRIX, - info, isNum, isString, NativeImageDecoding, OPS, TextRenderingMode, - UNSUPPORTED_FEATURES, Util, warn + info, isNum, isString, NativeImageDecoding, OPS, stringToPDFString, + TextRenderingMode, UNSUPPORTED_FEATURES, Util, warn } from '../shared/util'; import { CMapFactory, IdentityCMap } from './cmap'; import { DecodeStream, Stream } from './stream'; @@ -1871,8 +1871,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { var cidSystemInfo = dict.get('CIDSystemInfo'); if (isDict(cidSystemInfo)) { properties.cidSystemInfo = { - registry: cidSystemInfo.get('Registry'), - ordering: cidSystemInfo.get('Ordering'), + registry: stringToPDFString(cidSystemInfo.get('Registry')), + ordering: stringToPDFString(cidSystemInfo.get('Ordering')), supplement: cidSystemInfo.get('Supplement'), }; } diff --git a/src/core/fonts.js b/src/core/fonts.js index 168444693..aff4ac513 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -35,6 +35,7 @@ import { getUnicodeForGlyph, getUnicodeRangeFor, mapSpecialUnicodeValues } from './unicode'; import { FontRendererFactory } from './font_renderer'; +import { IdentityCMap } from './cmap'; import { Stream } from './stream'; import { Type1Parser } from './type1_parser'; @@ -2308,9 +2309,11 @@ var Font = (function FontClosure() { var isTrueType = !tables['CFF ']; if (!isTrueType) { - // OpenType font (skip composite fonts with non-default CID to GID map). - if ((header.version === 'OTTO' && - !(properties.composite && properties.cidToGidMap)) || + const isComposite = properties.composite && + ((properties.cidToGidMap || []).length > 0 || + !(properties.cMap instanceof IdentityCMap)); + // OpenType font (skip composite fonts with non-default glyph mapping). + if ((header.version === 'OTTO' && !isComposite) || !tables['head'] || !tables['hhea'] || !tables['maxp'] || !tables['post']) { // No major tables: throwing everything at `CFFFont`. diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index bd38ac166..cd4cc8b70 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -70,6 +70,7 @@ !issue9291.pdf !issue9418.pdf !issue9458.pdf +!issue9915_reduced.pdf !bad-PageLabels.pdf !decodeACSuccessive.pdf !filled-background.pdf diff --git a/test/pdfs/issue9915_reduced.pdf b/test/pdfs/issue9915_reduced.pdf new file mode 100644 index 000000000..f515595a9 Binary files /dev/null and b/test/pdfs/issue9915_reduced.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 0cd02a1a8..feb2f04c2 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1339,6 +1339,13 @@ "link": false, "type": "eq" }, + { "id": "issue9915", + "file": "pdfs/issue9915_reduced.pdf", + "md5": "c56dabe5066a6c821901920e09dffe00", + "rounds": 1, + "link": false, + "type": "eq" + }, { "id": "issue8570", "file": "pdfs/issue8570.pdf", "md5": "0355731adb72df233eaa10464dcc8c51",