diff --git a/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java b/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java
index 13aa01f..b84b470 100644
--- a/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java
+++ b/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java
@@ -537,7 +537,38 @@
     private float calculateFontSize( PDFont pdFont, PDRectangle boundingBox, List tokens, List daTokens )
         throws IOException
     {
-        float fontSize = 0;
+        float fontSize = getFontSize( daTokens );
+        
+        if( fontSize == 0 )
+        {
+            float widthBasedFontSize = calculateWidthBasedFontSize( pdFont, boundingBox, tokens );
+            
+            float heightBasedFontSize = calculateHeightBasedFontSize( boundingBox );
+            
+            fontSize = Math.min(heightBasedFontSize, widthBasedFontSize);
+        }
+        return fontSize;
+    }
+
+	private float calculateHeightBasedFontSize( PDRectangle boundingBox ) throws IOException
+	{
+		int rows = parent.isMultiline() ? value.length : 1;
+		float availableHeight = boundingBox.getHeight();
+		
+		return availableHeight / rows;
+	}
+
+	private float calculateWidthBasedFontSize( PDFont pdFont, PDRectangle boundingBox, List tokens ) throws IOException
+	{
+		float stringWidth = getMaxStringWidth( pdFont )/1000.f;
+		float availableWidth = getAvailableWidth(boundingBox, getLineWidth(tokens));
+		
+		return availableWidth / stringWidth;
+	}
+
+	private float getFontSize( List daTokens )
+	{
+		float fontSize = 0;
         if( daTokens != null )
         {
             //daString looks like   "BMC /Helv 3.4 Tf EMC"
@@ -548,38 +579,8 @@
                 fontSize = ((COSNumber)daTokens.get(fontIndex-1)).floatValue();
             }
         }
-        
-        float widthBasedFontSize = Float.MAX_VALUE;
-        
-        if( parent.doNotScroll() )
-        {
-            //if we don't scroll then we will shrink the font to fit into the text area.
-            float widthAtFontSize1 = getMaxStringWidth( pdFont )/1000.f;
-            float availableWidth = getAvailableWidth(boundingBox, getLineWidth(tokens));
-            widthBasedFontSize = availableWidth / widthAtFontSize1;
-        }
-        else if( fontSize == 0 )
-        {
-            float lineWidth = getLineWidth( tokens );
-            float stringWidth = getMaxStringWidth( pdFont );
-            float height = 0;
-            if( pdFont instanceof PDSimpleFont )
-            {
-                height = ((PDSimpleFont)pdFont).getFontDescriptor().getFontBoundingBox().getHeight();
-            }
-            else
-            {
-                //now much we can do, so lets assume font is square and use width
-                //as the height
-                height = pdFont.getAverageFontWidth();
-            }
-            height = height/1000f;
-
-            float availHeight = getAvailableHeight( boundingBox, lineWidth );
-            fontSize = Math.min((availHeight/height), widthBasedFontSize);
-        }
-        return fontSize;
-    }
+		return fontSize;
+	}
 
 	private float getMaxStringWidth( PDFont pdFont ) throws IOException
 	{
@@ -640,14 +641,5 @@
     private float getAvailableWidth( PDRectangle boundingBox, float lineWidth )
     {
         return boundingBox.getWidth() - 2 * lineWidth;
-    }
-
-    /**
-     * calculates the available height of the box.
-     * @return the calculated available height of the box
-     */
-    private float getAvailableHeight( PDRectangle boundingBox, float lineWidth )
-    {
-        return boundingBox.getHeight() - 2 * lineWidth;
     }
 }