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 2020/06/18 18:16:07 UTC

svn commit: r1878972 - in /pdfbox/branches/2.0/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/interactive/form/ test/java/org/apache/pdfbox/pdmodel/interactive/form/ test/resources/org/apache/pdfbox/pdmodel/interactive/form/

Author: msahyoun
Date: Thu Jun 18 18:16:07 2020
New Revision: 1878972

URL: http://svn.apache.org/viewvc?rev=1878972&view=rev
Log:
PDFBOX-3812: multiline auto size field should not scale above 12pt as suggested by Sebastian Fieber

Added:
    pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf   (with props)
Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
    pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1878972&r1=1878971&r2=1878972&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java Thu Jun 18 18:16:07 2020
@@ -798,7 +798,7 @@ class AppearanceGeneratorHelper
                 {
                     float width = contentRect.getWidth() - contentRect.getLowerLeftX();
                     float fs = MINIMUM_FONT_SIZE;
-                    while (fs <= MAXIMUM_FONT_SIZE)
+                    while (fs <= DEFAULT_FONT_SIZE)
                     {
                         // determine the number of lines needed for this font and contentRect
                         int numLines = 0;
@@ -818,7 +818,7 @@ class AppearanceGeneratorHelper
                         }
                         fs++;
                     }
-                    return Math.min(fs, MAXIMUM_FONT_SIZE);
+                    return Math.min(fs, DEFAULT_FONT_SIZE);
                 }
 
                 // Acrobat defaults to 12 for multiline text with size 0

Modified: pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java?rev=1878972&r1=1878971&r2=1878972&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java Thu Jun 18 18:16:07 2020
@@ -17,9 +17,16 @@
 
 package org.apache.pdfbox.pdmodel.interactive.form;
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.File;
 import java.io.IOException;
+
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.pdfparser.PDFStreamParser;
 import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
 import org.apache.pdfbox.rendering.TestPDFToImage;
 import org.junit.After;
 import org.junit.Before;
@@ -94,6 +101,59 @@ public class MultilineFieldsTest
             System.err.println ("Rendering of " + file + " failed or is not identical to expected rendering in " + IN_DIR + " directory");
         }       
     }
+
+    // Test for PDFBOX-3812
+    @Test
+    public void testMultilineAuto() throws IOException
+    {
+        PDDocument document = PDDocument.load(new File(IN_DIR, "PDFBOX3812-acrobat-multiline-auto.pdf"));
+        PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm();
+
+        // Get and store the field sizes in the original PDF
+        PDTextField fieldMultiline = (PDTextField) acroForm.getField("Multiline");
+        float fontSizeMultiline = getFontSizeFromAppearanceStream(fieldMultiline);
+
+        PDTextField fieldSingleline = (PDTextField) acroForm.getField("Singleline");
+        float fontSizeSingleline = getFontSizeFromAppearanceStream(fieldSingleline);
+
+        PDTextField fieldMultilineAutoscale = (PDTextField) acroForm.getField("MultilineAutoscale");
+        float fontSizeMultilineAutoscale = getFontSizeFromAppearanceStream(fieldMultilineAutoscale);
+
+        PDTextField fieldSinglelineAutoscale = (PDTextField) acroForm.getField("SinglelineAutoscale");
+        float fontSizeSinglelineAutoscale = getFontSizeFromAppearanceStream(fieldSinglelineAutoscale);
+
+        fieldMultiline.setValue("Multiline - Fixed");
+        fieldSingleline.setValue("Singleline - Fixed");
+        fieldMultilineAutoscale.setValue("Multiline - auto");
+        fieldSinglelineAutoscale.setValue("Singleline - auto");
+
+        assertEquals(fontSizeMultiline, getFontSizeFromAppearanceStream(fieldMultiline), 0.001f);
+        assertEquals(fontSizeSingleline, getFontSizeFromAppearanceStream(fieldSingleline), 0.001f);
+        assertEquals(fontSizeMultilineAutoscale, getFontSizeFromAppearanceStream(fieldMultilineAutoscale), 0.001f);
+        assertEquals(fontSizeSinglelineAutoscale, getFontSizeFromAppearanceStream(fieldSinglelineAutoscale), 0.025f);
+    }
+
+    private float getFontSizeFromAppearanceStream(PDField field) throws IOException
+    {
+    	PDAnnotationWidget widget = field.getWidgets().get(0);
+    	PDFStreamParser parser = new PDFStreamParser(widget.getNormalAppearanceStream());
+    	
+    	Object token = parser.parseNextToken();
+    	    	
+    	while (token != null)
+    	{
+            if (token instanceof COSName && ((COSName) token).getName().equals("Helv"))
+    		{
+                token = parser.parseNextToken();
+                if (token != null && token instanceof COSNumber)
+                {
+                    return ((COSNumber) token).floatValue();
+                }
+            }
+            token = parser.parseNextToken();
+        }
+        return 0;
+    }
     
     @After
     public void tearDown() throws IOException

Added: pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf?rev=1878972&view=auto
==============================================================================
Binary file - no diff available.

Propchange: pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/pdf