Author: msahyoun
Date: Sat Jan 24 07:44:00 2015
New Revision: 1654480

URL: http://svn.apache.org/r1654480
Log:
PDFBOX-2617 correct creation of fields and termination of field tree

Modified:
    
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
    
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java

Modified: 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java?rev=1654480&r1=1654479&r2=1654480&view=diff
==============================================================================
--- 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
 (original)
+++ 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
 Sat Jan 24 07:44:00 2015
@@ -527,32 +527,32 @@ public abstract class PDField implements
             for (int i = 0; i < kids.size(); i++)
             {
                 COSDictionary kidDictionary = (COSDictionary) 
kids.getObject(i);
+                
                 if (kidDictionary == null)
                 {
-                    continue;
+                   continue;
                 }
-                COSDictionary parent = (COSDictionary) 
kidDictionary.getDictionaryObject(COSName.PARENT, COSName.P);
-                if (kidDictionary.getDictionaryObject(COSName.FT) != null
-                        || (parent != null && 
parent.getDictionaryObject(COSName.FT) != null))
+                
+                // Decide if the kid is field or a widget annotation.
+                // A field dictionary that does not have a partial field name 
(T entry)
+                // of its own shall not be considered a field but simply a 
Widget annotation.
+                if (kidDictionary.getDictionaryObject(COSName.T) != null)
                 {
-                    PDField field = PDFieldFactory.createField(acroForm, 
kidDictionary);
-                    if (field != null)
+                    COSDictionary parent = (COSDictionary) 
kidDictionary.getDictionaryObject(COSName.PARENT, COSName.P);
+                    if (kidDictionary.getDictionaryObject(COSName.FT) != null
+                            || (parent != null && 
parent.getDictionaryObject(COSName.FT) != null))
                     {
-                        kidsList.add(field);
+                        PDField field = PDFieldFactory.createField(acroForm, 
kidDictionary);
+                        if (field != null)
+                        {
+                            kidsList.add(field);
+                        }
                     }
                 }
                 else if 
("Widget".equals(kidDictionary.getNameAsString(COSName.SUBTYPE)))
                 {
                     kidsList.add(new PDAnnotationWidget(kidDictionary));
                 }
-                else
-                {
-                    PDField field = PDFieldFactory.createField(acroForm, 
kidDictionary);
-                    if (field != null)
-                    {
-                        kidsList.add(field);
-                    }
-                }
             }
             retval = new COSArrayList<COSObjectable>(kidsList, kids);
         }

Modified: 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java?rev=1654480&r1=1654479&r2=1654480&view=diff
==============================================================================
--- 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
 (original)
+++ 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
 Sat Jan 24 07:44:00 2015
@@ -68,12 +68,7 @@ public class PDFieldFactory
         if( isButton(pdField) )
         {
             int flags = pdField.getFieldFlags();
-            //BJL, I have found that the radio flag bit is not always set
-            //and that sometimes there is just a kids dictionary.
-            //so, if there is a kids dictionary then it must be a radio button
-            //group.
-            COSArray kids = (COSArray)field.getDictionaryObject( 
COSName.getPDFName( "Kids" ) );
-            if( kids != null || isRadio(flags) )
+            if(isRadio(flags) )
             {
                 pdField = new PDRadioCollection( acroForm, field );
             }


Reply via email to