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 ...無操作呼び出しだと思います。コンテンツがターゲット媒体に書き込まれる前に内部バッファを有するいかなるストリームにおいても「フラッシュ」は意味を成すが、RAMメモリが既にターゲット媒体である「メモリストリーム」では意味を成さない。 – mkl
ありがとう!!出来た :) –