2009-09-03 2 views
3

itextsharp가 생성 한 pdf 파일을 databse로 저장하려고합니다. 그러나, 나는 지금까지 성공적으로 지내지 못했습니다.C# 3.0 MemoryStream을 사용하여 데이터베이스에 itextsharp pdf를 저장하십시오.

저는 Linq를 SQL에 사용하고 있습니다.

여기에 코드입니다 :

  MemoryStream ms = new MemoryStream(); 
      Document d = new Document(PageSize.A4, 60, 60, 40, 40); 
      PdfWriter w = PdfWriter.GetInstance(d, ms); 
      w.CloseStream = false; 

      string txtTemplate = ""; 
      Encoding en = Encoding.GetEncoding("iso-8859-1"); 
      StreamReader sr = new StreamReader(HttpContext.Current.Server.MapPath("~/Content/templates/CessaoDireitosDica.txt"), en); 
      txtTemplate = sr.ReadToEnd(); 
      sr.Close(); 
      string conselhos = ""; 

      Font font = new Font(Font.HELVETICA, 11, Font.NORMAL); 
      font.SetColor(0xC6, 0xC6, 0xC6); 

      Paragraph txtBody = new Paragraph(txtTemplate, font); 

      txtBody .SetAlignment(ElementTags.ALIGN_JUSTIFIED); 

      d.Open(); 
      d.Add(txtBody); 
      d.Close(); 

      byte[] pdfDone = ms.ToArray(); 
      w.Flush(); 
      ms.Flush(); 
      ms.Close(); 

      return pdfDone; 

그것은 오류가 발생하지 않습니다,하지만 DB에 아무것도 저장하지 않습니다. DB 필드는 "이미지"필드 유형입니다. 나는이 코드를 사용하여 즉석에서 pdf를 렌더링한다. (필자는 byte [] pdfDone ...을 잘라내어 MemoryStream을 리턴한다.)

나는 무엇이 잘못 될 수 있는지 모르겠다 ... 그리고 디버깅, 나는 또한 byte [] pdfDone은 3487과 같은 값을 가지고 있지만 아무것도 DB에 저장되지 않는 것을 볼 수있다.

미리 감사드립니다.

+0

아무 데이터베이스 코드도 보이지 않습니다. 나는 또한 수동으로 닫는 대신에'using' 문을 사용하는 것을 권장 할 것이다 ... 그 이상으로, 그것은 정말로 itextsharp 문제 일 뿐이다. –

+0

불행히도 iTextSharp는 IDisposable을 구현하지 않지만 데이터베이스 코드의 부족에 동의합니다. –

+0

이 코드는 저장할 바이트 배열을 반환하는 메서드의 일부입니다. 데이터베이스 코드는 여기에 표시되지 않으며 코드가 맞습니다. 나는 그 오류를 발견했다. 그것은 내가 사용하고 있던 거래였습니다. 답장을 보내 주셔서 감사합니다. – AndreMiranda

답변

5
function byte[] CreatePdf(){ 
      byte[] result; 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       Document pDoc = new Document(PageSize.A4, 0, 0, 0, 0); 
       PdfWriter writer = PdfWriter.GetInstance(pDoc, ms); 
       pDoc.Open(); 

       //here you can create your own pdf. 

       pDoc.Close(); 
       result = ms.GetBuffer(); 
      } 

      return result; 
}