如何制作可下载的正确pdf文件,并在 asp.net 的itextsharp中对其进行验证
How to make downloadable correct pdf file and verify it in itextsharp in asp.net?
我使用itextsharp创建了一个PDF文件,它工作正常。我创建了一个 Activex 控件,用于在客户端使用 USB 令牌对 PDF 文件进行数字签名。客户端使用其USB令牌对PDF文件进行数字签名,并将PDF文件存储到服务器上,其他授权人员可以下载它。Activex只是获取一个PDF文件,并对PDF文件进行数字签名并临时存储,然后使用itextsharp库的PdfEncodings类将PDF文件作为base64字符串返回。为了使用 Activex 对象,我创建了两个 asp.net 隐藏字段,一个用于未签名的字段,另一个用于签名的 PDF。创建 PDF 文件后,我将其转换为 base64 字符串,然后将其分配给 asp.net 隐藏字段,然后调用 javascript 函数使用 Activex 控件进行签名,然后将值分配给另一个 asp.net 隐藏字段,然后获取该值并使其可下载,但是,当下载 PDF 时,它说 PDF 已损坏。我已经检查了临时文件夹中的PDF文件,这是正确的。
用于在 activex 控件中对 pdf 进行数字签名的代码
PdfReader pdfReader = new PdfReader(PdfEncodings.ConvertToBytes(unsignedPDF, null));
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".pdf";
FileStream signedPdf = new FileStream(fileName, FileMode.Create);
PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, ''0');
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);
if (sel.Count > 0)
{
X509Certificate2 cert = sel[0];
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-1");
PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
signatureAppearance.Reason = "I declare this document is legal";
signatureAppearance.Location = "Delhi";
signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature");
signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
return PdfEncodings.ConvertToString(File.ReadAllBytes(fileName), null);
}
else
{
return "ERROR";
}
从浏览器下载PDF的代码:
byte[] pdfByte = PdfEncodings.ConvertToBytes(signed.Value, null);
Response.Clear();
MemoryStream ms = new MemoryStream(pdfByte);
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=labtest.pdf");
Response.Buffer = true;
ms.WriteTo(Response.OutputStream);
Response.End();
Pdfencodings不是为了这个,我只是使用了convert.tobase64string和convert.frombase64string,它起作用了。 :)
相关文章:
- 借助asp.net验证或java脚本对多个文本进行验证
- java.net和javascript之间正则表达式的差异
- 将Javascript数组发送到控制器ASP.NET MVC
- ASP.NET通过单击JavaScript按钮触发c#事件
- 将数据从javascript文件导入VB.Net页面
- 文本框不是从Javascript/Asp.net中的对话框中打印出来的
- 从javascript调用asp.net codebehind函数
- jQuery Error adadvisor.net
- 使用javascript的Asp.net内容占位符
- 获取ASP.NET Ajax Timer状态
- ASP.NET网络摄像头显示
- 如何在只能有一个asp.net表单的主页上从asp.net页面中的javascript中获取值
- 如何将乳胶配方奶粉图像保存到Asp.net中的文件夹中
- asp.net,包括iss上的javascript slow
- 选择不在GridView-ASP.NET中激发
- 如何添加CSS&JavaScript进入Windows窗体应用程序C#.net
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 使用带有.net autopostback的ryanfait.com自定义表单元素
- 如何制作可下载的正确pdf文件,并在 asp.net 的itextsharp中对其进行验证
- iTextSharp:PDF 中的 Javascript 在 vb.Net 中填写时不会触发