You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2015/10/09 20:11:20 UTC

svn commit: r1707779 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java

Author: msahyoun
Date: Fri Oct  9 18:11:20 2015
New Revision: 1707779

URL: http://svn.apache.org/viewvc?rev=1707779&view=rev
Log:
PDFBOX-3016: initial support for encode()

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

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java?rev=1707779&r1=1707778&r2=1707779&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java Fri Oct  9 18:11:20 2015
@@ -17,6 +17,8 @@
 
 package org.apache.pdfbox.pdmodel.font;
 
+import static org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint;
+
 import java.awt.geom.AffineTransform;
 import java.awt.geom.GeneralPath;
 import java.awt.geom.Point2D;
@@ -280,9 +282,21 @@ public class PDType1CFont extends PDSimp
     @Override
     protected byte[] encode(int unicode) throws IOException
     {
-        throw new UnsupportedOperationException("Not implemented: Type1C");
-    }
+        String name = getGlyphList().codePointToName(unicode);
+        String nameInFont = getNameInFont(name);
+        
+        Map<String, Integer> inverted = getInvertedEncoding();
+
+        if (nameInFont.equals(".notdef") || !genericFont.hasGlyph(nameInFont))
+        {
+            throw new IllegalArgumentException(
+                    String.format("No glyph for U+%04X in font %s", unicode, getName()));
+        }
 
+        int code = inverted.get(name);
+        return new byte[] { (byte)code };
+    }
+    
     @Override
     public float getStringWidth(String string) throws IOException
     {
@@ -322,4 +336,30 @@ public class PDType1CFont extends PDSimp
         // todo: not implemented, highly suspect
         return 500;
     }
+    
+    /**
+     * Maps a PostScript glyph name to the name in the underlying font, for example when
+     * using a TTF font we might map "W" to "uni0057".
+     */
+    private String getNameInFont(String name) throws IOException
+    {
+        if (isEmbedded() || genericFont.hasGlyph(name))
+        {
+            return name;
+        }
+        else
+        {
+            // try unicode name
+            String unicodes = getGlyphList().toUnicode(name);
+            if (unicodes != null && unicodes.length() == 1)
+            {
+                String uniName = getUniNameOfCodePoint(unicodes.codePointAt(0));
+                if (genericFont.hasGlyph(uniName))
+                {
+                    return uniName;
+                }
+            }
+        }
+        return ".notdef";
+    }
 }