在商业环境中,我们有多年的Adobe LiveCycle ES . 一个关键功能是在PDF中启用"Reader extensions",这可以解锁Adobe Reader中用于阅读器扩展PDF的一些功能 . 其中之一是允许用户在Adobe Reader中对空签名字段进行数字签名 .

我记得如果PDF不是"reader extended",当点击Adobe Reader中的签名字段时没有任何反应 . 这种情况例如是如果PDF是使用iText生成的 . 这个限制仍在iText FAQ中得到确认,该项目在项目处于活动状态时应该是最新的 .

我最近重新执行了一些旧代码,令人惊讶的是,空签名字段可以在Acrobat Reader DC中签名 .

生成PDF的代码如下:

Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
document.add(new Paragraph("Hello World!"));
document.close();

添加签名字段的代码:

PdfReader pdf = new PdfReader(inputstream);
PdfStamper stp = new PdfStamper(pdf, new FileOutputStream(filename));
PdfFormField sig = PdfFormField.createSignature(stp.getWriter());
sig.setWidget(new Rectangle(100, 100, 200, 200), null);
sig.setFlags(PdfAnnotation.FLAGS_PRINT);
sig.put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g"));
sig.setFieldName("Signature1");
sig.setPage(1);
stp.addAnnotation(sig, 1);
stp.close();

改变了什么?我想Adobe Acrobat DC已经删除了一些读者扩展要求,但我找不到任何解释这个的发行说明 .