首先请注意,我是这个平台的新手,因此不习惯规则或 "最佳实践",所以如果有什么我应该编辑的,请告诉我。
但现在,这是我的问题。
我想用当前用户存储的证书来签署一个pdf文档。为了完成这个任务,我不允许使用需要许可证的库,所以基本上我使用的所有东西都必须是开源的。我必须使用的证书的私钥被设置为不可导出。我已经用 "Syncfusion PDF "库完成了任务,但不幸的是,它不是开源的。
由于我对编程,尤其是c#编程相当陌生,我现在很难找到一个不使用Syncfusion的解决方案。希望有人能帮忙:)
下面是使用Syncfusion的代码,它工作得非常好。
Stream stream = new FileStream(src, FileMode.OpenOrCreate);
PdfLoadedDocument loadedDocument = new PdfLoadedDocument(stream);
PdfLoadedPage page = loadedDocument.Pages[0] as PdfLoadedPage;
PdfLoadedSignatureField field = loadedDocument.Form.Fields[0] as PdfLoadedSignatureField;
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
X509Certificate2 digitalID = collection[0];
PdfCertificate certificate = new PdfCertificate(digitalID);
PdfSignature pdf1 = new PdfSignature(loadedDocument, page, certificate, "Signature", field);
field.Signature = pdf1;
loadedDocument.Save(stream);
loadedDocument.Close(true);
我们已经分析了你的需求。但我们只能帮助你,如果你在Syncfusion库有任何疑问。
注意事项 : 我在Syncfusion工作。