如何显示数字签名已在 PDF 文件中签名

How to display a digital signature was signed in PDF file

我用 iTextSharp 5.5.11.0 的 MakeSignature.SignDetached 签署了一个 PDF 文件。在我把它转换成字符串并保存在数据库中之后。
我通过以下段落从网络浏览器请求它,但无法显示数字签名。谁能帮我解释一下?

//PDFSigned is string get from database
byte[] info = System.Convert.FromBase64String(PDFSigned);
PdfReader reader = new PdfReader(info);
Document doc = new Document(PageSize.A4, 25, 10, 25, 10);
PdfWriter writer = PdfWriter.GetInstance(doc, Response.OutputStream);
//open doc to create page of PDF
doc.Open();
PdfContentByte cb = writer.DirectContent;               
doc.NewPage();
PdfImportedPage page = writer.GetImportedPage(reader, reader.NumberOfPages);
cb.AddTemplate(page, 0, 0);
                    
doc.Close();
writer.CloseStream = false;
reader.Close();           

Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.End();

谢谢!

您的代码破坏了数据库中的 pdf 并丢弃了除最后一页的静态页面内容之外的所有内容。这尤其会丢弃签名。

如果您实际上只想允许用户从数据库下载任何pdf文件,您可以简单地直接响应通过base64从数据库解码字符串得到的PDF字节。

应该是这样的:

//PDFSigned is string get from database
byte[] info = System.Convert.FromBase64String(PDFSigned);

Response.OutputStream.Write(info, 0, info.Length);

Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.End();

(我不是很喜欢 .Net Web 服务编程,所以细节可能不够理想。)