【发布时间】:2020-12-27 19:48:30
【问题描述】:
我有一些关于 pdfbox 的问题。
- 我想连续签署一份可能会发生变化的文件,例如a) originalPdf (由 X 签名), b) 将图像添加到 pdf (然后由人 Y 签名) 等, 这样签名都是有效的。如果可能的话,我怎样才能用 pdfbox 做到这一点?我尝试了几件事(例如使用 saveIncremental),但没有给出预期的结果。
- 或者我是否需要预先定义空字段并允许使用图像更新它们以使签名有效?这是否使用 Annotations 执行,如果是,我们如何实现这一点?
任何有用的提示或公共领域的代码参考都会非常有帮助。谢谢。
....
contentStream = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true);
PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);
....
page.getResources().getCOSObject().getCOSDictionary(COSName.XOBJECT).setNeedToBeUpdated(true);
page.getCOSObject().setNeedToBeUpdated(true);
page.getResources().getCOSObject().setNeedToBeUpdated(true);
doc.getDocumentCatalog().getPages().getCOSObject().setNeedToBeUpdated(true);
doc.getDocumentCatalog().getCOSObject().setNeedToBeUpdated(true);
doc.saveIncremental(fos);
【问题讨论】:
-
您是否尝试过这些示例,哪些没有奏效?
-
请首先注意,仅允许对已签名文档进行少量更改,有关详细信息,请参阅here。所以确实,签名后不能更改页面内容,是否可以填写表单字段甚至使用任意注释取决于原始签名的签名类型。
-
我尝试了以下
-
.... contentStream = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true); PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc); .... page.getResources().getCOSObject().getCOSDictionary(COSName.XOBJECT).setNeedToBeUpdated(true); page.getCOSObject().setNeedToBeUpdated(true); page.getResources().getCOSObject().setNeedToBeUpdated(true); doc.getDocumentCatalog().getPages().getCOSObject().setNeedToBeUpdated(true);doc.getDocumentCatalog().getCOSObject().setNeedToBeUpdated(true); doc.saveIncremental(fos); -
签名无效。根据您的评论@mkl,我如何插入图像,例如作为 AcroForm 或注释,这样插入图像不会使签名无效?有没有例子?谢谢。
标签: security pdf pdfbox digital-signature iso-32000