From a74d19262ae51b416ae36559bc7b9dc37383025f Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Mon, 17 May 2021 16:52:34 +0200 Subject: [PATCH] XFA - Don't move glyphes in private area with non-truetype fonts - it has been done in PR #13146 but only for truetype fonts. --- src/core/fonts.js | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/core/fonts.js b/src/core/fonts.js index b640f4935..f036be549 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -2667,12 +2667,20 @@ class Font { glyphZeroId = font.numGlyphs - 1; } const mapping = font.getGlyphMapping(properties); - const newMapping = adjustMapping( - mapping, - font.hasGlyphId.bind(font), - glyphZeroId - ); - this.toFontChar = newMapping.toFontChar; + let newMapping = null; + let newCharCodeToGlyphId = mapping; + + // When `cssFontInfo` is set, the font is used to render text in the HTML + // view (e.g. with Xfa) so nothing must be moved in the private use area. + if (!properties.cssFontInfo) { + newMapping = adjustMapping( + mapping, + font.hasGlyphId.bind(font), + glyphZeroId + ); + this.toFontChar = newMapping.toFontChar; + newCharCodeToGlyphId = newMapping.charCodeToGlyphId; + } const numGlyphs = font.numGlyphs; function getCharCodes(charCodeToGlyphId, glyphId) { @@ -2700,7 +2708,7 @@ class Font { } const seacs = font.seacs; - if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { + if (newMapping && SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { const matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX; const charset = font.getCharset(); const seacMap = Object.create(null); @@ -2754,15 +2762,9 @@ class Font { // PostScript Font Program builder.addTable("CFF ", font.data); // OS/2 and Windows Specific metrics - builder.addTable( - "OS/2", - createOS2Table(properties, newMapping.charCodeToGlyphId) - ); + builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId)); // Character to glyphs mapping - builder.addTable( - "cmap", - createCmapTable(newMapping.charCodeToGlyphId, numGlyphs) - ); + builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, numGlyphs)); // Font header builder.addTable( "head",