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/12/12 22:43:00 UTC

svn commit: r1645080 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: PDTrueTypeFont.java PDTrueTypeFontEmbedder.java

Author: jahewson
Date: Fri Dec 12 21:43:00 2014
New Revision: 1645080

URL: http://svn.apache.org/r1645080
Log:
PDFBOX-922: Cleanly limit PDTrueTypeFont to WinAnsiEncoding

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java

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=1645080&r1=1645079&r2=1645080&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 Fri Dec 12 21:43:00 2014
@@ -249,9 +249,10 @@ public class PDTrueTypeFont extends PDSi
     @Override
     protected byte[] encode(int unicode) throws IOException
     {
-        if (unicode > 0xff)
+        if (!getEncoding().contains(getGlyphList().codePointToName(unicode)))
         {
-            throw new IllegalArgumentException("This font type only supports 8-bit code points");
+            throw new IllegalArgumentException(
+                    String.format("U+%04X is not available in this font's Encoding", unicode));
         }
 
         int gid = codeToGID(unicode);

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java?rev=1645080&r1=1645079&r2=1645080&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java Fri Dec 12 21:43:00 2014
@@ -57,7 +57,8 @@ final class PDTrueTypeFontEmbedder exten
         dict.setItem(COSName.SUBTYPE, COSName.TRUE_TYPE);
 
         // only support WinAnsiEncoding encoding right now
-        Encoding encoding = new WinAnsiEncoding(); // fixme: read encoding from TTF
+        Encoding encoding = new WinAnsiEncoding();
+        GlyphList glyphList = GlyphList.getAdobeGlyphList();
         this.fontEncoding = encoding;
         dict.setItem(COSName.ENCODING, encoding.getCOSObject());
 
@@ -65,13 +66,13 @@ final class PDTrueTypeFontEmbedder exten
         dict.setItem(COSName.FONT_DESC, fontDescriptor);
 
         // set the glyph widths
-        setWidths(dict);
+        setWidths(dict, glyphList);
     }
 
     /**
      * Sets the glyph widths in the font dictionary.
      */
-    private void setWidths(COSDictionary font) throws IOException
+    private void setWidths(COSDictionary font, GlyphList glyphList) throws IOException
     {
         float scaling = 1000f / ttf.getHeader().getUnitsPerEm();
 
@@ -107,8 +108,7 @@ final class PDTrueTypeFontEmbedder exten
             // pdf code to unicode by glyph list.
             if (!name.equals(".notdef"))
             {
-                // todo: we're supposed to use the 'provided font encoding'
-                String c = GlyphList.getAdobeGlyphList().toUnicode(name);
+                String c = glyphList.toUnicode(name);
                 int charCode = c.codePointAt(0);
                 int gid = cmap.getGlyphId(charCode);
                 if (gid != 0)