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/03/06 16:42:21 UTC
svn commit: r1785684 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel:
fdf/FDFField.java interactive/form/PDField.java
Author: msahyoun
Date: Mon Mar 6 16:42:20 2017
New Revision: 1785684
URL: http://svn.apache.org/viewvc?rev=1785684&view=rev
Log:
PDFBOX-3596: handle string values from FDF/XFDF import properly; update appearance stream after value update
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java?rev=1785684&r1=1785683&r2=1785684&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java Mon Mar 6 16:42:20 2017
@@ -250,6 +250,7 @@ public class FDFField implements COSObje
public COSBase getCOSValue() throws IOException
{
COSBase value = field.getDictionaryObject(COSName.V);
+
if (value instanceof COSName)
{
return value;
@@ -288,7 +289,7 @@ public class FDFField implements COSObje
}
else if (value instanceof String)
{
- cos = COSName.getPDFName((String) value);
+ cos = new COSString((String) value);
}
else if (value instanceof COSObjectable)
{
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=1785684&r1=1785683&r2=1785684&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 Mon Mar 6 16:42:20 2017
@@ -23,6 +23,9 @@ import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.cos.COSString;
+import org.apache.pdfbox.pdmodel.common.COSArrayList;
import org.apache.pdfbox.pdmodel.common.COSObjectable;
import org.apache.pdfbox.pdmodel.fdf.FDFField;
import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions;
@@ -237,10 +240,37 @@ public abstract class PDField implements
void importFDF(FDFField fdfField) throws IOException
{
COSBase fieldValue = fdfField.getCOSValue();
- if (fieldValue != null)
+
+ if (fieldValue != null && this instanceof PDTerminalField)
+ {
+ PDTerminalField currentField = (PDTerminalField) this;
+
+ if (fieldValue instanceof COSName)
+ {
+ currentField.setValue(((COSName) fieldValue).getName());;
+ }
+ else if (fieldValue instanceof COSString)
+ {
+ currentField.setValue(((COSString) fieldValue).getString());
+ }
+ else if (fieldValue instanceof COSStream)
+ {
+ currentField.setValue(((COSStream) fieldValue).toTextString());
+ }
+ else if (fieldValue instanceof COSArray && this instanceof PDChoice)
+ {
+ ((PDChoice) this).setValue(COSArrayList.convertCOSStringCOSArrayToList((COSArray) fieldValue));
+ }
+ else if (fieldValue != null)
+ {
+ throw new IOException("Error:Unknown type for field import" + fieldValue);
+ }
+ }
+ else if (fieldValue != null)
{
dictionary.setItem(COSName.V, fieldValue);
}
+
Integer ff = fdfField.getFieldFlags();
if (ff != null)
{