[
https://issues.apache.org/jira/browse/PDFBOX-5344?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17460135#comment-17460135
]
Michael Klink commented on PDFBOX-5344:
---------------------------------------
{quote}I thought we could use the generic method PDField.getParent() to
recursively mark the parents as "needs to be updated".
{quote}
While this certainly {_}could be done{_}, it unnecessarily adds objects to the
incremental update that haven't changed at all. This has disadvantages:
* It is inefficient.
* Revision comparison algorithms might consider such unnecessary objects in an
incremental update to a signed PDF suspect and mark it with a validation
warning or error.
* Furthermore, this increases the chances of introducing unintended changes in
the incremental update which revision comparison algorithms correctly would
mark as validation errors. (We've already seen COS number rounding errors and
structure changes...)
In the recent months mechanisms different from the plain
{{setNeedToBeUpdated(true)}} of object chains for determining changed objects
have been introduced in PDFBox. Using one of them is what [~tilman] was
wondering about and what he is scared about messing up.
----
As an aside...
{code:java}
while (currentField != null) {
currentField.getCOSObject().setNeedToBeUpdated(true);
currentField = currentField.getParent();
}
{code}
Beware, in case of broken PDFs this might cause an endless loop, an attack
vector for DOS'ing PDFBox based products.
> 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]