FOP-2264: PDF form is offset; patch submitted by Simon Steiner.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop-pdf-images/trunk@1502718 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
index 20bb1da..a0aa583 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -124,7 +125,7 @@
             cacheClonedObject(keyBase, array);
             List list = (List)base;
             for (int i = 0; i < list.size(); i++) {
-                array.add(cloneForNewDocument(list.get(i)));
+                array.add(cloneForNewDocument(list.get(i), list.get(i), exclude));
             }
             return array;
         } else if (base instanceof COSObjectable && !(base instanceof COSBase)) {
@@ -138,7 +139,7 @@
                         + object.getObjectNumber().longValue()
                         + " " + object.getGenerationNumber().longValue());
             }
-            Object obj = cloneForNewDocument(object.getObject(), object);
+            Object obj = cloneForNewDocument(object.getObject(), object, exclude);
             if (obj instanceof PDFObject) {
                 PDFObject pdfobj = (PDFObject)obj;
                 //pdfDoc.registerObject(pdfobj);
@@ -160,7 +161,7 @@
             cacheClonedObject(keyBase, newArray);
             COSArray array = (COSArray)base;
             for (int i = 0; i < array.size(); i++) {
-                newArray.add(cloneForNewDocument(array.get(i)));
+                newArray.add(cloneForNewDocument(array.get(i), array.get(i), exclude));
             }
             return newArray;
         } else if (base instanceof COSStreamArray) {
@@ -197,7 +198,7 @@
             for (int i = 0; i < keys.size(); i++) {
                 COSName key = (COSName)keys.get(i);
                 if (!exclude.contains(key)) {
-                    (newDict).put(key.getName(), cloneForNewDocument(dic.getItem(key)));
+                    (newDict).put(key.getName(), cloneForNewDocument(dic.getItem(key), dic.getItem(key), exclude));
                 }
             }
             return newDict;
@@ -461,7 +462,11 @@
                         field = (COSDictionary) fieldObject.getObject();
                     }
                     fields.add(fieldObject);
-                    Collection exclude = Collections.singletonList(COSName.P);
+                    Collection<COSName> exclude = new ArrayList<COSName>();
+                    exclude.add(COSName.P);
+                    if (((COSDictionary)annot.getObject()).getItem(COSName.getPDFName("StructParent")) != null) {
+                        exclude.add(COSName.PARENT);
+                    }
                     PDFObject clonedAnnot = (PDFObject) cloneForNewDocument(annot, annot, exclude);
                     targetPage.addAnnotation(clonedAnnot);
                 }
@@ -497,7 +502,7 @@
         }
         for (Iterator iter = fields.iterator(); iter.hasNext();) {
             COSObject field = (COSObject) iter.next();
-            PDFDictionary clone = (PDFDictionary) cloneForNewDocument(field);
+            PDFDictionary clone = (PDFDictionary) cloneForNewDocument(field, field, Arrays.asList(COSName.KIDS));
             clonedFields.add(clone);
         }
     }