填写pdf表格后,数字签名无效

时间:2017-08-10 08:03:19

标签: java pdf itext digital-signature acrofields

我创建一个pdf文档并指定几个acro-fields。这些acro-fields习惯了  由java itext库填充。添加所有必需的acro-fields后,将对此文档进行数字签名。

我们已经在数字签名中设置了表单填写属性,但是每当我们尝试通过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();

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格式。

有没有办法解决这个问题。 感谢。

1 个答案:

答案 0 :(得分:2)

您可以像这样创建PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(FILE));

PdfStamper

这要求iText采用原始PDF,丢弃不需要的部分,按其认为合适的方式排列剩余部分,应用所需的添加内容,并保存所有这些。

这样的程序显然会破坏任何现有的签名。

您可以指示iText将更改应用为增量更新,即复制现有的pdf并在新版本中附加更改。生成的文件通常比上面创建的文件大,但预先存在的签名不会在数学上被破坏。

您可以使用PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(FILE), '\0', true); 的4参数构造函数请求此附加模式,例如像这样:

stamper.setFormFlattening(true);

此外,您要求表单展平:

string strQuery = "SELECT Namecar, Images,GB,Tip as finalresult FROM Cdetail3

这会自动使预先存在的签名无效。因此,不要这样做。

相关问题