2009-09-03 11 views
3

J'essaie d'enregistrer à la base de données un fichier pdf généré par itextsharp. Mais, je n'ai pas réussi jusqu'à présent. J'utilise Linq pour sql.C# 3.0 Enregistrer itextsharp pdf à la base de données en utilisant MemoryStream

Voici le code:

  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; 

Il jette pas d'erreur, mais il ne sauve rien dans DB. Le champ DB est un type de champ "image". J'utilise aussi ce code pour rendre un pdf à la volée (j'ai coupé l'octet [] pdfDone ... et renvoyé le MemoryStream).

Je ne sais pas ce qui peut être faux ... Et le débogage, je pourrais aussi voir que byte [] pdfDone a une valeur (quelque chose comme 3487), mais rien n'est enregistré dans DB.

Merci d'avance!

+0

Je ne vois * aucun * code de base de données ici. Je recommande également d'utiliser des instructions 'using' au lieu de toutes les fermetures manuelles ... au-delà de cela, il semble que ce soit juste un problème d'itextsharp. –

+0

Malheureusement, iTextSharp n'implémente pas IDisposable, mais je suis d'accord sur le manque de code de base de données. –

+0

Ce code fait partie d'une méthode qui renvoie un tableau d'octets à enregistrer. Le code de la base de données n'est pas affiché ici et le code est correct. J'ai découvert l'erreur. C'était sur une transaction que j'utilisais. Merci pour vos réponses. – AndreMiranda

Répondre

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; 
} 
Questions connexes