Author: jahewson Date: Wed Jul 15 00:31:35 2015 New Revision: 1691119 URL: http://svn.apache.org/r1691119 Log: PDFBOX-2842: Non-symbolic TTFs use StandardEncoding as their built-in
Modified: 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 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=1691119&r1=1691118&r2=1691119&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 Wed Jul 15 00:31:35 2015 @@ -28,7 +28,6 @@ import org.apache.fontbox.FontBoxFont; import org.apache.pdfbox.cos.COSBase; import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSName; -import org.apache.pdfbox.pdmodel.font.encoding.BuiltInEncoding; import org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding; import org.apache.pdfbox.pdmodel.font.encoding.Encoding; import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; @@ -133,25 +132,8 @@ public abstract class PDSimpleFont exten this.encoding = readEncodingFromFont(); } - // TTFs have a built-in encoding, but if the font is non-symbolic then we instead - // have Standard Encoding - if (this.encoding instanceof BuiltInEncoding && - getSymbolicFlag() != null &&!getSymbolicFlag()) - { - this.encoding = StandardEncoding.INSTANCE; - } - // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol" String standard14Name = Standard14Fonts.getMappedFontName(getName()); - - // TTFs may have a built-in encoding, but if the font is standard 14 then we know - // it's Standard Encoding - if (this.encoding instanceof BuiltInEncoding && isStandard14() && - !standard14Name.equals("Symbol") && - !standard14Name.equals("ZapfDingbats")) - { - this.encoding = StandardEncoding.INSTANCE; - } // assign the glyph list based on the font if ("ZapfDingbats".equals(standard14Name)) 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=1691119&r1=1691118&r2=1691119&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 Wed Jul 15 00:31:35 2015 @@ -41,6 +41,7 @@ import org.apache.pdfbox.pdmodel.font.en import org.apache.pdfbox.pdmodel.font.encoding.Encoding; import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; import org.apache.pdfbox.pdmodel.font.encoding.MacOSRomanEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding; import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding; import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding; @@ -220,6 +221,25 @@ public class PDTrueTypeFont extends PDSi } else { + // non-symbolic fonts don't have a built-in encoding per se, but there encoding is + // assumed to be StandardEncoding by the PDF spec unless an explicit Encoding is present + // which will override this anyway + if (getSymbolicFlag() != null &&!getSymbolicFlag()) + { + return StandardEncoding.INSTANCE; + } + + // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol" + String standard14Name = Standard14Fonts.getMappedFontName(getName()); + + // likewise, if the font is standard 14 then we know it's Standard Encoding + if (isStandard14() && + !standard14Name.equals("Symbol") && + !standard14Name.equals("ZapfDingbats")) + { + return StandardEncoding.INSTANCE; + } + // synthesize an encoding, so that getEncoding() is always usable PostScriptTable post = ttf.getPostScript(); Map<Integer, String> codeToName = new HashMap<Integer, String>();