You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2012/09/29 16:00:22 UTC

svn commit: r1391803 - in /pdfbox/trunk/pdfbox/src/main: java/org/apache/pdfbox/pdmodel/font/FontManager.java resources/org/apache/pdfbox/resources/FontMapping.properties

Author: lehmi
Date: Sat Sep 29 14:00:22 2012
New Revision: 1391803

URL: http://svn.apache.org/viewvc?rev=1391803&view=rev
Log:
PDFBOX-1418: improved font mapping

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java
    pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/FontMapping.properties

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java?rev=1391803&r1=1391802&r2=1391803&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java Sat Sep 29 14:00:22 2012
@@ -33,9 +33,9 @@ public class FontManager 
 {
 
     // HashMap with all known fonts
-    private static HashMap envFonts = new HashMap();
+    private static HashMap<String,java.awt.Font> envFonts = new HashMap<String,java.awt.Font>();
     // the standard font
-    private static String standardFont = null;
+    private final static String standardFont = "helvetica";
     private static Properties fontMapping = new Properties(); 
     
     static {
@@ -51,9 +51,8 @@ public class FontManager 
             throw new RuntimeException( "Error loading font mapping" );
         }
         loadFonts();
-        loadFontMapping();
         loadBasefontMapping();
-        setStandardFont();
+        loadFontMapping();
     }
     
     private FontManager() 
@@ -67,11 +66,7 @@ public class FontManager 
      */
     public static java.awt.Font getStandardFont() 
     {
-        if (standardFont != null)
-        {
-            return getAwtFont(standardFont);
-        }
-        return null;
+        return getAwtFont(standardFont);
     }
     
     /**
@@ -87,7 +82,7 @@ public class FontManager 
         String fontname = normalizeFontname(font);
         if (envFonts.containsKey(fontname))
         {
-            return (java.awt.Font)envFonts.get(fontname);
+            return envFonts.get(fontname);
         }
         return null;
     }
@@ -127,19 +122,6 @@ public class FontManager 
         }
     }
 
-    private static void setStandardFont() 
-    {
-        // One of the following fonts will be the standard-font 
-        if (envFonts.containsKey("arial"))
-        {
-            standardFont = "arial";
-        }
-        else if (envFonts.containsKey("timesnewroman"))
-        {
-            standardFont = "timesnewroman";
-        }
-    }
-    
     /**
      * Normalize the fontname.
      *
@@ -215,7 +197,7 @@ public class FontManager 
         while (addedMapping) 
         {
             int counter = 0;
-            Enumeration keys = fontMapping.keys();
+            Enumeration<Object> keys = fontMapping.keys();
             while (keys.hasMoreElements()) 
             {
                 String key = (String)keys.nextElement();
@@ -236,14 +218,61 @@ public class FontManager 
      */
     private static void loadBasefontMapping() 
     {
-        addFontMapping("Times-Roman","TimesNewRoman");
-        addFontMapping("Times-Bold","TimesNewRoman,Bold");
-        addFontMapping("Times-Italic","TimesNewRoman,Italic");
-        addFontMapping("Times-BoldItalic","TimesNewRoman,Bold,Italic");
-        addFontMapping("Helvetica-Oblique","Helvetica,Italic");
-        addFontMapping("Helvetica-BoldOblique","Helvetica,Bold,Italic");
-        addFontMapping("Courier-Oblique","Courier,Italic");
-        addFontMapping("Courier-BoldOblique","Courier,Bold,Italic");
+        // use well known substitutions if the environments doesn't provide native fonts for the 14 standard fonts
+        // Times-Roman -> Serif
+        if (!addFontMapping("Times-Roman","TimesNewRoman"))
+        {
+            addFontMapping("Times-Roman","Serif");
+        }
+        if (!addFontMapping("Times-Bold","TimesNewRoman,Bold"))
+        {
+            addFontMapping("Times-Bold","Serif.bold");
+        }
+        if (!addFontMapping("Times-Italic","TimesNewRoman,Italic"))
+        {
+            addFontMapping("Times-Italic","Serif.italic");
+        }
+        if (!addFontMapping("Times-BoldItalic","TimesNewRoman,Bold,Italic"))
+        {
+            addFontMapping("Times-BoldItalic","Serif.bolditalic");
+        }
+        // Helvetica -> SansSerif
+        if (!addFontMapping("Helvetica","Helvetica"))
+        {
+            addFontMapping("Helvetica","SansSerif");
+        }
+        if (!addFontMapping("Helvetica-Bold","Helvetica,Bold"))
+        {
+            addFontMapping("Helvetica-Bold","SansSerif.bold");
+        }
+        if (!addFontMapping("Helvetica-Oblique","Helvetica,Italic"))
+        {
+            addFontMapping("Helvetica-Oblique","SansSerif.italic");
+        }
+        if (!addFontMapping("Helvetica-BoldOblique","Helvetica,Bold,Italic"))
+        {
+            addFontMapping("Helvetica-BoldOblique","SansSerif.bolditalic");
+        }
+        // Courier -> Monospaced
+        if (!addFontMapping("Courier","Courier"))
+        {
+            addFontMapping("Courier","Monospaced");
+        }
+        if (!addFontMapping("Courier-Bold","Courier,Bold"))
+        {
+            addFontMapping("Courier-Bold","Monospaced.bold");
+        }
+        if (!addFontMapping("Courier-Oblique","Courier,Italic"))
+        {
+            addFontMapping("Courier-Oblique","Monospaced.italic");
+        }
+        if (!addFontMapping("Courier-BoldOblique","Courier,Bold,Italic"))
+        {
+            addFontMapping("Courier-BoldOblique","Monospaced.bolditalic");
+        }
+        // some well known (??) substitutions found on fedora linux
+        addFontMapping("Symbol","StandardSymbolsL");
+        addFontMapping("ZapfDingbats","Dingbats");
     }
 
     /**

Modified: pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/FontMapping.properties
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/FontMapping.properties?rev=1391803&r1=1391802&r2=1391803&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/FontMapping.properties (original)
+++ pdfbox/trunk/pdfbox/src/main/resources/org/apache/pdfbox/resources/FontMapping.properties Sat Sep 29 14:00:22 2012
@@ -17,29 +17,14 @@
 # If a needed font isn't embedded in the pdf and not available in the running environment
 # it will be substituted with an other suitable font, if available
 #
-# These are mappings for a java 1.4.x environment. 
-# Obviously not all fonts in the environment are found, so that we have to work with the few fonts java delivers
-#
-Arial=Lucida Sans
-Arial,Bold=Lucida Sans,Bold
-Arial,Italic=Lucida Sans,Italic
-Arial,Bold,Italic=Lucida Sans,Bold,Italic
-TimesNewRoman=Lucida Bright
-TimesNewRoman,Bold=Lucida Bright,Bold
-TimesNewRoman,Italic=Lucida Bright,Italic
-TimesNewRoman,Bold,Italic=Lucida Bright,Bold,Italic
-Courier=Lucida Sans Typewriter
-Courier,Bold=Lucida Sans Typewriter,Bold
-Courier,Italic=Lucida Sans Typewriter,Italic
-Courier,Bold,Italic=Lucida Sans Typewriter,Bold,Italic
 #
 # These are some well known mappings for some frequently used fonts
 #
-Helvetica=Arial
-Helvetica,Bold=Arial,Bold
-Helvetica,Italic=Arial,Italic
-Helvetica,Bold,Italic=Arial,Bold,Italic
-SymbolMT=StandardSymbolsL
+Arial=Helvetica 
+Arial,Bold=Helvetica,Bold
+Arial,Italic=Helvetica,Italic
+Arial,Bold,Italic=Helvetica,Bold,Italic
+SymbolMT=Symbol
 ArialMT=Arial
 ArialMT,Bold=Arial,Bold
 ArialMT,Italic=Arial,Italic