我创建一个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格式。
有没有办法解决这个问题。 感谢。
答案 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
这会自动使预先存在的签名无效。因此,不要这样做。