Author: msahyoun
Date: Sat Jan 24 07:20:52 2015
New Revision: 1654479

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

Modified:
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTreeNode.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTreeNode.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTreeNode.java?rev=1654479&r1=1654478&r2=1654479&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTreeNode.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTreeNode.java
 Sat Jan 24 07:20:52 2015
@@ -613,28 +613,28 @@ public abstract class PDFieldTreeNode im
                 {
                     continue;
                 }
-                COSDictionary parentDictionary = (COSDictionary) 
kidDictionary.getDictionaryObject(
-                        COSName.PARENT, COSName.P);
-                if (kidDictionary.getDictionaryObject(COSName.FT) != null
-                        || (parentDictionary != null && 
parentDictionary.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)
                 {
-                    PDFieldTreeNode field = 
PDFieldTreeNode.createField(acroForm, kidDictionary, this);
-                    if (field != null)
+                    COSDictionary parentDictionary = (COSDictionary) 
kidDictionary.getDictionaryObject(
+                            COSName.PARENT, COSName.P);
+                    if (kidDictionary.getDictionaryObject(COSName.FT) != null
+                            || (parentDictionary != null && 
parentDictionary.getDictionaryObject(COSName.FT) != null))
                     {
-                        kidsList.add(field);
+                        PDFieldTreeNode field = 
PDFieldTreeNode.createField(acroForm, kidDictionary, this);
+                        if (field != null)
+                        {
+                            kidsList.add(field);
+                        }
                     }
                 }
-                else if 
("Widget".equals(kidDictionary.getNameAsString(COSName.SUBTYPE)))
-                {
-                    kidsList.add(new PDAnnotationWidget(kidDictionary));
-                }
                 else
                 {
-                    PDFieldTreeNode field = 
PDFieldTreeNode.createField(acroForm, kidDictionary, this);
-                    if (field != null)
-                    {
-                        kidsList.add(field);
-                    }
+                    kidsList.add(new PDAnnotationWidget(kidDictionary));
                 }
             }
             retval = new COSArrayList<COSObjectable>(kidsList, kids);
@@ -831,7 +831,7 @@ public abstract class PDFieldTreeNode im
             // 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.
-            if ((flags & PDButton.FLAG_RADIO) != 0 || 
field.getDictionaryObject(COSName.KIDS) != null)
+            if ((flags & PDButton.FLAG_RADIO) != 0)
             {
                 return new PDRadioButton(form, field, parentNode);
             }


Reply via email to