You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2015/03/20 00:59:51 UTC

svn commit: r1667904 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/cos/ main/java/org/apache/pdfbox/pdmodel/interactive/form/ test/java/org/apache/pdfbox/pdmodel/interactive/form/

Author: msahyoun
Date: Thu Mar 19 23:59:50 2015
New Revision: 1667904

URL: http://svn.apache.org/r1667904
Log:
PDFBOX-2718 allow to create new AcroForm fields from scratch

Added:
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDButtonTest.java   (with props)
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceTest.java   (with props)
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextFieldTest.java   (with props)
Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureFieldTest.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Thu Mar 19 23:59:50 2015
@@ -96,6 +96,8 @@ public final class COSName extends COSBa
     public static final COSName BOUNDS = new COSName("Bounds");
     public static final COSName BPC = new COSName("BPC");
     public static final COSName BS = new COSName("BS");
+    //** Acro form field type for button fields.
+    public static final COSName BTN = new COSName("Btn");
     public static final COSName BYTERANGE = new COSName("ByteRange");
     // C
     public static final COSName C = new COSName("C");
@@ -112,6 +114,8 @@ public final class COSName extends COSBa
     public static final COSName CENTER_WINDOW = new COSName("CenterWindow");
     public static final COSName CF = new COSName("CF");
     public static final COSName CFM = new COSName("CFM");
+    //** Acro form field type for choice fields.
+    public static final COSName CH = new COSName("Ch");
     public static final COSName CHAR_PROCS = new COSName("CharProcs");
     public static final COSName CHAR_SET = new COSName("CharSet");
     public static final COSName CICI_SIGNIT = new COSName("CICI.SignIt");
@@ -472,6 +476,8 @@ public final class COSName extends COSBa
     public static final COSName TRUE_TYPE = new COSName("TrueType");
     public static final COSName TRUSTED_MODE = new COSName("TrustedMode");
     public static final COSName TU = new COSName("TU");
+    /** Acro form field type for text field. */
+    public static final COSName TX = new COSName("Tx");
     public static final COSName TYPE = new COSName("Type");
     public static final COSName TYPE0 = new COSName("Type0");
     public static final COSName TYPE1 = new COSName("Type1");

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java Thu Mar 19 23:59:50 2015
@@ -66,9 +66,10 @@ public abstract class PDButton extends P
      *
      * @param theAcroForm The acroform.
      */
-    PDButton(PDAcroForm theAcroForm)
+    public PDButton(PDAcroForm theAcroForm)
     {
         super( theAcroForm );
+        getDictionary().setItem(COSName.FT, COSName.BTN);
     }
     
     /**
@@ -78,11 +79,52 @@ public abstract class PDButton extends P
      * @param field the PDF object to represent as a field.
      * @param parentNode the parent node of the node to be created
      */
-    protected PDButton(PDAcroForm acroForm, COSDictionary field, PDFieldTreeNode parentNode)
+    public PDButton(PDAcroForm acroForm, COSDictionary field, PDFieldTreeNode parentNode)
     {
         super(acroForm, field, parentNode);
     }
     
+    /**
+     * Determines if push button bit is set.
+     * 
+     * @return true if type of button field is a push button.
+     */
+    public boolean isPushButton()
+    {
+        return getDictionary().getFlag( COSName.FF, FLAG_PUSHBUTTON );
+    }
+
+    /**
+     * Set the push button bit.
+     *
+     * @param pushbutton if true the button field is treated as a push button field.
+     */
+    public void setPushButton( boolean pushbutton )
+    {
+        getDictionary().setFlag( COSName.FF, FLAG_PUSHBUTTON, pushbutton );
+    }
+
+    /**
+     * Determines if radio button bit is set.
+     * 
+     * @return true if type of button field is a push button.
+     */
+    public boolean isRadioButton()
+    {
+        return getDictionary().getFlag( COSName.FF, FLAG_RADIO );
+    }
+
+    /**
+     * Set the radio button bit.
+     *
+     * @param radiobutton if true the button field is treated as a radio button field.
+     */
+    public void setRadioButton( boolean radiobutton )
+    {
+        getDictionary().setFlag( COSName.FF, FLAG_RADIO, radiobutton );
+    }   
+    
+    
     @Override
     public String getDefaultValue() throws IOException
     {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java Thu Mar 19 23:59:50 2015
@@ -50,9 +50,10 @@ public abstract class PDChoice extends P
      *
      * @param theAcroForm The acroform.
      */
-    protected PDChoice(PDAcroForm theAcroForm)
+    public PDChoice(PDAcroForm theAcroForm)
     {
         super( theAcroForm );
+        getDictionary().setItem(COSName.FT, COSName.CH);
     }
 
     /**
@@ -62,7 +63,7 @@ public abstract class PDChoice extends P
      * @param field the PDF object to represent as a field.
      * @param parentNode the parent node of the node to be created
      */
-    protected PDChoice(PDAcroForm acroForm, COSDictionary field, PDFieldTreeNode parentNode)
+    public PDChoice(PDAcroForm acroForm, COSDictionary field, PDFieldTreeNode parentNode)
     {
         super(acroForm, field, parentNode);
     }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java Thu Mar 19 23:59:50 2015
@@ -30,6 +30,17 @@ public final class PDComboBox extends PD
      *  Ff-flag.
      */
     private static final int FLAG_EDIT = 1 << 18;
+    
+    /**
+     * @see PDFieldTreeNode#PDFieldTreeNode(PDAcroForm)
+     *
+     * @param theAcroForm The acroform.
+     */
+    public PDComboBox(PDAcroForm theAcroForm)
+    {
+        super( theAcroForm );
+        setCombo(true);
+    }    
 
     /**
      * Constructor.

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java Thu Mar 19 23:59:50 2015
@@ -32,11 +32,12 @@ public final class PDListBox extends PDC
      *
      * @param theAcroForm The acroform.
      */
-    protected PDListBox(PDAcroForm theAcroForm)
+    public PDListBox(PDAcroForm theAcroForm)
     {
         super( theAcroForm );
     }
     
+    
     /**
      * Constructor.
      * 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java Thu Mar 19 23:59:50 2015
@@ -29,7 +29,17 @@ import org.apache.pdfbox.cos.COSDictiona
  */
 public class PDPushButton extends PDButton
 {
-
+    /**
+     * @see PDFieldTreeNode#PDFieldTreeNode(PDAcroForm)
+     *
+     * @param theAcroForm The acroform.
+     */
+    public PDPushButton(PDAcroForm theAcroForm)
+    {
+        super( theAcroForm );
+        setPushButton(true);
+    }
+    
     /**
      * Constructor.
      * 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java Thu Mar 19 23:59:50 2015
@@ -47,6 +47,7 @@ public final class PDRadioButton extends
     public PDRadioButton(PDAcroForm theAcroForm)
     {
         super( theAcroForm );
+        setRadioButton(true);
     }
     
     /**

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java Thu Mar 19 23:59:50 2015
@@ -54,6 +54,7 @@ public final class PDTextField extends P
     public PDTextField(PDAcroForm theAcroForm)
     {
         super( theAcroForm );
+        getDictionary().setItem(COSName.FT, COSName.TX);
     }
 
     /**

Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDButtonTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDButtonTest.java?rev=1667904&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDButtonTest.java (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDButtonTest.java Thu Mar 19 23:59:50 2015
@@ -0,0 +1,61 @@
+package org.apache.pdfbox.pdmodel.interactive.form;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test for the PDButton class.
+ *
+ */
+public class PDButtonTest
+{
+    private PDDocument document;
+    private PDAcroForm acroForm;
+
+    @Before
+    public void setUp()
+    {
+        document = new PDDocument();
+        acroForm = new PDAcroForm(document);
+    }
+
+    @Test
+    public void createCheckBox()
+    {
+        PDButton buttonField = new PDCheckbox(acroForm);
+        
+        assertEquals(buttonField.getFieldType(), buttonField.getDictionary().getNameAsString(COSName.FT));
+        assertEquals(buttonField.getFieldType(), "Btn");
+        assertFalse(buttonField.isPushButton());
+        assertFalse(buttonField.isRadioButton());
+    }
+
+    @Test
+    public void createPushButton()
+    {
+        PDButton buttonField = new PDPushButton(acroForm);
+        
+        assertEquals(buttonField.getFieldType(), buttonField.getDictionary().getNameAsString(COSName.FT));
+        assertEquals(buttonField.getFieldType(), "Btn");
+        assertTrue(buttonField.isPushButton());
+        assertFalse(buttonField.isRadioButton());
+    }
+
+    @Test
+    public void createRadioButton()
+    {
+        PDButton buttonField = new PDRadioButton(acroForm);
+        
+        assertEquals(buttonField.getFieldType(), buttonField.getDictionary().getNameAsString(COSName.FT));
+        assertEquals(buttonField.getFieldType(), "Btn");
+        assertTrue(buttonField.isRadioButton());
+        assertFalse(buttonField.isPushButton());
+    }
+}
+

Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDButtonTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDButtonTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceTest.java?rev=1667904&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceTest.java (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceTest.java Thu Mar 19 23:59:50 2015
@@ -0,0 +1,49 @@
+package org.apache.pdfbox.pdmodel.interactive.form;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test for the PDChoice class.
+ *
+ */
+public class PDChoiceTest
+{
+    private PDDocument document;
+    private PDAcroForm acroForm;
+
+    @Before
+    public void setUp()
+    {
+        document = new PDDocument();
+        acroForm = new PDAcroForm(document);
+    }
+
+    @Test
+    public void createListBox()
+    {
+        PDChoice choiceField = new PDListBox(acroForm);
+        
+        assertEquals(choiceField.getFieldType(), choiceField.getDictionary().getNameAsString(COSName.FT));
+        assertEquals(choiceField.getFieldType(), "Ch");
+        assertFalse(choiceField.isCombo());
+    }
+
+    @Test
+    public void createComboBox()
+    {
+        PDChoice choiceField = new PDComboBox(acroForm);
+        
+        assertEquals(choiceField.getFieldType(), choiceField.getDictionary().getNameAsString(COSName.FT));
+        assertEquals(choiceField.getFieldType(), "Ch");
+        assertTrue(choiceField.isCombo());
+    }
+
+}
+

Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoiceTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureFieldTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureFieldTest.java?rev=1667904&r1=1667903&r2=1667904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureFieldTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureFieldTest.java Thu Mar 19 23:59:50 2015
@@ -28,7 +28,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 /**
- * Test for the PDAnnotation classes.
+ * Test for the PDSignatureField class.
  *
  */
 public class PDSignatureFieldTest
@@ -47,6 +47,10 @@ public class PDSignatureFieldTest
     public void createDefaultSignatureField() throws IOException
     {
         PDSignatureField sigField = new PDSignatureField(acroForm);
+        
+        assertEquals(sigField.getFieldType(), sigField.getDictionary().getNameAsString(COSName.FT));
+        assertEquals(sigField.getFieldType(), "Sig");
+        
         assertEquals(COSName.ANNOT, sigField.getDictionary().getItem(COSName.TYPE));
         assertEquals(PDAnnotationWidget.SUB_TYPE, sigField.getDictionary().getNameAsString(COSName.SUBTYPE));
     }

Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextFieldTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextFieldTest.java?rev=1667904&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextFieldTest.java (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextFieldTest.java Thu Mar 19 23:59:50 2015
@@ -0,0 +1,53 @@
+package org.apache.pdfbox.pdmodel.interactive.form;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test for the PDSignatureField class.
+ *
+ */
+public class PDTextFieldTest
+{
+    private PDDocument document;
+    private PDAcroForm acroForm;
+
+    @Before
+    public void setUp()
+    {
+        document = new PDDocument();
+        acroForm = new PDAcroForm(document);
+    }
+
+    @Test
+    public void createDefaultTextField()
+    {
+        PDFieldTreeNode textField = new PDTextField(acroForm);
+        
+        assertEquals(textField.getFieldType(), textField.getDictionary().getNameAsString(COSName.FT));
+        assertEquals(textField.getFieldType(), "Tx");
+    }
+
+    @Test
+    public void createWidgetForGet()
+    {
+        PDTextField textField = new PDTextField(acroForm);
+
+        assertNull(textField.getDictionary().getItem(COSName.TYPE));
+        assertNull(textField.getDictionary().getNameAsString(COSName.SUBTYPE));
+        
+        PDAnnotationWidget widget = textField.getWidget();
+        
+        assertEquals(COSName.ANNOT, textField.getDictionary().getItem(COSName.TYPE));
+        assertEquals(PDAnnotationWidget.SUB_TYPE, textField.getDictionary().getNameAsString(COSName.SUBTYPE));
+        
+        assertEquals(widget.getDictionary(), textField.getDictionary());
+    }
+
+}

Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextFieldTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextFieldTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain