我已经使用 iTextSharp Dll 实现了数字签名,以使用单个签名对 PDF 文件进行签名。现在,我想在之前或已经进行数字签名的 PDF 中添加另一个数字签名,但在验证一个签名时出现错误。
如何在一份 PDF 中添加多个数字签名并验证所有签名。
我正在使用以下代码:
PdfReader reader = new PdfReader(fileName);
using (FileStream fout = new FileStream(SignedFileName, FileMode.Create, FileAccess.ReadWrite))
{
// appearance
PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0');
PdfSignatureAppearance appearance = stamper.SignatureAppearance;
//appearance.Reason = SignReason;
//appearance.Location = SignLocation;
appearance.SignDate = DateTime.Now.Date;
appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(xPos, yPos, xPos + 200, yPos + 100), PageNo, null);//.IsInvisible
// Custom text and background image
appearance.Image = iTextSharp.text.Image.GetInstance(SignatureImg);
appearance.ImageScale = 0.6f;
appearance.Image.Alignment = 300;
appearance.Acro6Layers = true;
StringBuilder buf = new StringBuilder();
buf.Append("Digitally Signed by ");
String name = SignerName;
buf.Append(name).Append('\n');
buf.Append("Date: ").Append(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss zzz"));
string text = buf.ToString();
appearance.Layer2Text = text;
//digital signature
IExternalSignature es = new PrivateKeySignature(pk, "SHA-256");
MakeSignature.SignDetached(appearance, es, new Org.BouncyCastle.X509.X509Certificate[] { pk12.GetCertificate(alias).Certificate }, null, null, null, 0, CryptoStandard.CMS);
stamper.Close();
}
错误在这一行:
PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0');
将其更改为:
PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0', true);
解释:您没有以附加模式签署文档。
在进一步检查您的代码时,我发现您还添加了图像。这可能很棘手。以附加模式添加新签名解决了一个问题。添加额外的内容可能会导致额外的问题,具体取决于您使用的 iText 版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)