2010-03-18 4 views
3

J'utilise ITextSharp pour générer des fichiers PDF à la volée, puis les enregistrer sur le disque et les afficher en utilisant Frame. Le cadre a un attribut appelé src où je passe le nom de fichier généré.Chargement de PDF à partir de la mémoire ASP.Net

Tout cela fonctionne très bien ce que je veux atteindre est de passer le fichier pdf généré à Frame sans l'enregistrer sur le disque.

HtmlToPdfBuilder builder = new HtmlToPdfBuilder(PageSize.LETTER); 
HtmlPdfPage first = builder.AddPage(); 

//import an entire sheet 
builder.ImportStylesheet(Request.PhysicalApplicationPath + "CSS\\Stylesheet.css"); 
string coupon = CreateCoupon(); 
first.AppendHtml(coupon); 

byte[] file = builder.RenderPdf(); 
File.WriteAllBytes(Request.PhysicalApplicationPath+"final.pdf", file); 
printable.Attributes["src"] = "final.pdf"; 

Répondre

2

J'ai fait exactement ce que vous essayez de faire. Vous voudrez créer un gestionnaire (.ashx). Après avoir créé votre PDF, chargez-le dans votre gestionnaire en utilisant le code ci-dessous:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class MapHandler : IHttpHandler, IReadOnlySessionState 
{ 

    public void ProcessRequest(HttpContext context) { 
     CreateImage(context); 
    } 

    private void CreateImage(HttpContext context) { 

     string documentFullname = // Get full name of the PDF you want to display... 

     if (File.Exists(documentFullname)) { 

      byte[] buffer; 

      using (FileStream fileStream = new FileStream(documentFullname, FileMode.Open, FileAccess.Read, FileShare.Read)) 
      using (BinaryReader reader = new BinaryReader(fileStream)) { 
       buffer = reader.ReadBytes((int)reader.BaseStream.Length); 
      } 

      context.Response.ContentType = "application/pdf"; 
      context.Response.AddHeader("Content-Length", buffer.Length.ToString()); 
      context.Response.BinaryWrite(buffer); 
      context.Response.End(); 

     } else { 
      context.Response.Write("Unable to find the document you requested."); 
     } 
    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 
+0

+1, même ici. Fonctionne bien –

+0

Je pense que vous vous méprenez - il veut écrire le pdf généré sans jamais l'écrire sur le disque. Si vous pouviez intégrer son code de génération pdf dans votre fonction CreateImage afin que le pdf soit créé en mémoire et écrit dans la réponse en une fois, alors ce serait une bonne réponse. – patmortech

Questions connexes