Author: jahewson
Date: Sun May  3 20:53:37 2015
New Revision: 1677483

URL: http://svn.apache.org/r1677483
Log:
PDFBOX-1900: Fix mapping of standard Symbol font

Modified:
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java?rev=1677483&r1=1677482&r2=1677483&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
 Sun May  3 20:53:37 2015
@@ -154,7 +154,7 @@ public final class ExternalFonts
                 Arrays.asList("TimesNewRomanPS-BoldItalicMT", 
"TimesNewRomanPS-BoldItalic",
                              "TimesNewRoman-BoldItalic", 
"LiberationSerif-BoldItalic",
                              "NimbusRomNo9L-MediItal"));
-        substitutes.put("Symbol", Arrays.asList("SymbolMT", "StandardSymL"));
+        substitutes.put("Symbol", Arrays.asList("Symbol", "SymbolMT", 
"StandardSymL"));
         substitutes.put("ZapfDingbats", Arrays.asList("ZapfDingbatsITC", 
"Dingbats", "MS-Gothic"));
 
         // extra substitute mechanism for CJK CIDFonts when all we know is the 
ROS

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java?rev=1677483&r1=1677482&r2=1677483&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 Sun May  3 20:53:37 2015
@@ -145,22 +145,25 @@ public abstract class PDSimpleFont exten
             this.encoding = StandardEncoding.INSTANCE;
         }
 
+        // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol"
+        String standard14Name = Standard14Fonts.getMappedFontName(getName());
+        
         // TTFs may have null encoding, but if it's standard 14 then we know 
it's Standard Encoding
         if (this.encoding == null && isStandard14() &&
-                !getName().equals("Symbol") &&
-                !getName().equals("ZapfDingbats"))
+                !standard14Name.equals("Symbol") &&
+                !standard14Name.equals("ZapfDingbats"))
         {
             this.encoding = StandardEncoding.INSTANCE;
         }
-        // todo: what about Symbol and ZapfDingbats?
 
         // assign the glyph list based on the font
-        if ("ZapfDingbats".equals(getName()))
+        if ("ZapfDingbats".equals(standard14Name))
         {
             glyphList = GlyphList.getZapfDingbats();
         }
         else
         {
+            // StandardEncoding and Symbol are in the AGL
             glyphList = GlyphList.getAdobeGlyphList();
         }
     }
@@ -245,7 +248,8 @@ public abstract class PDSimpleFont exten
         }
         else if (isStandard14())
         {
-            return getName().equals("Symbol") || 
getName().equals("ZapfDingbats");
+            String mappedName = Standard14Fonts.getMappedFontName(getName());
+            return mappedName.equals("Symbol") || 
mappedName.equals("ZapfDingbats");
         }
         else
         {
@@ -378,11 +382,7 @@ public abstract class PDSimpleFont exten
         return false;
     }
 
-    /**
-     * Returns the glyph width from the AFM if this is a Standard 14 font.
-     * @param code character code
-     * @return width in 1/1000 text space
-     */
+    @Override
     protected final float getStandard14Width(int code)
     {
         if (getStandard14AFM() != null)

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1677483&r1=1677482&r2=1677483&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
 Sun May  3 20:53:37 2015
@@ -38,6 +38,7 @@ import org.apache.pdfbox.pdmodel.font.en
 import org.apache.pdfbox.pdmodel.font.encoding.MacOSRomanEncoding;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding;
 
 /**
  * TrueType font.
@@ -171,9 +172,17 @@ public class PDTrueTypeFont extends PDSi
     @Override
     protected Encoding readEncodingFromFont() throws IOException
     {
-        // for symbolic fonts the (3, 0) (Windows, Symbol) cmap is the font's 
built-in encoding
-        // but this is handled by codeToGID
-        return null;
+        if (getStandard14AFM() != null)
+        {
+            // read from AFM
+            return new Type1Encoding(getStandard14AFM());
+        }
+        else
+        {
+            // for symbolic fonts the (3, 0) (Windows, Symbol) cmap is the 
font's built-in encoding
+            // but this is handled by codeToGID
+            return null;
+        }
     }
 
     /**

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java?rev=1677483&r1=1677482&r2=1677483&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
 Sun May  3 20:53:37 2015
@@ -178,7 +178,15 @@ public class PDType1CFont extends PDSimp
     @Override
     protected Encoding readEncodingFromFont() throws IOException
     {
-        return Type1Encoding.fromFontBox(type1Equivalent.getEncoding());
+        if (getStandard14AFM() != null)
+        {
+            // read from AFM
+            return new Type1Encoding(getStandard14AFM());
+        }
+        else
+        {
+            return Type1Encoding.fromFontBox(type1Equivalent.getEncoding());
+        }
     }
 
     @Override

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java?rev=1677483&r1=1677482&r2=1677483&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
 Sun May  3 20:53:37 2015
@@ -329,14 +329,14 @@ public class PDType1Font extends PDSimpl
     public float getWidthFromFont(int code) throws IOException
     {
         String name = codeToName(code);
-        if (getStandard14AFM() != null)
-        {
-            return getStandard14Width(code);
-        }
-        else
+
+        // width of .notdef is ignored for substitutes, see PDFBOX-1900
+        if (!isEmbedded && name.equals(".notdef"))
         {
-            return type1Equivalent.getWidth(name);
+            return 250;
         }
+
+        return type1Equivalent.getWidth(name);
     }
 
     @Override


Reply via email to