我想通过使用Adobe Acrobat在from中设置一些字段。我希望最终生成的PDF必须包含数字签名组件。
我想使用Java和itextpdf 5.5.13 jar实现此目的。
到目前为止,这是我的代码:
//Getting PDF Reader
PdfReader reader = null;
//getting PDF Stamper
PdfStamper stamper = null;
//FacesContext context = FacesContext.getCurrentInstance();
try {
String src = "D:\\workspace2\\runtime-EclipseApplication\\Project\\WebContent\\resources\\" +
"pdf_form_template\\invoice.pdf";
reader = new PdfReader(src);
stamper = new PdfStamper(reader, new FileOutputStream(pdfPath));
//Query and change fields in existing document by method calls.
AcroFields form = stamper.getAcroFields();
form.setField("contactNumber",phone_no);
form.setField("name",name);
form.setField("invoiceNumber",invoice_no);
form.setField("GSTIN",gstin_no);
form.setField("GSTIN_2",gstin_no);
form.setField("Date","06/March/2019");
form.setField("Ms",name);
form.setField("Address 1",address);
form.setField("Pin",pin_no);
form.setField("State Code",state_code);
form.setField("SNoRow1","1.");
form.setField("Amount in Words",amount_in_words);
form.setField("DESCRIPTIONRow1",desc);
form.setField("HSN CODERow1",HSN_code);
form.setField("AMOUNTTaxable Value", texable_value);
form.setField("AMOUNTCGST 18", cgst_value);
form.setField("AMOUNTSGST 9", sgst_value);
form.setField("AMOUNTIGST 9", igst_value);
form.setField("AMOUNTGRAND TOTAL", grand_total);
//digital signature field in form template
form.setField("digitalSignature","");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
if (stamper != null) {
try {
stamper.setFormFlattening(true);
stamper.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (reader != null) {
reader.close();
}
}
我得到的输出pdf包含所有设置的字段,数字签名除外。
答案 0 :(得分:0)
setFormFlattening(true)是我最后得到拼合的pdf的原因。 使用partialFormFlattening是正确的方法。