Author: lehmi
Date: Sun Mar 13 10:38:43 2016
New Revision: 1734781

URL: http://svn.apache.org/viewvc?rev=1734781&view=rev
Log:
PDFBOX-3271: use a sorted set to create a optimal width array, use another 
start value for prev, otherwise some of the first values might be swallowed

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

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java?rev=1734781&r1=1734780&r2=1734781&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java
 Sun Mar 13 10:38:43 2016
@@ -24,6 +24,8 @@ import java.io.InputStream;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
 import org.apache.fontbox.ttf.TrueTypeFont;
 import org.apache.pdfbox.cos.COSArray;
@@ -261,7 +263,7 @@ final class PDCIDFontType2Embedder exten
     }
 
     /**
-     * Builds wieths with a custom CIDToGIDMap (for embedding font subset).
+     * Builds widths with a custom CIDToGIDMap (for embedding font subset).
      */
     private void buildWidths(Map<Integer, Integer> cidToGid) throws IOException
     {
@@ -269,18 +271,13 @@ final class PDCIDFontType2Embedder exten
 
         COSArray widths = new COSArray();
         COSArray ws = new COSArray();
-        int prev = -1;
-
-        for (int cid : cidToGid.keySet())
+        int prev = Integer.MIN_VALUE;
+        // Use a sorted list to get an optimal width array  
+        Set<Integer> keys = new TreeSet<Integer>(cidToGid.keySet());
+        for (int cid : keys)
         {
-            if (!cidToGid.containsKey(cid))
-            {
-                continue;
-            }
-
             int gid = cidToGid.get(cid);
             float width = ttf.getHorizontalMetrics().getAdvanceWidth(gid) * 
scaling;
-
             // c [w1 w2 ... wn]
             if (prev != cid - 1)
             {
@@ -291,7 +288,6 @@ final class PDCIDFontType2Embedder exten
             ws.add(COSInteger.get(Math.round(width))); // wi
             prev = cid;
         }
-
         cidFont.setItem(COSName.W, widths);
     }
 


Reply via email to