[英]How to show digital signature VALUE in signature appearance of PDF file with iTextSharp
在签署文档时是否可以在签名外观中附加数字签名VALUE,因为我正在使用这部分代码
PdfFilename = txtFile.Text + "\\" + (string)chkLista.Items[i];
DestPdfFilename = txtFile.Text + "\\" + (string)chkLista.Items[i] + "-signed.pdf";
Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) };
IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-256");
PdfReader pdfReader = new PdfReader(PdfFilename);
FileStream signedPdf = new FileStream(DestPdfFilename, FileMode.Create); //the output pdf file
PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(436, 700, 564, 750), 1, "sig");
MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
但在PDF中,它仅显示仅填充数据的矩形,例如:数字签名者:...和日期:...
除此之外,我也想在Base64中显示数字签名值!
如果我正确理解OP,则任务是显示实际签名值字节的base64表示形式,作为签名字段的外观。
这是不可能的。
原因是签名字段的外观是有符号字节范围的一部分:
(在示例的第一部分或第三部分中的某个位置定义了外观。)
因此, 在创建签名值之前必须先知道外观。 因此,该值不能在现场外观中完全表示出来。
有关更多背景信息,请阅读此答案 。
话虽这么说,您可能会尝试通过向PDF添加JavaScript来作弊,这会在显示时更改签名字段的外观。 但是,此方法有两个缺点:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.