Hi,
> Am 26.04.2015 um 21:32 schrieb Maruan Sahyoun <[email protected]>:
>
> Hi,
>
>> Am 26.04.2015 um 19:59 schrieb Tilman Hausherr <[email protected]>:
>>
>> Hi,
>>
>> 1.
>> thanks for starting a new "clean" thread.
>>
>>
>> 2.
>> About the code: templateField0_null is null because you ask for
>> templateAcroForm.getField("field"). However, a bit later in the code, you do
>> this:
>>
>> templateField0.setPartialName("field-" + i);
>>
>> so the name is now "field-0".
>>
>> And then you do a second loop, and of course, you find nothing when
>> searching for "field", because you changed your own field name.
>>
>> I think that what you thought you were doing, was that you were working on a
>> copy. But no, you were altering the original field, and then add it a second
>> time.
>>
>>
>> 3.
>> One thing adds to the confusion: this code I inserted
>>
>> System.out.println("templateField0_null: " + templateField0_null);
>>
>> prints "null" even if the variable isn't null. The toString() method of
>> PDField is
>>
>> public String toString()
>> {
>> return "" + getDictionary().getDictionaryObject(COSName.V);
>> }
>>
>> so it will show "null" if there is no value.
>>
>> @Maruan, are you reading here? We need something better there, maybe the
>> field type and the value.
>
> OK - will do tomorrow.
what do you think about this output
ShortText{type: PDTextField value:COSString{AA}}
with ShortText being the fields fully qualified name?
BR
Maruan
>
>>
>> Tilman
>>
>>
>>
>>
>> Am 26.04.2015 um 18:02 schrieb Philippe de Rochambeau:
>>>
>>> Hi Tilman,
>>>
>>> I am creating a new thread.
>>>
>>> Here's the issues I am having with this code:
>>>
>>> - when I run the program, I get warning message stating that one of the
>>> PDDocuments hasn't been closed properly, although I close all PDDocuments
>>> - the templateField0_null field is null, although the "field" field exists
>>> in the PDDocument’s acroForm
>>>
>>> Thanks for your help.
>>>
>>> You don't have to answer my questions on a week-end.
>>>
>>> Many thanks.
>>>
>>> Philippe
>>>
>>>
>>> public class App {
>>>
>>> final static File RESULT_FOLDER = new
>>> File("/Users/philippe/Desktop/PDFBoxTests");
>>> final static File TEMPLATE_FOLDER = new
>>> File("/Users/philippe/Desktop/PDFBoxTests/Scribus");
>>>
>>> public static void main( String[] args ) {
>>> new App();
>>> }
>>> public App() {
>>> try {
>>> testGeneratedTemplate();
>>> } catch (COSVisitorException e) {
>>>
>>> e.printStackTrace();
>>> } catch (IOException e) {
>>>
>>> e.printStackTrace();
>>> }
>>> }
>>> public void testGeneratedTemplate() throws COSVisitorException,
>>> IOException {
>>> final byte[] generatedTemplate = generateSimpleTemplate();
>>> final PDDocument templateDoc = new PDDocument().load(new
>>> ByteArrayInputStream(generatedTemplate));
>>> Files.write(new File(TEMPLATE_FOLDER, "template.pdf").toPath(),
>>> generatedTemplate);
>>>
>>> final PDDocument finalDoc = new PDDocument();
>>> final List<PDField> fields = new ArrayList<PDField>();
>>> final int numberOfPages = 2;
>>> final float inch = 72;
>>> final float borderThickness = inch / 48f;
>>> final float distanceFromField = inch / 2f;
>>> for (int i = 0; i < numberOfPages; ++i) {
>>> final PDDocumentCatalog templateDocCatalog =
>>> templateDoc.getDocumentCatalog();
>>> final PDAcroForm templateAcroForm =
>>> templateDocCatalog.getAcroForm();
>>>
>>> List<PDField> templatePdfFields = templateAcroForm.getFields();
>>> for (PDField field : templatePdfFields) {
>>> System.out.println("fully qualified name = " +
>>> field.getFullyQualifiedName());
>>> System.out.println("alternate field name = " +
>>> field.getAlternateFieldName());
>>> System.out.println("partial name = " +
>>> field.getPartialName());
>>> }
>>> final PDField templateField0_null =
>>> templateAcroForm.getField("field");
>>> final PDField templateField0 = templatePdfFields.get(0);
>>> if (templateField0 != null) {
>>> templateField0.setValue("xxx" + i);
>>> templateField0.setPartialName("field-" + i);
>>> templateField0.setReadonly(true);
>>> final List<PDPage> pages = (List<PDPage>)
>>> templateDocCatalog.getAllPages();
>>> PDPage page = pages.get(0);
>>> finalDoc.addPage(page);
>>> fields.add(templateField0);
>>> }
>>> }
>>>
>>> final PDAcroForm finalForm = new PDAcroForm(finalDoc);
>>> finalDoc.getDocumentCatalog().setAcroForm(finalForm);
>>> finalForm.setFields(fields);
>>> finalDoc.save(new File(RESULT_FOLDER,
>>> "form-two-templates.pdf"));
>>> templateDoc.close();
>>> finalDoc.close();
>>> }
>>> byte[] generateSimpleTemplate() throws IOException,
>>> COSVisitorException {
>>> PDDocument template = new PDDocument();
>>> ByteArrayOutputStream resultStream = new
>>> ByteArrayOutputStream() ;
>>> final PDPage page = new
>>> PDPage(PDPage.PAGE_SIZE_A4);
>>> page.setRotation(90) ;
>>> template.addPage(page);
>>>
>>> final PDType1Font font = PDType1Font.HELVETICA_BOLD;
>>>
>>> // add a new AcroForm and add it to the document
>>> final PDAcroForm acroForm = new PDAcroForm(template);
>>> template.getDocumentCatalog().setAcroForm(acroForm);
>>>
>>> // Add and set the resources and default appearance
>>> final PDResources res = new PDResources();
>>> final String fontName = res.addFont(font);
>>> acroForm.setDefaultResources(res);
>>>
>>> final COSDictionary cosDict = new COSDictionary();
>>>
>>> final COSArray rect = new COSArray();
>>> rect.add(new COSFloat(250f)); // lower x boundary
>>> rect.add(new COSFloat(700f)); // lower y boundary
>>> rect.add(new COSFloat(500f)); // upper x boundary
>>> rect.add(new COSFloat(750f)); // upper y boundary
>>>
>>> cosDict.setItem(COSName.RECT, rect);
>>> cosDict.setItem(COSName.FT, COSName.getPDFName("Tx")); // Field
>>> Type
>>> cosDict.setItem(COSName.TYPE, COSName.ANNOT);
>>> cosDict.setItem(COSName.SUBTYPE, COSName.getPDFName("Widget"));
>>> final String da = "/" + fontName + " 12 Tf 0 g";
>>> cosDict.setItem(COSName.DA, new COSString(da));
>>>
>>> // add a form field to the form
>>> final PDTextbox textBox = new PDTextbox(acroForm, cosDict);
>>> textBox.setPartialName("field");
>>> acroForm.getFields().add(textBox);
>>>
>>> // specify the annotation associated with the field
>>> // and add it to the page
>>> final PDAnnotationWidget widget = textBox.getWidget();
>>> page.getAnnotations().add(widget);
>>>
>>> template.save(resultStream);
>>> template.close();
>>>
>>> return resultStream.toByteArray();
>>> }
>>> }
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>