[ 
https://issues.apache.org/jira/browse/PDFBOX-5344?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17460082#comment-17460082
 ] 

Laurence Urbain commented on PDFBOX-5344:
-----------------------------------------

Thanks for looking into this.

I thought we could use the generic method PDField.getParent() to recursively 
mark the parents as "needs to be updated".

For example, the statement:
{code:java}
signatureField.getCOSObject().setNeedToBeUpdated(true); {code}

Could be replaced by :
{code:java}
PDField currentField = signatureField;
while (currentField != null) {
  currentField.getCOSObject().setNeedToBeUpdated(true);
  currentField = currentField.getParent();
} {code}
>From the tests I've been doing, it's correctly adding the parents of the 
>target field in the increment and the signature field changes are saved.

If you think it is a viable solution, I can submit a proper pull request.

> Adding a signature on nested fields has no effect
> -------------------------------------------------
>
>                 Key: PDFBOX-5344
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5344
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Signing
>    Affects Versions: 2.0.24
>            Reporter: Laurence Urbain
>            Priority: Major
>         Attachments: nested-signature-field.pdf
>
>
> Hi,
> I am not able add a signature to a document if the signature field is nested 
> (the signature field is not a direct child of the acro form).
> When I call the method PDDocument.addSignature(), the signature field is 
> properly marked asĀ  "needs to be updated" but not its parents.
> As a result, when the incremental save is done, the changes are lost.
> To be able to add the signature for such field, all the parent fields in the 
> hierachy should also be marked as "needs to be updated".
> Please find a sample file attached.
> Here is the code snippet to build it:
> {code:java}
> final PDDocument pdDocument = new PDDocument();
> final PDPage page = new PDPage();
> pdDocument.addPage(page);
> PDAcroForm form = new PDAcroForm(pdDocument);
> pdDocument.getDocumentCatalog().setAcroForm(form);
> final PDNonTerminalField level1 = new PDNonTerminalField(form);
> level1.setPartialName("level1");
> form.getFields().add(level1);
> final PDNonTerminalField level2 = new PDNonTerminalField(form);
> level2.setPartialName("level2");
> level1.setChildren(List.of(level2));
> final PDSignatureField signatureField = new PDSignatureField(form);
> signatureField.setPartialName("field1");
> PDAnnotationWidget widget = signatureField.getWidgets().get(0);
> widget.setRectangle(new PDRectangle(50, 700, 200, 20));
> widget.setPage(page);
> widget.setPrinted(true);
> page.getAnnotations().add(widget);
> level2.setChildren(List.of(signatureField)); {code}
> Thanks



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to