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
{