You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ju...@apache.org on 2010/08/09 15:13:07 UTC
svn commit: r983631 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceField.java
Author: jukka
Date: Mon Aug 9 13:13:06 2010
New Revision: 983631
URL: http://svn.apache.org/viewvc?rev=983631&view=rev
Log:
PDFBOX-786: PDChoiceField's implementation of SetValue does not work for all PDF forms. Sometimes it throws ClassCastException
Patch by Yonas Jongkind
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceField.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceField.java?rev=983631&r1=983630&r2=983631&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceField.java Mon Aug 9 13:13:06 2010
@@ -21,9 +21,11 @@ import java.io.IOException;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSString;
-import org.apache.pdfbox.cos.COSInteger;
+import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
+import org.apache.pdfbox.pdmodel.interactive.form.PDVariableText;
/**
* A class for handling the PDF field as a choicefield.
@@ -63,12 +65,14 @@ public class PDChoiceField extends PDVar
}
else
{
- COSBase option = options.getObject( 0 );
- if( option instanceof COSArray )
- {
- for( int i=0; i<options.size() && indexSelected == -1; i++ )
+ // YXJ: Changed the order of the loops. Acrobat produces PDF's
+ // where sometimes there is 1 string and the rest arrays.
+ // This code works either way.
+ for( int i=0; i<options.size() && indexSelected == -1; i++ ) {
+ COSBase option = options.getObject( i );
+ if( option instanceof COSArray )
{
- COSArray keyValuePair = (COSArray)options.get( i );
+ COSArray keyValuePair = (COSArray)option;
COSString key = (COSString)keyValuePair.getObject( 0 );
COSString value = (COSString)keyValuePair.getObject( 1 );
if( optionValue.equals( key.getString() ) || optionValue.equals( value.getString() ) )
@@ -80,12 +84,9 @@ public class PDChoiceField extends PDVar
indexSelected = i;
}
}
- }
- else
- {
- for( int i=0; i<options.size() && indexSelected == -1; i++ )
+ else
{
- COSString value = (COSString)options.get( i );
+ COSString value = (COSString)option;
if( optionValue.equals( value.getString() ) )
{
super.setValue( optionValue );
@@ -109,5 +110,4 @@ public class PDChoiceField extends PDVar
}
}
-
}