Author: tilman
Date: Wed Feb  7 08:11:51 2024
New Revision: 1915613

URL: http://svn.apache.org/viewvc?rev=1915613&view=rev
Log:
PDFBOX-5763: avoid Infinity, as suggested by GooDer; closes #183

Modified:
    
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
    
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java

Modified: 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1915613&r1=1915612&r2=1915613&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
 (original)
+++ 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
 Wed Feb  7 08:11:51 2024
@@ -909,6 +909,11 @@ class AppearanceGeneratorHelper
                 }
 
                 float heightBasedFontSize = contentRect.getHeight() / height * 
yScalingFactor;
+                if (Float.isInfinite(widthBasedFontSize))
+                {
+                    // PDFBOX-5763: avoids -Infinity if empty value and tiny 
rectangle
+                    return heightBasedFontSize;
+                }
                 
                 return Math.min(heightBasedFontSize, widthBasedFontSize);
             }

Modified: 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java?rev=1915613&r1=1915612&r2=1915613&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java
 (original)
+++ 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/annotation/AppearanceGenerationTest.java
 Wed Feb  7 08:11:51 2024
@@ -31,7 +31,13 @@ import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdfparser.PDFStreamParser;
 import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType1Font;
+import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
+import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
+import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
 import org.apache.pdfbox.rendering.TestPDFToImage;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -145,7 +151,47 @@ class AppearanceGenerationTest
             System.out.println("Rendering of " + file + " failed or is not 
identical to expected rendering in " + IN_DIR + " directory");
         }
     }
-    
+
+    /**
+     * PDFBOX-5763: check that -Infinity is avoided. The test is based on a 
slightly modified
+     * CreateSimpleForm example where the field is tiny and has a 0 (variable) 
font size and no
+     * content.
+     *
+     * @throws IOException
+     */
+    @Test
+    void testTinyHorizontalFieldWith0FontSize() throws IOException
+    {
+        // Create a new document with an empty page.
+        try (PDDocument document = new PDDocument())
+        {
+            PDPage page = new PDPage(PDRectangle.A4);
+            document.addPage(page);
+            
+            PDFont font = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
+            PDResources resources = new PDResources();
+            resources.put(COSName.HELV, font);
+            PDAcroForm acroForm = new PDAcroForm(document);
+            document.getDocumentCatalog().setAcroForm(acroForm);
+            acroForm.setDefaultResources(resources);
+
+            String defaultAppearanceString = "/Helv 0 Tf 0 g";
+            acroForm.setDefaultAppearance(defaultAppearanceString);
+            PDTextField textBox = new PDTextField(acroForm);
+            textBox.setPartialName("SampleField");
+            textBox.setDefaultAppearance(defaultAppearanceString);
+            acroForm.getFields().add(textBox);
+
+            PDAnnotationWidget widget = textBox.getWidgets().get(0);
+            PDRectangle rect = new PDRectangle(50, 750, 1, 50);
+            widget.setRectangle(rect);
+            widget.setPage(page);
+            page.getAnnotations().add(widget);
+
+            textBox.setValue(""); // mayhem happened here
+        }
+    }
+
     @AfterEach
     public void tearDown() throws IOException
     {


Reply via email to