FOP-2636: PDF with annotations won't upload to docusign

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop-pdf-images/trunk@1754095 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 9a60d3e..e3b1522 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
@@ -634,7 +634,8 @@
                 //to guess the calculation order.
                 destAcroForm = new PDFDictionary(pdfDoc.getRoot());
             }
-            pdfDoc.registerObject(destAcroForm);
+            pdfDoc.assignObjectNumber(destAcroForm);
+            pdfDoc.addTrailerObject(destAcroForm);
             catalog.put(COSName.ACRO_FORM.getName(), destAcroForm);
         }
         PDFArray clonedFields = (PDFArray) destAcroForm.get(COSName.FIELDS.getName());
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index 37ac612..8d67f93 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -102,6 +102,7 @@
     private static final String Type1Subset3 = "test/resources/t1subset3.pdf";
     private static final String Type1Subset4 = "test/resources/t1subset4.pdf";
     protected static final String ROTATE = "test/resources/rotate.pdf";
+    private static final String ANNOT = "test/resources/annot.pdf";
     private static final String SHADING = "test/resources/shading.pdf";
     private static final String LINK = "test/resources/link.pdf";
     private static final String IMAGE = "test/resources/image.pdf";
@@ -175,7 +176,7 @@
 
     private String writeText(FontInfo fi, String pdf) throws IOException {
         PDDocument doc = PDDocument.load(new File(pdf));
-        PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
         AffineTransform at = new AffineTransform();
         String c = getPDFBoxAdapter().createStreamFromPDFBoxPage(doc, page, pdf, at, fi, new Rectangle());
 //        PDResources sourcePageResources = page.findResources();
@@ -187,7 +188,7 @@
     }
 
     private COSDictionary getFont(PDDocument doc, String internalname) throws IOException {
-        PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
         PDResources sourcePageResources = page.getResources();
         COSDictionary fonts = (COSDictionary)sourcePageResources.getCOSObject().getDictionaryObject(COSName.FONT);
         return (COSDictionary) fonts.getDictionaryObject(internalname);
@@ -305,7 +306,7 @@
         pdfpage.setDocument(pdfdoc);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
         PDDocument doc = PDDocument.load(new File(ROTATE));
-        PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
         AffineTransform at = new AffineTransform();
         Rectangle r = new Rectangle(0, 1650, 842000, 595000);
         String stream = adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
@@ -324,7 +325,7 @@
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
         adapter.setCurrentMCID(5);
         PDDocument doc = PDDocument.load(new File(HELLOTagged));
-        PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
         AffineTransform at = new AffineTransform();
         Rectangle r = new Rectangle(0, 1650, 842000, 595000);
         String stream = adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
@@ -333,6 +334,26 @@
     }
 
     @Test
+    public void testAnnot() throws Exception {
+        PDFDocument pdfdoc = new PDFDocument("");
+        PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
+        pdfpage.setDocument(pdfdoc);
+        pdfpage.setObjectNumber(1);
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
+        PDDocument doc = PDDocument.load(new File(ANNOT));
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
+        AffineTransform at = new AffineTransform();
+        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        pdfdoc.output(os);
+        os.reset();
+        adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
+        pdfdoc.outputTrailer(os);
+        Assert.assertTrue(os.toString("UTF-8").contains("/Fields ["));
+        doc.close();
+    }
+
+    @Test
     public void testLink() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
         PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
@@ -341,7 +362,7 @@
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), pageNumbers);
         PDDocument doc = PDDocument.load(new File(LINK));
-        PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
         AffineTransform at = new AffineTransform();
         Rectangle r = new Rectangle(0, 1650, 842000, 595000);
         String stream = adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
@@ -363,7 +384,7 @@
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), pageNumbers);
         PDDocument doc = PDDocument.load(new File(XFORM));
-        PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
         AffineTransform at = new AffineTransform();
         Rectangle r = new Rectangle(0, 1650, 842000, 595000);
         adapter.createStreamFromPDFBoxPage(doc, page, "key", at, new FontInfo(), r);