From cc5bc1872872098b510ad1a6ccdf485a77be3352 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 6 Nov 2015 14:47:10 -0600 Subject: [PATCH] Fixes incorrect PDF file font metrics. --- src/core/fonts.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/core/fonts.js b/src/core/fonts.js index cf1ea6470..cd9c34f46 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -4152,6 +4152,20 @@ var Font = (function FontClosure() { tables.hhea.data[11] = 0xFF; } + // Extract some more font properties from the OpenType head and + // hhea tables; yMin and descent value are always negative. + var metricsOverride = { + unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), + yMax: int16(tables.head.data[42], tables.head.data[43]), + yMin: int16(tables.head.data[38], tables.head.data[39]) - 0x10000, + ascent: int16(tables.hhea.data[4], tables.hhea.data[5]), + descent: int16(tables.hhea.data[6], tables.hhea.data[7]) - 0x10000 + }; + + // PDF FontDescriptor metrics lie -- using data from actual font. + this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; + this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; + // The 'post' table has glyphs names. if (tables.post) { var valid = readPostScriptTable(tables.post, properties, numGlyphs); @@ -4318,20 +4332,10 @@ var Font = (function FontClosure() { }; if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) { - // extract some more font properties from the OpenType head and - // hhea tables; yMin and descent value are always negative - var override = { - unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), - yMax: int16(tables.head.data[42], tables.head.data[43]), - yMin: int16(tables.head.data[38], tables.head.data[39]) - 0x10000, - ascent: int16(tables.hhea.data[4], tables.hhea.data[5]), - descent: int16(tables.hhea.data[6], tables.hhea.data[7]) - 0x10000 - }; - tables['OS/2'] = { tag: 'OS/2', data: createOS2Table(properties, newMapping.charCodeToGlyphId, - override) + metricsOverride) }; }