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/10/14 06:24:18 UTC

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

Author: jahewson
Date: Tue Oct 14 04:24:18 2014
New Revision: 1631609

URL: http://svn.apache.org/r1631609
Log:
PDFBOX-2422: Set font descriptor when embedding simple TTFs

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
    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
    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/PDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java?rev=1631609&r1=1631608&r2=1631609&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java Tue Oct 14 04:24:18 2014
@@ -52,8 +52,8 @@ public abstract class PDFont implements 
     protected final COSDictionary dict;
     private final CMap toUnicodeCMap;
     private final FontMetrics afmStandard14; // AFM for standard 14 fonts
-    private final PDFontDescriptor fontDescriptor;
 
+    private PDFontDescriptor fontDescriptor;
     private List<Integer> widths;
     private float avgFontWidth;
     private float fontWidthOfSpace = -1f;
@@ -145,6 +145,16 @@ public abstract class PDFont implements 
     }
 
     /**
+     * Sets the font descriptor when embedding a font.
+     */
+    protected final void setFontDescriptor(PDFontDescriptor fontDescriptor)
+    {
+        this.fontDescriptor = fontDescriptor;
+    }
+
+    /**
+
+    /**
      * Reads a CMap given a COS Stream or Name. May return null if a predefined CMap does not exist.
      *
      * @param base COSName or COSStream
@@ -243,19 +253,21 @@ public abstract class PDFont implements 
     /**
      * Returns the width of the given Unicode string.
      *
-     * @param string The string to get the width of.
+     * @param text The text to get the width of.
      * @return The width of the string in 1000 units of text space, ie 333 567...
      * @throws IOException If there is an error getting the width information.
      */
-    public float getStringWidth(String string) throws IOException
+    public float getStringWidth(String text) throws IOException
     {
-        byte[] data = string.getBytes("ISO-8859-1"); // todo: *no*, these are *not* character codes
-        float totalWidth = 0;
-        for (int i = 0; i < data.length; i++)
+        float width = 0;
+        int offset = 0, length = text.length();
+        while (offset < length)
         {
-            totalWidth += getWidth(data[i]);
+            int codePoint = text.codePointAt(offset);
+            offset += Character.charCount(codePoint);
+            width += getWidth(codePoint); // todo: *no* getWidth expects a PDF char code, not a Unicode code point
         }
-        return totalWidth;
+        return width;
     }
 
     /**
@@ -406,7 +418,7 @@ public abstract class PDFont implements 
      * Returns the value of the symbolic flag,  allowing for the fact that the result may be
      * indeterminate.
      */
-    protected Boolean getSymbolicFlag()
+    protected final Boolean getSymbolicFlag()
     {
         if (getFontDescriptor() != null)
         {

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=1631609&r1=1631608&r2=1631609&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 Tue Oct 14 04:24:18 2014
@@ -46,7 +46,7 @@ public abstract class PDSimpleFont exten
     private final Set<Integer> noUnicode = new HashSet<Integer>(); // for logging
 
     /**
-     * Constructor
+     * Constructor for embedding.
      */
     PDSimpleFont()
     {

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=1631609&r1=1631608&r2=1631609&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 Tue Oct 14 04:24:18 2014
@@ -178,8 +178,10 @@ public class PDTrueTypeFont extends PDSi
         PDTrueTypeFontEmbedder embedder = new PDTrueTypeFontEmbedder(document, dict, ttfStream);
         encoding = embedder.getFontEncoding();
         ttf = embedder.getTrueTypeFont();
+        setFontDescriptor(embedder.getFontDescriptor());
         isEmbedded = true;
         isDamaged = false;
+        glyphList = GlyphList.getAdobeGlyphList();
     }
 
     @Override

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=1631609&r1=1631608&r2=1631609&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 Tue Oct 14 04:24:18 2014
@@ -58,6 +58,7 @@ class PDTrueTypeFontEmbedder
 {
     private final Encoding fontEncoding;
     private final TrueTypeFont ttf;
+    private final PDFontDescriptor fontDescriptor;
 
     /**
      * Creates a new TrueType font for embedding.
@@ -94,6 +95,7 @@ class PDTrueTypeFontEmbedder
 
         fd.setFontFile2(stream);
         dict.setItem(COSName.FONT_DESC, fd);
+        fontDescriptor = fd;
     }
 
     // creates a new font descriptor dictionary for the given TTF
@@ -326,4 +328,12 @@ class PDTrueTypeFontEmbedder
     {
         return ttf;
     }
+
+    /**
+     * Returns the font descriptor.
+     */
+    public PDFontDescriptor getFontDescriptor()
+    {
+        return fontDescriptor;
+    }
 }