Author: jahewson
Date: Tue Aug 26 21:18:57 2014
New Revision: 1620737

URL: http://svn.apache.org/r1620737
Log:
PDFBOX-2262: Use predefined symbolic flags for standard 14 fonts

Modified:
    
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java
    
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
    
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
    
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java

Modified: 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java?rev=1620737&r1=1620736&r2=1620737&view=diff
==============================================================================
--- 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java
 (original)
+++ 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java
 Tue Aug 26 21:18:57 2014
@@ -60,7 +60,7 @@ public class DictionaryEncoding extends 
      *
      * @param fontEncoding The encoding dictionary.
      */
-    public DictionaryEncoding(COSDictionary fontEncoding, boolean isSymbolic, 
Encoding builtIn)
+    public DictionaryEncoding(COSDictionary fontEncoding, boolean 
isNonSymbolic, Encoding builtIn)
     {
         encoding = fontEncoding;
 
@@ -71,7 +71,7 @@ public class DictionaryEncoding extends 
             baseEncoding = Encoding.getInstance(name);
             this.baseEncoding = name.getName();
         }
-        else if (!isSymbolic)
+        else if (isNonSymbolic)
         {
             // Otherwise, for a nonsymbolic font, it is StandardEncoding
             baseEncoding = StandardEncoding.INSTANCE;

Modified: 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java?rev=1620737&r1=1620736&r2=1620737&view=diff
==============================================================================
--- 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
 (original)
+++ 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
 Tue Aug 26 21:18:57 2014
@@ -396,6 +396,15 @@ public abstract class PDFont implements 
      */
     protected Boolean isFontSymbolic()
     {
+        return getSymbolicFlag();
+    }
+
+    /**
+     * Returns the value of the symbolic flag,  allowing for the fact that the 
result may be
+     * indeterminate.
+     */
+    protected Boolean getSymbolicFlag()
+    {
         if (getFontDescriptor() != null)
         {
             // fixme: isSymbolic() defaults to false if the flag is missing so 
we can't trust this

Modified: 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java?rev=1620737&r1=1620736&r2=1620737&view=diff
==============================================================================
--- 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 (original)
+++ 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 Tue Aug 26 21:18:57 2014
@@ -29,6 +29,7 @@ import org.apache.pdfbox.encoding.Standa
 import org.apache.pdfbox.encoding.WinAnsiEncoding;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -41,6 +42,23 @@ public abstract class PDSimpleFont exten
 {
     private static final Log LOG = LogFactory.getLog(PDSimpleFont.class);
 
+    private static Set<String> STANDARD_14 = new HashSet<String>();
+    static
+    {
+        // standard 14 names
+        STANDARD_14.addAll(Arrays.asList(
+           "Courier", "Courier-Bold", "Courier-Oblique", 
"Courier-BoldOblique", "Helvetica",
+           "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique", 
"Times-Roman",
+           "Times-Bold", "Times-Italic","Times-BoldItalic", "Symbol", 
"ZapfDingbats"
+        ));
+        // alternative names from Adobe Supplement to the ISO 32000
+        STANDARD_14.addAll(Arrays.asList(
+           "CourierCourierNew", "CourierNew", "CourierNew,Italic", 
"CourierNew,Bold",
+           "CourierNew,BoldItalic", "Arial", "Arial,Italic", "Arial,Bold", 
"Arial,BoldItalic",
+           "TimesNewRoman", "TimesNewRoman,Italic", "TimesNewRoman,Bold", 
"TimesNewRoman,BoldItalic"
+        ));
+    }
+
     protected Encoding encoding;
     private final Set<Integer> noUnicode = new HashSet<Integer>();
 
@@ -91,7 +109,12 @@ public abstract class PDSimpleFont exten
                 {
                     builtIn = readEncodingFromFont();
                 }
-                this.encoding = new DictionaryEncoding(encodingDict, 
isSymbolic(), builtIn);
+                Boolean symbolic = getSymbolicFlag();
+                if (symbolic == null)
+                {
+                    symbolic = builtIn != null;
+                }
+                this.encoding = new DictionaryEncoding(encodingDict, 
!symbolic, builtIn);
             }
         }
         else
@@ -118,27 +141,39 @@ public abstract class PDSimpleFont exten
     @Override
     protected Boolean isFontSymbolic()
     {
-        Boolean result = super.isFontSymbolic();
+        Boolean result = getSymbolicFlag();
         if (result != null)
         {
             return result;
         }
+        else if (isStandard14())
+        {
+            return getBaseFont().equals("Symbol") || 
getBaseFont().equals("ZapfDingbats");
+        }
         else
         {
-            if (encoding instanceof WinAnsiEncoding ||encoding instanceof 
MacRomanEncoding ||
+            if (encoding == null)
+            {
+                // sanity check, should never happen
+                throw new IllegalStateException("recursive definition");
+            }
+            else if (encoding instanceof WinAnsiEncoding ||encoding instanceof 
MacRomanEncoding ||
                 encoding instanceof StandardEncoding)
             {
                 return false;
             }
             else if (encoding instanceof DictionaryEncoding)
             {
-                // each name in Differences array must also be in the latin 
character se
-                DictionaryEncoding enc = (DictionaryEncoding)encoding;
-                for (String name : enc.getDifferences().values())
+                // each name in Differences array must also be in the latin 
character set
+                for (String name : 
((DictionaryEncoding)encoding).getDifferences().values())
                 {
-                    if (!(WinAnsiEncoding.INSTANCE.contains(name) &&
-                          MacRomanEncoding.INSTANCE.contains(name) &&
-                          StandardEncoding.INSTANCE.contains(name)))
+                    if (name.equals(".notdef"))
+                    {
+                        // skip
+                    }
+                    else if (!(WinAnsiEncoding.INSTANCE.contains(name) &&
+                               MacRomanEncoding.INSTANCE.contains(name) &&
+                               StandardEncoding.INSTANCE.contains(name)))
                     {
                         return true;
                     }
@@ -200,4 +235,12 @@ public abstract class PDSimpleFont exten
 
         return null;
     }
+
+    /**
+     * Returns true if this font is one of the "standard 14" fonts.
+     */
+    public boolean isStandard14()
+    {
+        return !isEmbedded() && STANDARD_14.contains(getBaseFont());
+    }
 }

Modified: 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1620737&r1=1620736&r2=1620737&view=diff
==============================================================================
--- 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
 (original)
+++ 
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
 Tue Aug 26 21:18:57 2014
@@ -179,7 +179,8 @@ public class PDTrueTypeFont extends PDSi
     {
         extractCmapTable();
         int gid = 0;
-        if (getEncoding() != null && !isSymbolic())
+
+        if (getEncoding() != null && !isSymbolic()) // non-symbolic
         {
             String name = getEncoding().getName(code);
             if (name.equals(".notdef"))
@@ -223,8 +224,7 @@ public class PDTrueTypeFont extends PDSi
                 }
             }
         }
-
-        if (getEncoding() == null || isSymbolic())
+        else // symbolic
         {
             if (cmapWinSymbol != null)
             {


Reply via email to