You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2015/05/15 21:16:12 UTC
svn commit: r1679631 - in /pdfbox/trunk/pdfbox/src:
main/java/org/apache/pdfbox/pdmodel/
main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/
main/java/org/apache/pdfbox/pdmodel/interactive/form/
test/java/org/apache/pdfbox/pdmodel...
Author: jahewson
Date: Fri May 15 19:16:12 2015
New Revision: 1679631
URL: http://svn.apache.org/r1679631
Log:
PDFBOX-2333: Make sure to call applyChange() at the end of setValue()
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckbox.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestListBox.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java Fri May 15 19:16:12 2015
@@ -51,6 +51,7 @@ import org.apache.pdfbox.pdmodel.encrypt
import org.apache.pdfbox.pdmodel.encryption.SecurityHandlerFactory;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature;
@@ -229,7 +230,16 @@ public class PDDocument implements Close
PDSignatureField signatureField = findSignatureField(fields, sigObject);
if (signatureField == null)
{
- signatureField = createSignatureField(acroForm, sigObject, page);
+ signatureField = new PDSignatureField(acroForm);
+ // set visibility flags
+ if (options.getVisualSignature() == null)
+ {
+ signatureField.getWidget().setAnnotationFlags(PDAnnotationWidget.FLAG_NO_VIEW);
+ }
+ // append the signature object
+ signatureField.setValue(sigObject);
+ // backward linking
+ signatureField.getWidget().setPage(page);
}
// Set the AcroForm Fields
@@ -265,17 +275,6 @@ public class PDDocument implements Close
page.getCOSObject().setNeedToBeUpdated(true);
}
- private PDSignatureField createSignatureField(PDAcroForm acroForm, PDSignature sigObject, PDPage page)
- throws IOException
- {
- PDSignatureField signatureField = new PDSignatureField(acroForm);
- // append the signature object
- signatureField.setSignature(sigObject);
- // backward linking
- signatureField.getWidget().setPage(page);
- return signatureField;
- }
-
// search acroform field list for signature field with specific signature dictionary
private PDSignatureField findSignatureField(List<PDField> fields, PDSignature sigObject)
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java Fri May 15 19:16:12 2015
@@ -103,7 +103,7 @@ public class PDVisibleSigBuilder impleme
String signatureName) throws IOException
{
PDSignature pdSignature = new PDSignature();
- pdSignatureField.setSignature(pdSignature);
+ pdSignatureField.setValue(pdSignature);
pdSignatureField.getWidget().setPage(page);
page.getAnnotations().add(pdSignatureField.getWidget());
pdSignature.setName(signatureName);
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckbox.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckbox.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckbox.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckbox.java Fri May 15 19:16:12 2015
@@ -87,7 +87,7 @@ public final class PDCheckbox extends PD
/**
* Checks the check box.
*/
- public void check()
+ public void check() throws IOException
{
String onValue = getOnValue();
setValue(onValue);
@@ -156,18 +156,20 @@ public final class PDCheckbox extends PD
}
@Override
- public void setValue(String value)
+ public void setValue(String value) throws IOException
{
+ dictionary.setName(COSName.V, value);
+
+ // update the appearance state (AS)
if (value == null)
{
- dictionary.removeItem(COSName.V);
dictionary.setItem(COSName.AS, COSName.OFF);
}
else
{
- COSName nameValue = COSName.getPDFName(value);
- dictionary.setItem(COSName.V, nameValue);
- dictionary.setItem(COSName.AS, nameValue);
+ dictionary.setName(COSName.AS, value);
}
+
+ applyChange();
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java Fri May 15 19:16:12 2015
@@ -269,7 +269,7 @@ public abstract class PDChoice extends P
/**
* This will set the indices of the selected options - the 'I' key.
* <p>
- * This method is preferred over {@link #setValue(List)} for choice fields which
+ * This method is preferred over {@link #setValues(List)} for choice fields which
* <ul>
* <li>do support multiple selections</li>
* <li>have export values with the same value</li>
@@ -404,40 +404,13 @@ public abstract class PDChoice extends P
{
dictionary.setFlag(COSName.FF, FLAG_COMBO, combo);
}
-
- /**
- * setValue sets the entry "V" to the given value.
- *
- * @param value the value
- */
- public void setValue(String value)
- {
- if (value != null)
- {
- if (getOptions().indexOf(value) == -1)
- {
- throw new IllegalArgumentException("The list box does not contain the given value.");
- }
- else
- {
- dictionary.setString(COSName.V, value);
- // remove I key for single valued choice field
- setSelectedOptionsIndex(null);
- }
- }
- else
- {
- dictionary.removeItem(COSName.V);
- }
- // TODO create/update appearance
- }
/**
- * setValue sets the entry "V" to the given value.
+ * setValues sets the entry "V" to the given values.
*
* @param values the list of values
*/
- public void setValue(List<String> values)
+ public void setValues(List<String> values) throws IOException
{
if (values != null && !values.isEmpty())
{
@@ -456,8 +429,8 @@ public abstract class PDChoice extends P
{
dictionary.removeItem(COSName.V);
}
- // TODO create/update appearance
- }
+ applyChange();
+ }
@Override
public List<String> getValue()
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java Fri May 15 19:16:12 2015
@@ -16,6 +16,7 @@
*/
package org.apache.pdfbox.pdmodel.interactive.form;
+import java.io.IOException;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
@@ -73,7 +74,7 @@ public final class PDComboBox extends PD
}
@Override
- public void setValue(String value)
+ public void setValue(String value) throws IOException
{
if (value != null)
{
@@ -95,6 +96,6 @@ public final class PDComboBox extends PD
{
dictionary.removeItem(COSName.V);
}
- // TODO create/update appearance
+ applyChange();
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java Fri May 15 19:16:12 2015
@@ -180,10 +180,10 @@ public abstract class PDField implements
* As a result it might be necessary to check the type of the value before
* reusing it.
*
- * @param fieldValue The new field value.
+ * @param value The new field value.
* @throws IOException if there is an error setting the field value.
*/
- public abstract void setValue(String fieldValue) throws IOException;
+ public abstract void setValue(String value) throws IOException;
/**
* sets the field to be read-only.
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java Fri May 15 19:16:12 2015
@@ -16,6 +16,7 @@
*/
package org.apache.pdfbox.pdmodel.interactive.form;
+import java.io.IOException;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
@@ -75,4 +76,27 @@ public final class PDListBox extends PDC
dictionary.removeItem(COSName.TI);
}
}
+
+ @Override
+ public void setValue(String value) throws IOException
+ {
+ if (value != null)
+ {
+ if (getOptions().indexOf(value) == -1)
+ {
+ throw new IllegalArgumentException("The list box does not contain the given value.");
+ }
+ else
+ {
+ dictionary.setString(COSName.V, value);
+ // remove I key for single valued choice field
+ setSelectedOptionsIndex(null);
+ }
+ }
+ else
+ {
+ dictionary.removeItem(COSName.V);
+ }
+ applyChange();
+ }
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java Fri May 15 19:16:12 2015
@@ -160,10 +160,10 @@ public class PDNonTerminalField extends
}
@Override
- public void setValue(String fieldValue)
+ public void setValue(String value)
{
// There is no need to look up the parent hierarchy within a non terminal field
- dictionary.setString(COSName.V, fieldValue);
+ dictionary.setString(COSName.V, value);
}
@Override
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java Fri May 15 19:16:12 2015
@@ -91,9 +91,9 @@ public class PDPushButton extends PDButt
}
@Override
- public void setValue(String fieldValue)
+ public void setValue(String value)
{
- if (fieldValue != null && !fieldValue.isEmpty())
+ if (value != null && !value.isEmpty())
{
throw new IllegalArgumentException("A PDPushButton shall not use the V entry in the field dictionary");
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java Fri May 15 19:16:12 2015
@@ -150,22 +150,22 @@ public final class PDRadioButton extends
}
@Override
- public void setValue(String fieldValue)
+ public void setValue(String value) throws IOException
{
- COSName nameForValue = COSName.getPDFName(fieldValue);
- dictionary.setItem(COSName.V, nameForValue);
-
+ dictionary.setName(COSName.V, value);
+ // update the appearance state (AS)
for (PDAnnotationWidget widget : getWidgets())
{
PDAppearanceEntry appearanceEntry = widget.getAppearance().getNormalAppearance();
- if (((COSDictionary)appearanceEntry.getCOSObject()).containsKey(nameForValue))
+ if (((COSDictionary)appearanceEntry.getCOSObject()).containsKey(value))
{
- widget.getCOSObject().setName(COSName.AS, fieldValue);
+ widget.getCOSObject().setName(COSName.AS, value);
}
else
{
widget.getCOSObject().setItem(COSName.AS, COSName.OFF);
}
}
+ applyChange();
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java Fri May 15 19:16:12 2015
@@ -22,6 +22,7 @@ import java.util.Set;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSeedValue;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature;
@@ -90,8 +91,10 @@ public class PDSignatureField extends PD
* Add a signature dictionary to the signature field.
*
* @param value is the PDSignatureField
+ * @deprecated Use {@link #setValue(PDSignature)} instead.
*/
- public void setSignature(PDSignature value)
+ @Deprecated
+ public void setSignature(PDSignature value) throws IOException
{
setValue(value);
}
@@ -112,20 +115,14 @@ public class PDSignatureField extends PD
*
* @param value is the PDSignatureField
*/
- public void setValue(PDSignature value)
+ public void setValue(PDSignature value) throws IOException
{
- if (value == null)
- {
- dictionary.removeItem(COSName.V);
- }
- else
- {
- dictionary.setItem(COSName.V, (PDSignature)value);
- }
+ dictionary.setItem(COSName.V, value);
+ applyChange();
}
@Override
- public void setValue(String fieldValue)
+ public void setValue(String value)
{
// Signature fields don't support the strings for value
throw new IllegalArgumentException("Signature fields don't support a string for the value entry.");
@@ -198,7 +195,19 @@ public class PDSignatureField extends PD
@Override
void constructAppearances() throws IOException
{
- // TODO: implement appearance generation for signatures
- throw new UnsupportedOperationException("not implemented");
+ PDAnnotationWidget widget = this.getWidgets().get(0);
+ if (widget != null)
+ {
+ // check if the signature is visible
+ if (widget.getRectangle() != null &&
+ widget.getRectangle().getHeight() == 0 && widget.getRectangle().getWidth() == 0 ||
+ widget.isNoView() || widget.isHidden())
+ {
+ return;
+ }
+
+ // TODO: implement appearance generation for signatures
+ throw new UnsupportedOperationException("not implemented");
+ }
}
}
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestListBox.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestListBox.java?rev=1679631&r1=1679630&r2=1679631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestListBox.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestListBox.java Fri May 15 19:16:12 2015
@@ -98,6 +98,9 @@ public class TestListBox extends TestCas
PDAcroForm form = new PDAcroForm( doc );
PDChoice choice = new PDListBox(form);
+ // appearance construction is not implemented, so turn on NeedAppearances
+ form.setNeedAppearances(true);
+
// test that there are no nulls returned for an empty field
// only specific methods are tested here
assertNotNull(choice.getOptions());
@@ -137,7 +140,7 @@ public class TestListBox extends TestCas
// without multiselect setting multiple items shall fail
try
{
- choice.setValue(exportValues);
+ choice.setValues(exportValues);
fail( "Missing IllegalArgumentException" );
}
catch( IllegalArgumentException e )
@@ -148,7 +151,7 @@ public class TestListBox extends TestCas
// ensure that the choice field does allow multiple selections
choice.setMultiSelect(true);
// now this call must suceed
- choice.setValue(exportValues);
+ choice.setValues(exportValues);
// assert that the option values have been correctly set
COSArray valueItems = (COSArray) choice.getCOSObject().getItem(COSName.V);