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 2014/12/22 23:39:36 UTC

svn commit: r1647427 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java

Author: msahyoun
Date: Mon Dec 22 22:39:36 2014
New Revision: 1647427

URL: http://svn.apache.org/r1647427
Log:
PDFBOX-2576 remove duplicate code

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java?rev=1647427&r1=1647426&r2=1647427&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java Mon Dec 22 22:39:36 2014
@@ -216,13 +216,11 @@ public final class PDAppearanceString
             {
                 actions = field.getActions();
             }
-            if (actions != null && actions.getF() != null
-                    && widget.getDictionary().getDictionaryObject(COSName.AP) == null)
-            {
-                // do nothing because the field will be formatted by acrobat
-                // when it is opened. See FreedomExpressions.pdf for an example of this.
-            }
-            else
+
+            // in case all tests fail the field will be formatted by acrobat
+            // when it is opened. See FreedomExpressions.pdf for an example of this.  
+            if (actions == null || actions.getF() == null || 
+                    widget.getDictionary().getDictionaryObject(COSName.AP) != null)
             {
                 PDAppearanceDictionary appearance = widget.getAppearance();
                 if (appearance == null)
@@ -246,7 +244,7 @@ public final class PDAppearanceString
 
                 List<Object> tokens = getStreamTokens(appearanceStream);
                 List<Object> daTokens = getStreamTokens(getDefaultAppearance());
-                PDFont pdFont = getFontAndUpdateResources(tokens, appearanceStream);
+                PDFont pdFont = getFontAndUpdateResources(daTokens, appearanceStream);
 
                 if (!containsMarkedContent(tokens))
                 {
@@ -318,11 +316,7 @@ public final class PDAppearanceString
         printWriter.println("BT");
         if (defaultAppearance != null)
         {
-            String daString = defaultAppearance.getString();
-            PDFStreamParser daParser = new PDFStreamParser(new ByteArrayInputStream(
-                    daString.getBytes("ISO-8859-1")));
-            daParser.parse();
-            List<Object> daTokens = daParser.getTokens();
+            List<Object> daTokens = getStreamTokens(getDefaultAppearance());
             fontSize = calculateFontSize(font, boundingBox, tokens, daTokens);
             int fontIndex = daTokens.indexOf(Operator.getOperator("Tf"));
             if (fontIndex != -1)
@@ -411,7 +405,7 @@ public final class PDAppearanceString
         printWriter.flush();
     }
 
-    private PDFont getFontAndUpdateResources(List<Object> tokens,
+    private PDFont getFontAndUpdateResources(List<Object> daTokens,
             PDAppearanceStream appearanceStream) throws IOException
     {
         PDFont retval = null;
@@ -425,18 +419,8 @@ public final class PDAppearanceString
                 appearanceStream.setResources(streamResources);
             }
 
-            COSString da = getDefaultAppearance();
-            if (da != null)
-            {
-                String data = da.getString();
-                PDFStreamParser streamParser = new PDFStreamParser(new ByteArrayInputStream(
-                        data.getBytes("ISO-8859-1")));
-                streamParser.parse();
-                tokens = streamParser.getTokens();
-            }
-
-            int setFontIndex = tokens.indexOf(Operator.getOperator("Tf"));
-            COSName cosFontName = (COSName) tokens.get(setFontIndex - 2);
+            int setFontIndex = daTokens.indexOf(Operator.getOperator("Tf"));
+            COSName cosFontName = (COSName) daTokens.get(setFontIndex - 2);
             retval = streamResources.getFont(cosFontName);
             if (retval == null)
             {
@@ -538,6 +522,7 @@ public final class PDAppearanceString
 
         float widthBasedFontSize = Float.MAX_VALUE;
 
+        // TODO review the calculation as this seems to not reflect how Acrobat calculates the font size
         if (parent instanceof PDTextField && ((PDTextField) parent).doNotScroll())
         {
             // if we don't scroll then we will shrink the font to fit into the text area.
@@ -545,7 +530,7 @@ public final class PDAppearanceString
             float availableWidth = getAvailableWidth(boundingBox, getLineWidth(tokens));
             widthBasedFontSize = availableWidth / widthAtFontSize1;
         }
-        else if (fontSize == 0)
+        if (fontSize == 0)
         {
             float lineWidth = getLineWidth(tokens);
             float height = pdFont.getFontDescriptor().getFontBoundingBox().getHeight() / 1000f;