填写pdf表格后数字签名无效
问题描述:
我创建了一个pdf文档并指定了几个acro字段。这些用于 的acro字段由java itext库填充。在添加所有必需的acro字段后,本文档进行数字签名。填写pdf表格后数字签名无效
我们已经在数字签名中设置了填表属性,但是无论何时我们试图用itext库填充此文档,此文档的数字签名都将失效。
这里是我用来填写此文档的代码 -
String FILE = "/Users/mahensha/Desktop/NOC/test1.pdf";
PdfReader reader = new PdfReader("/Users/mahensha/Desktop/NOC/test.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(FILE));
AcroFields form = stamper.getAcroFields();
System.out.println("form: " + form);
form.setField("SellerName", "Mr.Mahendra Kumar Sharma");
form.setField("AddressLine1", "My address");
stamper.setFormFlattening(true);
stamper.close();
reader.close();
我正在使用lowagie itext库来填充pdf表单。
有什么方法可以解决这个问题。 谢谢。
答
您创建PdfStamper
这样的:
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(FILE));
此要求的iText采取原始的PDF,扔掉不需要的部分,安排剩余部分,因为它认为合适的应用所需的增补,并保存所有这一切。
这样的过程显然会破坏任何现有的签名。
您可以指示iText将更改应用为增量更新,即复制现有的pdf并在新版本中追加更改。生成的文件通常比上面创建的文件大,但预先存在的签名不会在数学上打破。
您可以使用PdfStamper
的4参数构造函数来请求此附加模式,例如,像这样:
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(FILE), '\0', true);
此外,您请求的形式变平:
stamper.setFormFlattening(true);
这将自动失效预先存在的签名。因此,不要这样做。
+0
谢谢!它的工作! – user3212707
使用带有4个参数的'PdfStamper'构造函数并在最后一个中使用'true'。选择不破坏现有签名所需的附加模式。 – mkl