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/19 05:30:44 UTC
svn commit: r1878979 - in /pdfbox/trunk/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: Fri Jun 19 05:30:44 2020
New Revision: 1878979
URL: http://svn.apache.org/viewvc?rev=1878979&view=rev
Log:
PDFBOX-3812: multiline auto size field should not scale above 12pt as suggested by Sebastian Fieber
Added:
pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf (with props)
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1878979&r1=1878978&r2=1878979&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java Fri Jun 19 05:30:44 2020
@@ -795,7 +795,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;
@@ -815,7 +815,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/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java?rev=1878979&r1=1878978&r2=1878979&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/MultilineFieldsTest.java Fri Jun 19 05:30:44 2020
@@ -17,11 +17,17 @@
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.Loader;
+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;
@@ -96,6 +102,60 @@ 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 = Loader.loadPDF(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().getContents());
+
+ 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/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf?rev=1878979&view=auto
==============================================================================
Binary file - no diff available.
Propchange: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX3812-acrobat-multiline-auto.pdf
------------------------------------------------------------------------------
svn:mime-type = application/pdf