c# - 多重签名不起作用
问题描述
我尝试将我的 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 快照中尝试过。
解决方案
这是由于 iText 7 中的一个错误。在检索页面的注释以向它们添加签名小部件时,所有注释都被触及:对其页面的可选引用被添加到它们并且它们被标记为changed。
因此,此代码可以重现该问题(在 Java 中;在 C# 中类似):
try ( PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE), new PdfWriter(DEST), new StampingProperties().useAppendMode())) {
pdfDocument.getPage(1).getAnnotations();
}
(SignTwice测试testStampSigned
)
仅执行此 getter 会导致第 1 页上的所有注释都被更改,因此会使 Adobe Reader 警告注释修改。如果签名是不允许更改的认证签名,这将使原始签名无效!
单纯的吸气剂不能有这样的副作用。
推荐阅读
- php - PHP 没有完全使用流量高峰中的可用资源
- firebase - 收到来自 Firebase 云消息颤动的通知时,在图标启动器上添加徽章
- reactjs - .Net Core 3.1 和 React (Redux-toolkit) 在 React 路由器硬刷新时获取“Cannot GET /*”
- mysql - Combine three tables with join an two with union
- prometheus - How to query a counter that moves slowly in an accurate way
- css - Color and background color not changing while hovered
- apache-kafka - Changing the log.dir path for Kafka
- android - I/Counters: exceeded sample count in FrameTime log
- python - How to place the nodes of a graph using pyVis following the coordinate system (latitude and longitude)?
- excel - 如何将电子表格重新组织成列表?