1
我正在研究此功能,它從數據庫中獲取PDF並用需要從數據庫中檢索的簽名圖像簽署PDF。我爲此使用iTextSharp
,但不知何故,它不起作用,正在破壞我的數據庫中的PDF。Itextsharp PDF遭到損壞
這是我的控制器
public ActionResult Approve(int? id)
{
ApplicationUser users = db.Users.Find(User.Identity.GetUserId());
Reports reports = db.Reports.Find(id);
if (reports == null || users == null) return View();
byte[] content = reports.Content;
byte[] signature = users.Signature;
iTextSharp.text.Image sigImg = iTextSharp.text.Image.GetInstance(signature);
PdfReader reader = new PdfReader(content);
using (MemoryStream ms = new MemoryStream())
{
PdfStamper stamper = new PdfStamper(reader, ms);
sigImg.SetAbsolutePosition(0f,0f);
sigImg.ScalePercent(90.0f); // 100.0f == same size
//Give some space after the image
sigImg.SpacingAfter = 1f;
sigImg.Alignment = Element.ALIGN_BOTTOM;
PdfContentByte over = stamper.GetOverContent(1);
over.AddImage(sigImg);
reports.Content = ms.ToArray();
content = reports.Content;
ms.Flush();
db.SaveChanges();
if(stamper!= null)
stamper.Close();
if(reader!= null)
reader.Close();
return File(content, "application/pdf");
// Clean up
}
}
的我在做什麼錯在這裏的代碼?
謝謝,你還可以告訴我什麼ms.flush()做什麼? –
'MemoryStream'的'flush' ...我會假定實質上是一個NOP ...一個無操作的調用。在將內容寫入目標介質之前,對於具有內部緩衝區的任何流而言,「flush」是有意義的,但對於其中RAM存儲器已經是目標介質的「MemoryStream」不具有「MemoryStream」。 – mkl
謝謝!有效 :) –