2010-08-26 8 views
0

J'ai essayé de générer des fichiers PDF simples à partir de mon application afin que je puisse ensuite passer à la génération de PDF avec des données dynamiques. Mon code génère les fichiers mais je veux un moyen d'avoir également le navigateur invite le téléchargement du fichier.Invite à télécharger le fichier PDF généré

En fait, je ne veux même pas stocker les fichiers générés sur mon serveur, mais je ne suis pas sûr de savoir comment le faire pour le fournir à l'utilisateur sans le stocker d'abord dans le lecteur du serveur.

public ActionResult GetPDF() 
{ 
    Document document = new Document(); 
    PdfWriter.GetInstance(document, new FileStream(Server.MapPath("../Content/test.pdf"), FileMode.Create)); 
    document.Open(); 
    string strHTML = "<B>I Love ASP.Net!</B>"; 
    HTMLWorker htmlWorker = new HTMLWorker(document); 
    htmlWorker.Parse(new StringReader(strHTML)); 
    document.Close(); 

    return File(document, "application/pdf", Server.HtmlEncode(filename));//this doesnt work, obviously 
} 
+0

Juste curieux, ce que l'API utilisez-vous pour la génération de PDF? –

Répondre

2

utiliser une action FileStreamResult

public FileStreamResult Export(int? ID) 
{   
    MemoryStream stream = new MemoryStream(); 

    //Start of PDF work using iTextSharp PDF library 
    Document pdf = new Document(); 
    PdfWriter writer = PdfWriter.GetInstance(pdf, stream);  
    pdf.Open();  
    pdf.Add(new Phrase("test"));  
    pdf.Close(); 
    //End of PDF work using iTextSharp PDF library 

    //Where the download magic happens 
    Response.ContentType = "application/pdf"; 
    Response.AddHeader("content-disposition", "attachment;filename=Log.pdf"); 
    Response.Buffer = true; 
    Response.Clear(); 
    Response.OutputStream.Write(stream.GetBuffer(), 0, stream.GetBuffer().Length); 
    Response.OutputStream.Flush(); 
    Response.End(); 

    return new FileStreamResult(Response.OutputStream, "application/pdf"); 
} 
+0

tblImage.AddCell(); pdf.Ajouter (Image); Ces deux lignes me donnent l'erreur: S – ignaciofuentes

+0

Désolé, a pris un groupe, Vous avez juste besoin de la partie inférieure, je vais mettre à jour pour le rendre clair. –

0

vous devez faire quelque chose comme ...

changement

PdfWriter.GetInstance(document, new FileStream(Server.MapPath("../Content/test.pdf"), FileMode.Create)); 

à

var memorystream ms = new memorystream; 
PdfWriter.GetInstance(document, ms); 

puis à la fin ...

Response.Clear; 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment;filename=PDFFile.pdf"); 

ms.Write(Response.OutputStream); 
+0

Cela me donne un couple d'erreurs .. principalement avec ms.Write, qui ne prend pas Response.OutputStream comme paramètre ... im sur mvc2 si cela fait une différence – ignaciofuentes

Questions connexes