diff --git a/fonts.js b/fonts.js index 6488c073b..20f99932d 100755 --- a/fonts.js +++ b/fonts.js @@ -14,6 +14,14 @@ var kMaxWaitForFontFace = 1000; * fonts and their acronyms. */ var stdFontMap = { + 'ArialNarrow': 'Helvetica', + 'ArialNarrow_Bold': 'Helvetica-Bold', + 'ArialNarrow_BoldItalic': 'Helvetica-BoldOblique', + 'ArialNarrow_Italic': 'Helvetica-Oblique', + 'ArialBlack': 'Helvetica', + 'ArialBlack_Bold': 'Helvetica-Bold', + 'ArialBlack_BoldItalic': 'Helvetica-BoldOblique', + 'ArialBlack_Italic': 'Helvetica-Oblique', 'Arial': 'Helvetica', 'Arial_Bold': 'Helvetica-Bold', 'Arial_BoldItalic': 'Helvetica-BoldOblique', @@ -404,6 +412,12 @@ var Font = (function Font() { this.bold = (fontName.indexOf('Bold') != -1); this.italic = (fontName.indexOf('Oblique') != -1) || (fontName.indexOf('Italic') != -1); + + // Use 'name' instead of 'fontName' here because the original + // name ArialNarrow for example will be replaced by Helvetica. + this.narrow = (name.indexOf("Narrow") != -1) + this.black = (name.indexOf("Black") != -1) + this.loadedName = fontName.split('-')[0]; this.loading = false; return; diff --git a/pdf.js b/pdf.js index df8871e7f..ec3cb0d75 100644 --- a/pdf.js +++ b/pdf.js @@ -4417,9 +4417,7 @@ var PartialEvaluator = (function() { } var descriptor = xref.fetch(fd); - var fontName = fontDict.get('Name'); - if (!fontName) - fontName = xref.fetchIfRef(descriptor.get('FontName')); + var fontName = xref.fetchIfRef(descriptor.get('FontName')); assertWellFormed(IsName(fontName), 'invalid font name'); fontName = fontName.name.replace(/[\+,\-]/g, '_'); @@ -4805,7 +4803,9 @@ var CanvasGraphics = (function() { size = (size <= kRasterizerMin) ? size * kScalePrecision : size; - var bold = fontObj.bold ? 'bold' : 'normal'; + var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') + : (fontObj.bold ? 'bold' : 'normal'); + var italic = fontObj.italic ? 'italic' : 'normal'; var rule = italic + ' ' + bold + ' ' + size + 'px "' + name + '"'; this.ctx.font = rule; @@ -4841,8 +4841,6 @@ var CanvasGraphics = (function() { this.moveText(0, this.current.leading); }, showText: function(text) { - // TODO: apply charSpacing, wordSpacing, textHScale - var ctx = this.ctx; var current = this.current; @@ -4853,9 +4851,9 @@ var CanvasGraphics = (function() { ctx.translate(current.x, -1 * current.y); var scaleFactorX = 1, scaleFactorY = 1; - var font = this.current.font; + var font = current.font; if (font) { - if (this.current.fontSize <= kRasterizerMin) { + if (current.fontSize <= kRasterizerMin) { scaleFactorX = scaleFactorY = kScalePrecision; ctx.scale(1 / scaleFactorX, 1 / scaleFactorY); } @@ -4867,6 +4865,13 @@ var CanvasGraphics = (function() { var wordSpacing = current.wordSpacing; var textHScale = current.textHScale; + // This is a poor simulation for Arial Narrow while font-stretch + // is not implemented (bug 3512) + if (current.font.narrow) { + textHScale += 0.2; + charSpacing -= (0.09 * current.fontSize); + } + if (charSpacing != 0 || wordSpacing != 0 || textHScale != 1) { scaleFactorX *= textHScale; ctx.scale(1 / textHScale, 1);