[ https://issues.apache.org/jira/browse/PDFBOX-1750?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14108071#comment-14108071 ]
Maruan Sahyoun edited comment on PDFBOX-1750 at 8/23/14 5:50 PM: ----------------------------------------------------------------- This example code will generate a new document with a single textfield from scratch. There is nothing visible on the page as there is no appearance but the field is fillable in Adobe Reader and others. {code} // Generate a new document PDDocument document = new PDDocument(); // Add a new page PDPage page = new PDPage(); document.addPage(page); // add a new AcroForm PDAcroForm form = new PDAcroForm(document); document.getDocumentCatalog().setAcroForm(form); // Create a rectangle for the fields position PDRectangle rectangle = new PDRectangle(); rectangle.setLowerLeftX(10); rectangle.setLowerLeftY(710); rectangle.setUpperRightX(200); rectangle.setUpperRightY(730); // Create an annotation to represent the field PDAnnotationWidget fieldAnnotation = new PDAnnotationWidget(); fieldAnnotation.setRectangle(rectangle); // create a textfield PDVariableText textField = new PDTextbox(form, fieldAnnotation.getDictionary()); // setting the field type is needed as this should be a real field // an not a simple node in the AcroForm field hierarchy textField.getDictionary().setName(COSName.FT, "Tx"); textField.setPartialName("Textfield"); // add the fields to the form List fields = new ArrayList(); fields.add(textField); form.setFields(fields); // add the annotations to the page List annotations = new ArrayList(); annotations.add(fieldAnnotation); page.setAnnotations(annotations); // save the document document.save(..); {code} I’ll clean it up a bit and add it to the examples as well as the cookbook. As can be seen there is room for improvement in our API e.g. why is a new AcroForm generated with the document in the constructor {code} PDAcroForm form = new PDAcroForm(document); {code} but it’s still needed to explicitly add the form to the document catalog {code} document.getDocumentCatalog().setAcroForm(form); {code} I’ll be looking into addressing that for 2.x. was (Author: msahyoun): This example code will generate a new document with a single textfield from scratch. There is nothing visible on the page as there is no appearance but the field is fillable in Adobe Reader and others. {code} // Generate a new document PDDocument document = new PDDocument(); // Add a new page PDPage page = new PDPage(); document.addPage(page); // add a new AcroForm PDAcroForm form = new PDAcroForm(document); document.getDocumentCatalog().setAcroForm(form); // Create a rectangle for the fields position PDRectangle rectangle = new PDRectangle(); rectangle.setLowerLeftX(10); rectangle.setLowerLeftY(710); rectangle.setUpperRightX(200); rectangle.setUpperRightY(730); // Create an annotation to represent the field PDAnnotationWidget fieldAnnotation = new PDAnnotationWidget(); fieldAnnotation.setRectangle(rectangle); // create a textfield PDVariableText textField = new PDTextbox(form, fieldAnnotation.getDictionary()); // setting the field type is needed as this should be a real field // an not a simple node in the AcroForm field hierarchy textField.getDictionary().setName(COSName.FT, "Tx"); textField.setPartialName("Textfield"); // add the fields to the form List fields = new ArrayList(); fields.add(textField); form.setFields(fields); // add the annotations to the page List annotations = new ArrayList(); annotations.add(fieldAnnotation); page.setAnnotations(annotations); // save the document document.save("/Users/msahyoun/Desktop/OpenSource/pdfbox/issues/PDFBOX-2249/NewForm.pdf"); {code} I’ll clean it up a bit and add it to the examples as well as the cookbook. As can be seen there is room for improvement in our API e.g. why is a new AcroForm generated with the document in the constructor {code} PDAcroForm form = new PDAcroForm(document); {code} but it’s still needed to explicitly add the form to the document catalog {code} document.getDocumentCatalog().setAcroForm(form); {code} I’ll be looking into addressing that for 2.x. > PDTextbox and PDAnnotationWidget are not correct initialized from it's own > constructor . > ---------------------------------------------------------------------------------------- > > Key: PDFBOX-1750 > URL: https://issues.apache.org/jira/browse/PDFBOX-1750 > Project: PDFBox > Issue Type: Bug > Components: AcroForm > Affects Versions: 1.8.2 > Reporter: chen zhenyu > Labels: AcroForm, Widget > > I find 2 Bugs in interactive.form, And I have resolved this 2 Bug. Here are > the Code > 1. I want make new Textbox in pdf. It always failed because the type flag > “COSName.FT,="Tx"” never be set in the constructor. > The PDTextbox can only be correct initialized from COSDictionary.( That is > only initialized from exist pdf file) . > I fixed this by add “getDictionary().setName(COSName.FT, "Tx");” in the > constructor of PDTextbox. > Maybe it’s not right place, but works in my project. > public PDTextbox( PDAcroForm theAcroForm ) > { > super( theAcroForm ); > getDictionary().setName(COSName.FT, "Tx"); > } > public PDTextbox( PDAcroForm theAcroForm, COSDictionary field) > { > super( theAcroForm, field); > getDictionary().setName(COSName.FT, "Tx"); > } > 2. Same Bug in PDAnnotationWidget. Only the default constructor initialize > the type flag “COSName.SUBTYPE,= "Widget"”. > But the default constructor were never be used. So I must use the > PDAnnotationWidget to initialize the new PDTextbox, like blow. > PDAnnotationWidget Widget = new PDAnnotationWidget(); > PDTextbox textBox = new PDTextbox(acroForm,Widget.getDictionary()); > Otherwise I got an empty PDAnnotationWidget from PDTextbox .getWidget(). > Something not correct in PDField .getWidget(). > If the the PDField create from user(not read from exist pdf file), the > getWidget cannot get an correct initialized PDAnnotationWidget. The > COSName.SUBTYPE will never be set. > Maybe the similar Bug in the whole > org.apache.pdfbox.pdmodel.interactive.form: the COSDictionary of element are > not initialized when user create it manually (Typical to insert new acroform > element). > I hope that I can give something help to this opensource Project. > Could you check this and fix in next Version? -- This message was sent by Atlassian JIRA (v6.2#6252)