我正在尝试将 XML 文件附加到 Pades 中签名的 PDF 文件。 我使用 iText 版本 8.0.3.0 来执行此操作。 (框架4.7.2)
一切都很好,但带有附件的文件似乎有一个无效的签名。我用Foxit、Acrobat等在线工具检查了该文件。 错误似乎是这样的:
签名/印章不是有效的 AdES 数字签名! /ByteRange 字典不一致! 参考数据对象不完整!
我读过这些,但它们对我没有帮助。 使用iTextSharp时数字签名无效 Pdf 签名会使 Acrobat Reader 中的现有签名无效 我哪里出错了?这是我的代码:
string pdfIN = "test.pdf";
string pdfOut = "testout.pdf";
PdfReader oReader = new PdfReader(pdfIN);
PdfWriter oWriter = new PdfWriter(pdfOut);
PdfDocument oPdfDocument = new PdfDocument(oReader, oWriter);
var bytes = File.ReadAllBytes(pdfIN);
PdfFileSpec fs = PdfFileSpec.CreateEmbeddedFileSpec(oPdfDocument, bytes, "Test insert attachment", "cda.xml", PdfName.ApplicationXml, null, new PdfName("Data"));
oPdfDocument.AddFileAttachment("cda.xml", fs);
oPdfDocument.Close();
首先,如果您想对签名的 PDF 添加更改,则必须使用追加模式:
PdfDocument oPdfDocument =
new PdfDocument(oReader, oWriter,
new StampingProperties().UseAppendMode());
这使得 iText 将更改作为增量更新附加到文件中(保留签名字节不变)。如果没有这个,整个文件将使用更改后的签名字节重新保存。
但即使进行此更改,MDP 感知验证器也可能会拒绝您的添加,因为这是不允许的。请参阅此答案,了解允许和禁止对签名 PDF 进行更改的概述。