]> git.parisson.com Git - pdf.js.git/commitdiff
Removes the CID data from the CFF font
authorYury Delendik <ydelendik@mozilla.com>
Fri, 18 May 2012 21:51:55 +0000 (16:51 -0500)
committerYury Delendik <ydelendik@mozilla.com>
Fri, 18 May 2012 21:51:55 +0000 (16:51 -0500)
src/fonts.js

index 22037e7245bebbcfc1c723c0c88919ab7272d9b5..d235881df11bc0ae8df1af301a331336517dca2b 100644 (file)
@@ -3477,7 +3477,7 @@ var CFFFont = (function CFFFontClosure() {
     this.properties = properties;
 
     var parser = new CFFParser(file, properties);
-    var cff = parser.parse();
+    var cff = parser.parse(true);
     var compiler = new CFFCompiler(cff);
     this.readExtra(cff);
     try {
@@ -3568,7 +3568,7 @@ var CFFParser = (function CFFParserClosure() {
     this.properties = properties;
   }
   CFFParser.prototype = {
-    parse: function CFFParser_parse() {
+    parse: function CFFParser_parse(normalizeCIDData) {
       var properties = this.properties;
       var cff = new CFF();
       this.cff = cff;
@@ -3623,6 +3623,21 @@ var CFFParser = (function CFFParserClosure() {
       cff.charset = charset;
       cff.encoding = encoding;
 
+      if (!cff.isCIDFont || !normalizeCIDData)
+        return cff;
+
+      // DirectWrite does not like CID fonts data. Trying to convert/flatten
+      // the font data and remove CID properties.
+      if (cff.fdArray.length !== 1)
+        error('Unable to normalize CID font in CFF data');
+
+      var fontDict = cff.fdArray[0];
+      fontDict.setByKey(17, topDict.getByName('CharStrings'));
+      cff.topDict = fontDict;
+      cff.isCIDFont = false;
+      delete cff.fdArray;
+      delete cff.fdSelect;
+
       return cff;
     },
     parseHeader: function CFFParser_parseHeader() {