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/09/21 23:03:41 UTC

svn commit: r1626632 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: pdmodel/font/PDSimpleFont.java rendering/font/TTFGlyph2D.java

Author: jahewson
Date: Sun Sep 21 21:03:41 2014
New Revision: 1626632

URL: http://svn.apache.org/r1626632
Log:
PDFBOX-2372: Standard 14 Type 0 fonts should have empty .notdef glyph

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/TTFGlyph2D.java

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=1626632&r1=1626631&r2=1626632&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 Sep 21 21:03:41 2014
@@ -59,6 +59,14 @@ public abstract class PDSimpleFont exten
         ));
     }
 
+    /**
+     * Returns true if this font is one of the "standard 14" fonts.
+     */
+    public static boolean isStandard14(String name)
+    {
+        return STANDARD_14.contains(name);
+    }
+
     protected Encoding encoding;
     protected GlyphList glyphList;
     private final Set<Integer> noUnicode = new HashSet<Integer>(); // for logging

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/TTFGlyph2D.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/TTFGlyph2D.java?rev=1626632&r1=1626631&r2=1626632&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/TTFGlyph2D.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/TTFGlyph2D.java Sun Sep 21 21:03:41 2014
@@ -34,6 +34,7 @@ import org.apache.fontbox.ttf.HeaderTabl
 import org.apache.fontbox.ttf.TrueTypeFont;
 import org.apache.pdfbox.pdmodel.font.PDCIDFontType2;
 import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDSimpleFont;
 import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
 import org.apache.pdfbox.pdmodel.font.PDType0Font;
 
@@ -108,25 +109,6 @@ public class TTFGlyph2D implements Glyph
         }
     }
 
-    // todo: HACK!
-    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"
-        ));
-    }
-
-
     /**
      * Returns the path describing the glyph for the given glyphId.
      *
@@ -163,8 +145,10 @@ public class TTFGlyph2D implements Glyph
 
             GlyphData glyph = ttf.getGlyph().getGlyph(gid);
 
-            // todo: MEGA HACK! (for CIDFont "known") - sort of works (width issues?)
-            if (gid == 0 && !font.isEmbedded() && STANDARD_14.contains(font.getName()))
+            // workaround for Type0 "Standard 14" font handling, as Adobe has GID 0 as empty
+            // while Microsoft uses a rectangle, which we don't want to appear
+            if (isCIDFont && gid == 0 && !font.isEmbedded() &&
+                PDSimpleFont.isStandard14(font.getName()))
             {
                 glyph = null;
             }