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
         }
     }
 
-
 }