]> git.parisson.com Git - pdf.js.git/commitdiff
Fix lying sfnt header for some CFF font that pretend to be TrueType and fix unknown...
authorVivien Nicolas <21@vingtetun.org>
Fri, 26 Aug 2011 12:21:25 +0000 (14:21 +0200)
committerVivien Nicolas <21@vingtetun.org>
Fri, 26 Aug 2011 12:21:25 +0000 (14:21 +0200)
fonts.js
pdf.js

index b81f4a2ed16c951a670d301575dad4f9e3432dfb..43c06276144d7a45588e1f01fcdbb676b3e9ac87 100755 (executable)
--- a/fonts.js
+++ b/fonts.js
@@ -822,7 +822,7 @@ var Font = (function Font() {
 
       function readOpenTypeHeader(ttf) {
         return {
-          version: ttf.getBytes(4),
+          version: arrayToString(ttf.getBytes(4)),
           numTables: int16(ttf.getBytes(2)),
           searchRange: int16(ttf.getBytes(2)),
           entrySelector: int16(ttf.getBytes(2)),
@@ -983,7 +983,7 @@ var Font = (function Font() {
 
       // The new numbers of tables will be the last one plus the num
       // of missing tables
-      createOpenTypeHeader('\x00\x01\x00\x00', ttf, numTables);
+      createOpenTypeHeader(header.version, ttf, numTables);
 
       if (requiredTables.indexOf('OS/2') != -1) {
         tables.push({
@@ -1829,7 +1829,7 @@ var CFF = function(name, file, properties) {
   for (var info in data.properties)
     properties[info] = data.properties[info];
 
-  var charstrings = this.getOrderedCharStrings(data.charstrings);
+  var charstrings = this.getOrderedCharStrings(data.charstrings, properties);
   var type2Charstrings = this.getType2Charstrings(charstrings);
   var subrs = this.getType2Subrs(data.subrs);
 
@@ -1893,14 +1893,14 @@ CFF.prototype = {
     return null;
   },
 
-  getOrderedCharStrings: function cff_getOrderedCharStrings(glyphs) {
+  getOrderedCharStrings: function cff_getOrderedCharStrings(glyphs, properties) {
     var charstrings = [];
     var missings = [];
 
     for (var i = 0; i < glyphs.length; i++) {
       var glyph = glyphs[i];
-      var unicode = GlyphsUnicode[glyph.glyph];
-      if (!unicode) {
+      var unicode = properties.glyphs[glyph.glyph];
+      if ('undefined' == typeof(unicode)) {
         if (glyph.glyph != '.notdef')
           missings.push(glyph.glyph);
       } else {
diff --git a/pdf.js b/pdf.js
index d99ce5ff30a2cc90a7d17f3b532fab75c9f35d6e..74c6925a938b2b62210848e701b4538add454534 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -4392,7 +4392,9 @@ var PartialEvaluator = (function() {
 
       var descriptor = xref.fetch(fd);
 
-      var fontName = xref.fetchIfRef(descriptor.get('FontName'));
+      var fontName = fontDict.get('Name');
+      if (!fontName)
+        fontName = xref.fetchIfRef(descriptor.get('FontName'));;
       assertWellFormed(IsName(fontName), 'invalid font name');
       fontName = fontName.name.replace(/[\+,\-]/g, '_');
 
@@ -4423,11 +4425,16 @@ var PartialEvaluator = (function() {
           glyphWidths[unicode++] = widths[i];
       }
 
+      var glyphsMap = {};
+      for (var p in glyphMap)
+        glyphsMap[glyphMap[p]] = encodingMap[p];
+
       var properties = {
         type: subType.name,
         subtype: fileType,
         widths: glyphWidths,
         encoding: encodingMap,
+        glyphs: glyphsMap,
         builtInEncoding: builtInEncoding,
         charset: charset,
         firstChar: fontDict.get('FirstChar'),