【问题标题】:Multiple signature not working多重签名不起作用
【发布时间】:2018-08-12 21:23:12
【问题描述】:

我尝试将我的 iText5 代码移植到 iText7 中。我设法签署了一份未签名的 pdf,但签署已签署的文件时遇到了一些麻烦。

我简化了代码。下面将一些有趣的东西放入我的 pdf 中。代码:

using (var os = new MemoryStream())
{
    var pdfSigner = new ExtendedPdfSigner(new PdfReader(new MemoryStream(File.ReadAllBytes(@"C:\Users\x\Desktop\signed.pdf"))), os, true);
    var external = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached);
    pdfSigner.SignExternalContainer(external, 8192);
    File.WriteAllBytes(@"C:\Users\x\Desktop\tempFile.pdf", os.ToArray());
}

它还在第一个签名中显示“文档有后续更改”消息。

我不知道这是否是一个错误,但我什至在 7.1.3 快照中尝试过。

我尝试再次签名的已签名 pdf 是 this。 生成的临时 pdf 为 this

【问题讨论】:

  • this question 有帮助吗?
  • @stuartd 不。已经检查过了。
  • 你的 ExtendedPdfSigner 类与 itext PdfSigner 有什么不同?
  • @mkl GetRangeStream 方法是 protected,所以我通过 ExtendedPdfSigner 提供了它。如果使用PdfSigner,结果将是相同的..

标签: c# digital-signature itext7


【解决方案1】:

这是由于 iText 7 中的一个错误。在检索页面的注释以向它们添加签名小部件时,所有注释都被触及:对其页面的可选引用被添加到它们并且它们被标记为 改变了。

因此,此代码可以重现该问题(在 Java 中;在 C# 中类似):

try (   PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE), new PdfWriter(DEST), new StampingProperties().useAppendMode())) {
    pdfDocument.getPage(1).getAnnotations();
}

(SignTwice 测试testStampSigned)

仅执行此 getter 会导致第 1 页上的所有注释被更改,因此会使 Adob​​e Reader 警告注释修改。如果签名是不允许更改的认证签名,这将导致原始签名无效!

单纯的吸气剂绝不能有这样的副作用。

【讨论】:

  • 由于 .NET Core 支持,我想从 5 移植到 iText7。但是,我想现在还为时过早。我想知道他们什么时候会发布稳定版本,因为 SO 中有很多与此类错误有关的问题..
  • 是的,有一些错误。但也请注意,新功能只会添加到 itext 7。因此,您可以考虑使用 itext 7 实现产品的新功能(因为它们可能需要新的 itext 功能),同时仍将 itext 5 用于旧功能(即证明有效)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 2019-05-03
  • 2018-05-17
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多