Я подписал PDF-файл с помощью MakeSignature.SignDetached из iTextSharp 5.5.11.0. После того, как я преобразовал его в строку и сохранил в базе данных.
Я запрашиваю его в веб-браузере по приведенному ниже абзацу, но не могу отобразить цифровую подпись. Кто может помочь мне объяснить?

//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();

Благодарность!

1
hoa tatquang 19 Май 2021 в 05:28

1 ответ

Лучший ответ

Ваш код искажает PDF-файл из базы данных и отбрасывает все, кроме статического содержимого последней страницы. Это, в частности, отбрасывает подпись.

Если вы на самом деле просто хотите разрешить пользователям загружать любые файлы PDF из базы данных , вы можете просто напрямую ответить на полученные байты PDF, декодируя строку из базы данных с помощью base64.

Это должно быть примерно так:

//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, поэтому детали могут быть не совсем оптимальными.)

0
mkl 20 Май 2021 в 09:02