公司支付的网站建设如何入账,Wordpress教程Windows,商标设计图片,做易经网站我知道这将是一个非常特殊的话题。 电子签名PDF远不是主流用例。 但是#xff0c;我将其编写的原因有两个#xff1a;第一#xff0c;我认为它对真正需要它的人非常有用#xff1b;第二#xff0c;我认为随着eIDAS法规的普及#xff0c;它将变得越来越普遍。电子签名在欧… 我知道这将是一个非常特殊的话题。 电子签名PDF远不是主流用例。 但是我将其编写的原因有两个第一我认为它对真正需要它的人非常有用第二我认为随着eIDAS法规的普及它将变得越来越普遍。电子签名在欧洲各地都得到认可由于某些无聊的法律细节现在还不完全正确 但无论如何。 因此用例是什么-首先您必须使用数字签名对PDF进行电子签名法律术语为“电子签名”因此尽管它们不完全匹配但我将互换使用它们-例如任何电子应用于其他数据的数据可以看作是电子签名其中数字签名是基于PKI的签名。 其次您可能希望在页面上实际显示签名而不是让PDF阅读器识别签名并将其显示在侧面板上。 这是为什么 因为人们习惯于在页面上看到签名有些人可能坚持要使签名可见真实的故事–我评论说分离的签名“不是真正的电子签名因为在页面上不可见”。 现在请注意我在“页面”上写了“页面”。 是的电子文档没有页面-它是字节流。 因此仅在最后一页上签名即可。 但是人们还是习惯于对所有页面进行签名因此他们希望电子签名在所有页面上都可见。 这使任务变得棘手– PDF可以在最后一页上有一个数字签名框但效果很好。 因此必须添加看起来像签名框的其他类型的批注然后单击以打开签名面板就像实际的签名框一样。 我必须在这里介绍DSS-欧盟委员会提供的一组很棒的组件 可用于签名和验证各种电子签名。 它是开源的您可以随意使用。 部署演示应用程序 仅使用库。 它包括开箱即用的签名功能-只需检查PAdESService或PDFBoxSignatureService即可 。 它甚至还包括一次可视化签名的选项在特定页面上。 但是它没有选择在多个页面上显示“图章”图像的选项。 这就是为什么我分叉并实现功能的原因。 我的大部分更改都在loadAndStampDocument(..)方法的PDFBoxSignatureService中。 如果要使用该功能则可以从我的叉子中构建一个jar并将其使用通过将适当的SignatureImageParameters传递给PAdESSErvice.sign(..)来定义签名的外观。 为什么首先需要这样做 因为当文档签名后您将无法再对其进行修改因为您将更改哈希。 但是PDF具有增量更新可以将其追加到文档中从而具有较新的版本而无需修改原始版本中的任何内容。 这样签名仍然有效原始签名的内容不会被修改但是会添加新内容。 在我们的案例中这些新内容是一些“注释”它们表示图像和可打开区域可打开签名面板至少在Adobe Reader中。 并且在添加签名框之前添加它们时如果签名者不止一个则第二个签名者的注释将在第一个签名之后添加。 可悲的是PDFBox不支持该功能。 好吧它几乎可以做到–下面的代码看起来很笨拙花了一段时间才弄清楚应该确切地调用什么以及何时调用但是仅需一个反射调用即可工作 for (PDPage page : pdDocument.getPages()) {// reset existing annotations (needed in order to have the stamps added)page.setAnnotations(null);}// reset document outline (needed in order to have the stamps added)pdDocument.getDocumentCatalog().setDocumentOutline(null);ListPDAnnotation annotations addStamps(pdDocument, parameters);setDocumentId(parameters, pdDocument);ByteArrayOutputStream baos new ByteArrayOutputStream();try (COSWriter writer new COSWriter(baos, new RandomAccessBuffer(pdfBytes))) {// force-add the annotations (wouldnt be saved in incremental updates otherwise)annotations.forEach(ann - addObjectToWrite(writer, ann.getCOSObject()));// technically the same as saveIncremental but with more controlwriter.write(pdDocument);}pdDocument.close();pdDocument PDDocument.load(baos.toByteArray());...
}private void addObjectToWrite(COSWriter writer, COSDictionary cosObject) {// the COSWriter does not expose the addObjectToWrite method, so we need reflection to add the annotationstry {Method method writer.getClass().getDeclaredMethod(addObjectToWrite, COSBase.class);method.setAccessible(true);method.invoke(writer, cosObject);} catch (Exception ex) {throw new RuntimeException(ex);}
} 它的作用是–加载原始PDF清除一些内部目录将注释图像添加到所有页面然后“强制添加注释”因为“否则它们将不会保存在增量更新中”。 我希望PDFBox可以使其更加简单明了但是暂时可行并且不会使现有签名无效。 我希望这篇文章能为您介绍 具有法律约束力的电子签名的存在 DSS实用程序的存在 用于PDF签名的PAdES标准 如何在PDF文档中放置多个签名框 我希望随着时间的推移这篇文章会越来越流行因为越来越多的企业意识到他们可以使用电子签名。 翻译自: https://www.javacodegeeks.com/2018/02/adding-visible-electronic-signatures-pdfs.html