Hi, you are missing to add the field to the AcroForm. Please take a look at
https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleForm.java?view=markup If that doesn't work for you let me know and I'll enhance the sample. BR Maruan > Am 24.02.2017 um 17:26 schrieb Gilad Denneboom <[email protected]>: > > Hi all, > > I'm in the process of moving from PDFBox 1.x to 2.x, but have encountered > an issue that I hope you could help me with. > One of my requirements in various projects is to add new form fields to a > file. > In PDFBox 1.x I would do this by generating a COSDictionary object which > contained all the basic field properties (type, value, rect, font size, > text color, etc.), and would then use it to generate a new PDTextbox object > (for example), which I would then add the page's annotation list. And here > is my problem. In PDFBox 2.x the constructor for PDTextField no longer > accepts the COSDictionary as its second parameter, only a PDAcroForm as its > first. So how am I supposed to generate a new field? > Then I noticed that the PDAnnotationWidget constructor can now take a > COSDictionary object as its parameter, so I tried that, but it doesn't > work... No field is added. > Here's my my code (the coordinates might be off, but it should still add > something, I think...): > > originalDoc = PDDocument.load(new File(outputFilePath)); > PDAcroForm acroForm = new PDAcroForm(originalDoc); > p = originalDoc.getPage(0); > float bottledOnX = inch * 2.375f; > float bottledOnY = inch * 0.032f; > float bottledOnW = inch * 0.257f; > float bottledOnH = inch * 0.231f; > COSDictionary bottledOnFieldDic = createTextField("BottledOn", > "TEST", new float[] {bottledOnX, bottledOnY, bottledOnX+bottledOnW, > bottledOnY+bottledOnH}, "50", 1); > PDTextField bottledOnField = new PDTextField(acroForm); > PDAnnotationWidget bottledOnWidget = new > PDAnnotationWidget(bottledOnFieldDic); > bottledOnWidget.setHidden(false); > bottledOnWidget.setPrinted(true); > bottledOnField.getWidgets().set(0, bottledOnWidget); > bottledOnField.setQ(1); // set alignment to "center" > bottledOnField.setReadOnly(true); > p.getAnnotations().add(bottledOnField.getWidgets().get(0)); > originalDoc.save(outputFilePath); > originalDoc.close(); > > private static COSDictionary createTextField(String fieldName, String > value, float[] rect, String fontSize, int textColor) { > COSDictionary cosDict = new COSDictionary(); > COSArray rectCosArray = new COSArray(); > rectCosArray.add(new COSFloat(rect[0])); // lower x boundary > rectCosArray.add(new COSFloat(rect[1])); // lower y boundary > rectCosArray.add(new COSFloat(rect[2])); // upper x boundary > rectCosArray.add(new COSFloat(rect[3])); // upper y boundary > > cosDict.setItem(COSName.RECT, rectCosArray); > cosDict.setItem(COSName.FT, COSName.getPDFName("Tx")); // Field Type > cosDict.setItem(COSName.TYPE, COSName.ANNOT); > cosDict.setItem(COSName.SUBTYPE, COSName.getPDFName("Widget")); > cosDict.setItem(COSName.T, new COSString(fieldName)); > > cosDict.setString(COSName.DA, "/Helv "+fontSize+" Tf "+textColor+" > g"); > > COSString fieldValue = new COSString(value); > cosDict.setItem(COSName.V, fieldValue); > > return cosDict; > } > > Any ideas what I'm doing wrong here? > > Thanks in advance! > > Gilad --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

