You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/08/19 00:00:27 UTC

svn commit: r1618755 - in /pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: ExternalFonts.java PDTrueTypeFont.java

Author: jahewson
Date: Mon Aug 18 22:00:27 2014
New Revision: 1618755

URL: http://svn.apache.org/r1618755
Log:
PDFBOX-2262: Use TTF fallback and improved substitutions

Modified:
    pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.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/pdmodel/font/ExternalFonts.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java?rev=1618755&r1=1618754&r2=1618755&view=diff
==============================================================================
--- pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java (original)
+++ pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java Mon Aug 18 22:00:27 2014
@@ -93,7 +93,7 @@ public final class ExternalFonts
     private final static Map<String, List<String>> substitutes = new HashMap<String, List<String>>();
     static
     {
-        // well-known substitutes commonly found on end-user systems
+        // substitutes for standard 14 fonts
         substitutes.put("Courier",
                 Arrays.asList("CourierNew", "CourierNewPSMT"));
         substitutes.put("Courier-Bold",
@@ -125,6 +125,7 @@ public final class ExternalFonts
         // the Adobe Supplement to the ISO 32000 specifies some alternative names for some
         // of the standard 14 fonts, so we map these to our fallbacks above
         substitutes.put("CourierCourierNew", substitutes.get("Courier"));
+        substitutes.put("CourierNew", substitutes.get("Courier"));
         substitutes.put("CourierNew,Italic", substitutes.get("Courier-Oblique"));
         substitutes.put("CourierNew,Bold", substitutes.get("Courier-Bold"));
         substitutes.put("CourierNew,BoldItalic", substitutes.get("Courier-BoldOblique"));

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=1618755&r1=1618754&r2=1618755&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 Mon Aug 18 22:00:27 2014
@@ -65,7 +65,7 @@ public class PDTrueTypeFont extends PDFo
     private CMAPEncodingEntry cmapMacintoshSymbol = null;
     private boolean cmapInitialized = false;
 
-    private TrueTypeFont ttf = null;
+    private final TrueTypeFont ttf;
     private final HashMap<Integer, Float> advanceWidths = new HashMap<Integer, Float> ();
 
     /**
@@ -78,6 +78,7 @@ public class PDTrueTypeFont extends PDFo
         super(fontDictionary);
 
         PDFontDescriptorDictionary fd = (PDFontDescriptorDictionary) super.getFontDescriptor();
+        TrueTypeFont ttfFont = null;
         if (fd != null)
         {
             PDStream ff2Stream = fd.getFontFile2();
@@ -85,16 +86,24 @@ public class PDTrueTypeFont extends PDFo
             {
                 // embedded
                 TTFParser ttfParser = new TTFParser(true);
-                ttf = ttfParser.parseTTF(ff2Stream.createInputStream());
+                ttfFont = ttfParser.parseTTF(ff2Stream.createInputStream());
             }
         }
 
         // substitute
-        if (ttf == null)
+        if (ttfFont == null)
         {
-            ttf = ExternalFonts.getTrueTypeFont(getBaseFont());
+            ttfFont = ExternalFonts.getTrueTypeFont(getBaseFont());
+
+            // fallback
+            if (ttfFont == null)
+            {
+                LOG.warn("Using fallback font for " + getBaseFont());
+                ttfFont = ExternalFonts.getFallbackFont();
+            }
         }
-        // todo: put the fallback here? (i.e. make this class fallback-aware - cleaner)
+
+        ttf = ttfFont;
 
         determineEncoding();
     }
@@ -299,7 +308,6 @@ public class PDTrueTypeFont extends PDFo
         cmapWinSymbol = null;
         cmapMacintoshSymbol = null;
         cmapInitialized = false;
-        ttf = null;
         advanceWidths.clear();
     }
 }