2009-09-03 18 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をレンダリングします(バイト[] 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; 
} 
関連する問題