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 2017/05/11 14:18:44 UTC
svn commit: r1794840 - in /pdfbox/trunk/pdfbox/src:
main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
test/java/org/apache/pdfbox/pdmodel/interactive/form/HandleDifferentDALevelsTest.java
Author: msahyoun
Date: Thu May 11 14:18:44 2017
New Revision: 1794840
URL: http://svn.apache.org/viewvc?rev=1794840&view=rev
Log:
PDFBOX-3687: respect /DA setting at the widget level over the /DA at the field level
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/HandleDifferentDALevelsTest.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=1794840&r1=1794839&r2=1794840&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 Thu May 11 14:18:44 2017
@@ -26,6 +26,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.contentstream.operator.Operator;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.pdfparser.PDFStreamParser;
import org.apache.pdfbox.pdfwriter.ContentStreamWriter;
import org.apache.pdfbox.pdmodel.PDResources;
@@ -56,7 +57,8 @@ class AppearanceGeneratorHelper
private static final Operator EMC = Operator.getOperator("EMC");
private final PDVariableText field;
- private final PDDefaultAppearanceString defaultAppearance;
+
+ private PDDefaultAppearanceString defaultAppearance;
private String value;
/**
@@ -149,7 +151,15 @@ class AppearanceGeneratorHelper
for (PDAnnotationWidget widget : field.getWidgets())
{
-
+ // some fields have the /Da at the widget level if the
+ // widgets differ in layout.
+ PDDefaultAppearanceString acroFormAppearance = defaultAppearance;
+
+ if (widget.getCOSObject().getDictionaryObject(COSName.DA) != null)
+ {
+ defaultAppearance = getWidgetDefaultAppearanceString(widget);
+ }
+
PDRectangle rect = widget.getRectangle();
if (rect == null)
{
@@ -215,9 +225,19 @@ class AppearanceGeneratorHelper
setAppearanceContent(widget, appearanceStream);
}
+
+ // restore the field level appearance;
+ defaultAppearance = acroFormAppearance;
}
}
+ private PDDefaultAppearanceString getWidgetDefaultAppearanceString(PDAnnotationWidget widget) throws IOException
+ {
+ COSString da = (COSString) widget.getCOSObject().getDictionaryObject(COSName.DA);
+ PDResources dr = field.getAcroForm().getDefaultResources();
+ return new PDDefaultAppearanceString(da, dr);
+ }
+
private int resolveRotation(PDAnnotationWidget widget)
{
PDAppearanceCharacteristicsDictionary characteristicsDictionary = widget.getAppearanceCharacteristics();
@@ -376,10 +396,15 @@ class AppearanceGeneratorHelper
contents.clip();
// get the font
- PDFont font = field.getDefaultAppearanceString().getFont();
+ PDFont font = defaultAppearance.getFont();
// calculate the fontSize (because 0 = autosize)
- float fontSize = calculateFontSize(font, contentRect);
+ float fontSize = defaultAppearance.getFontSize();
+
+ if (fontSize == 0)
+ {
+ fontSize = calculateFontSize(font, contentRect);
+ }
// for a listbox generate the highlight rectangle for the selected
// options
@@ -392,7 +417,7 @@ class AppearanceGeneratorHelper
contents.beginText();
// write the /DA string
- field.getDefaultAppearanceString().writeTo(contents, fontSize);
+ defaultAppearance.writeTo(contents, fontSize);
// calculate the y-position of the baseline
float y;
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/HandleDifferentDALevelsTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/HandleDifferentDALevelsTest.java?rev=1794840&r1=1794839&r2=1794840&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/HandleDifferentDALevelsTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/HandleDifferentDALevelsTest.java Thu May 11 14:18:44 2017
@@ -87,7 +87,7 @@ public class HandleDifferentDALevelsTest
}
// TODO: enable the test after issue 3687 has been fixed
- // @Test
+ @Test
public void checkDifferentLayout() throws IOException
{
PDTextField field = (PDTextField) acroForm.getField("MultipleAnnotations-DifferentLayout");