在商业环境中,我们使用 Adobe LiveCycle ES 已有好几年了。一个关键功能是在 PDF 中启用“阅读器扩展”,它为阅读器扩展PDF 解锁了 Adobe Reader 中的一些功能。其中之一是允许用户在 Adobe Reader 中对空的签名字段进行数字签名。
我记得如果 PDF 不是“阅读器扩展”,单击 Adobe Reader 中的签名字段时没有发生任何事情。例如,如果 PDF 是使用 iText 生成的,就是这种情况。iText 常见问题解答中仍然确认了此限制,该常见问题解答应该是最新的,因为项目处于活动状态。
我最近重新执行了一些旧代码,令人惊讶的是,空的签名字段可以在 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 已经删除了一些阅读器扩展要求,但我找不到任何解释这一点的发行说明。