]> git.parisson.com Git - pdf.js.git/commitdiff
Fixing base encoding presence detection; character width scale
authornotmasteryet <async.processingjs@yahoo.com>
Wed, 30 Nov 2011 04:06:00 +0000 (22:06 -0600)
committernotmasteryet <async.processingjs@yahoo.com>
Wed, 30 Nov 2011 04:06:00 +0000 (22:06 -0600)
src/canvas.js
src/evaluator.js
src/fonts.js
src/glyphlist.js

index 58735798081165bc076057b06eb21c81ad3055e7..f16313db21f6ee6de19287518a1c55fc4670d2c2 100644 (file)
@@ -537,13 +537,14 @@ var CanvasGraphics = (function canvasGraphics() {
       var charSpacing = current.charSpacing;
       var wordSpacing = current.wordSpacing;
       var textHScale = current.textHScale;
+      var fontMatrix = font.fontMatrix || IDENTITY_MATRIX;
+      var textHScale2 = textHScale * fontMatrix[0];
       var glyphsLength = glyphs.length;
       if (font.coded) {
         ctx.save();
         ctx.transform.apply(ctx, current.textMatrix);
         ctx.translate(current.x, current.y);
 
-        var fontMatrix = font.fontMatrix || IDENTITY_MATRIX;
         ctx.scale(1 / textHScale, 1);
         for (var i = 0; i < glyphsLength; ++i) {
 
@@ -564,7 +565,7 @@ var CanvasGraphics = (function canvasGraphics() {
           var width = transformed[0] * fontSize + charSpacing;
 
           ctx.translate(width, 0);
-          current.x += width;
+          current.x += width * textHScale2;
 
         }
         ctx.restore();
@@ -573,7 +574,7 @@ var CanvasGraphics = (function canvasGraphics() {
         ctx.transform.apply(ctx, current.textMatrix);
         ctx.scale(1, -1);
         ctx.translate(current.x, -1 * current.y);
-        ctx.transform.apply(ctx, font.fontMatrix || IDENTITY_MATRIX);
+        ctx.transform.apply(ctx, fontMatrix);
 
         ctx.scale(1 / textHScale, 1);
 
@@ -592,7 +593,7 @@ var CanvasGraphics = (function canvasGraphics() {
 
           // TODO actual characters can be extracted from the glyph.unicode
         }
-        current.x += width;
+        current.x += width * textHScale2;
 
         ctx.restore();
       }
@@ -602,12 +603,13 @@ var CanvasGraphics = (function canvasGraphics() {
       var ctx = this.ctx;
       var current = this.current;
       var fontSize = current.fontSize;
-      var textHScale = current.textHScale;
+      var textHScale2 = current.textHScale *
+        (current.font.fontMatrix || IDENTITY_MATRIX)[0];
       var arrLength = arr.length;
       for (var i = 0; i < arrLength; ++i) {
         var e = arr[i];
         if (isNum(e)) {
-          current.x -= e * 0.001 * fontSize * textHScale;
+          current.x -= e * 0.001 * fontSize * textHScale2;
         } else if (isString(e)) {
           this.showText(e);
         } else {
index b6ef4ddfa2256b91787f6b6f1b0933c1fc56e1f3..954c3bec3a6c466ad43fe3d8b9ce83d7880af234 100644 (file)
@@ -498,6 +498,8 @@ var PartialEvaluator = (function partialEvaluator() {
           var baseName = encoding.get('BaseEncoding');
           if (baseName)
             baseEncoding = Encodings[baseName.name];
+          else
+            hasEncoding = false; // base encoding was not provided
 
           // Load the differences between the base and original
           if (encoding.has('Differences')) {
index 9aabb3f5735a20afd156ce2c8989e3e15227ae13..2e95a7c9465ebb0c59ba8f0da7ad525125aebf93 100644 (file)
@@ -764,6 +764,7 @@ var Font = (function Font() {
     this.hasEncoding = properties.hasEncoding;
 
     this.fontMatrix = properties.fontMatrix;
+    this.widthMultiplier = 1.0;
     if (properties.type == 'Type3')
       return;
 
@@ -826,6 +827,8 @@ var Font = (function Font() {
 
     this.data = data;
     this.fontMatrix = properties.fontMatrix;
+    this.widthMultiplier = !properties.fontMatrix ? 1.0 :
+      1.0 / properties.fontMatrix[0];
     this.encoding = properties.baseEncoding;
     this.hasShortCmap = properties.hasShortCmap;
     this.loadedName = getUniqueName();
@@ -2131,10 +2134,12 @@ var Font = (function Font() {
       if (typeof unicodeChars === 'number')
         unicodeChars = String.fromCharCode(unicodeChars);
 
+      width = (isNum(width) ? width : this.defaultWidth) * this.widthMultiplier;
+
       return {
         fontChar: String.fromCharCode(unicode),
         unicode: unicodeChars,
-        width: isNum(width) ? width : this.defaultWidth,
+        width: width,
         codeIRQueue: codeIRQueue
       };
     },
index 5691f85461ea9dfb2aa64c485bfc20b92f87f870..01b94442a290a27a354150882f913cf3def90ca8 100644 (file)
@@ -4287,6 +4287,7 @@ var GlyphsUnicode = {
   zretroflexhook: 0x0290,
   zstroke: 0x01B6,
   zuhiragana: 0x305A,
-  zukatakana: 0x30BA
+  zukatakana: 0x30BA,
+  '.notdef': 0x0000
 };