C# ABCpdf签名和加密不并发工作
我有一个PDF文档,它需要进行C# ABCpdf签名和加密不并发工作,c#,pdf,abcpdf,C#,Pdf,Abcpdf,我有一个PDF文档,它需要进行数字签名和加密。 我使用的是ABCPDF,当我将数字签名应用于加密的文档时,签名将失效 Adobe Acrobat Reader提供的错误是:“对本文档所做的更改使签名无效” 源代码: using (Doc doc = new Doc()) { doc.Read(pdfPath); if (options.Encrypt) { doc.Encryption.Type = 4; doc.Encryption.S
数字签名
和加密
。
我使用的是ABCPDF
,当我将数字签名应用于加密的文档时,签名将失效
Adobe Acrobat Reader
提供的错误是:“对本文档所做的更改使签名无效”
源代码:
using (Doc doc = new Doc())
{
doc.Read(pdfPath);
if (options.Encrypt)
{
doc.Encryption.Type = 4;
doc.Encryption.SetCryptMethods(CryptMethodType.AESV3);
doc.Encryption.Password = Encryption.Decrypt(options.UserPassword, PdfSecurityOptions.EncryptionPassword);
doc.Encryption.OwnerPassword = Encryption.Decrypt(options.OwnerPassword, PdfSecurityOptions.EncryptionPassword);
}
if (options.Sign)
{
byte[] bytes = Convert.FromBase64String(options.Certificate);
X509Certificate2 certificate = new X509Certificate2(bytes, Encryption.Decrypt(options.CertificatePassword, PdfSecurityOptions.EncryptionPassword), X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
PdfUtils.DigitallySign(
doc,
options.SignatureText,
options.Rectangle,
certificate
);
}
doc.Save(savePath);
}
我试过:
using (Doc doc = new Doc())
{
doc.Read(pdfPath);
if (options.Encrypt)
{
doc.Encryption.Type = 4;
doc.Encryption.SetCryptMethods(CryptMethodType.AESV3);
doc.Encryption.Password = Encryption.Decrypt(options.UserPassword, PdfSecurityOptions.EncryptionPassword);
doc.Encryption.OwnerPassword = Encryption.Decrypt(options.OwnerPassword, PdfSecurityOptions.EncryptionPassword);
}
if (options.Sign)
{
byte[] bytes = Convert.FromBase64String(options.Certificate);
X509Certificate2 certificate = new X509Certificate2(bytes, Encryption.Decrypt(options.CertificatePassword, PdfSecurityOptions.EncryptionPassword), X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
PdfUtils.DigitallySign(
doc,
options.SignatureText,
options.Rectangle,
certificate
);
}
doc.Save(savePath);
}
- 在签名之前应用加密
- 签名后应用加密
- 应用加密,保存文档,然后加载并签名
我已经测试了你的代码,签名看起来还可以。我认为您添加字段的方式存在问题。我看到您正在使用Abcpdf示例代码。也许你需要一些改变。你能提供一个pdf样本吗 签名完成后,您不能再执行签名;这样做会损坏第一个签名 为了避免这种情况,您必须在每次签名完成时使用增量更新。 查看Abcpdf在线文档
我已经测试了你的代码,签名看起来还可以。我认为您添加字段的方式存在问题。我看到您正在使用Abcpdf示例代码。也许你需要一些改变。你能提供一个pdf样本吗 OP只想制作一个签名(与PDF中可能的并发加密相结合)…OP只想制作一个签名(与PDF中可能的并发加密相结合)…我编辑了应答器可能会尝试保存到流中,然后从中间重新加载文件?我编辑了应答器可能会尝试保存到流中,然后从中间重新加载文件?