]> git.parisson.com Git - pdf.js.git/commitdiff
Simulate Arial Black and Arial Narrow
authorVivien Nicolas <21@vingtetun.org>
Thu, 1 Sep 2011 02:06:33 +0000 (04:06 +0200)
committerVivien Nicolas <21@vingtetun.org>
Thu, 1 Sep 2011 02:06:33 +0000 (04:06 +0200)
fonts.js
pdf.js

index 6488c073baacab79ab1d0e3b77938f0eea33b96c..20f99932d2ff59809707b01fa313598eb2eab627 100755 (executable)
--- 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 df8871e7fce427f01580ac894dbdd44f33448347..ec3cb0d75d9faad326399f763b37fcc434cfaae1 100644 (file)
--- 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);