2013-01-07 13 views
5

Sto usando lo strumento Rotativa per visualizzare il pdf. Funziona bene con il seguente codice:Rotativa Scarica con la finestra di dialogo Salva con nome

public ActionResult PreviewDocument() 
{ 

    var htmlContent = Session["html"].ToString(); 
    var model = new PdfInfo { Content = htmlContent, Name = "PDF Doc" }; 
    return new ViewAsPdf(model); 
} 

ho voluto conoscere il modo per scaricare il pdf tramite browser "salva come" finestra sul clic su un pulsante e non mostrare in qualche iframe. "new ViewAsPdf (model)" restituisce solo i dati pdf.

Grazie in anticipo.

risposta

5

È possibile aggiungere ulteriori attributi alla chiamata Rotativa in questo modo:

return new PartialViewAsPdf("PreviewDocument", pdfModel) 
        { 
         PageSize = Size.A4, 
         FileName = "PDF Doc.pdf" 
        }; 

E sarà creare il file per te. :)

+0

Perché questa non è la risposta accettata? È semplice, richiede pochissimo codice extra e funziona perfettamente. – Simon

3

Ho finalmente avuto modo di farlo.

In realtà il metodo rotativa "return new ViewAsPdf (model)" restituisce HttpResponseStream. Dove difficilmente possiamo fare qualcosa. Ma possiamo modificare/modificare la risposta una volta che l'azione viene eseguita utilizzando l'attributo personalizzato. Possiamo sovrascrivere il metodo OnResultExecuted() del filtro azione.

azione del controller

[HttpGet] 
[ActionDownload] //here a custom action filter added 
public ActionResult DownloadDocument() 
{ 
    var htmlContent = "<h1>sachin Kumar</hi>"; 

    var model = new PdfInfo {FtContent = htmlContent, FtName = "Populate Form"}; 
    return new ViewAsPdf(model); 
} 

personalizzato filtro Azione:

public class ActionDownloadAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
      //Add content-disposition header to response so that browser understand to download as an attachment. 
     filterContext.HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + "Report.pdf"); 

      base.OnResultExecuted(filterContext); 
    } 
} 
+1

Perché questa risposta non è indicata come "Risposta"? questo è utile a tutte le persone che utilizzano MVC ActionResults per restituire file PDF, indipendentemente da qualsiasi libreria. Sto usando MvcRazorToPdf, dipende da iTextSharp e questo codice funziona ancora. –

+0

Questo è inutilmente complicato, dai un'occhiata alla risposta di @ derekadk. Tutto quello che devi fare è aggiungere l'attributo FileName: return new ViewAsPdf (model) {FileName = "file.pdf"}; –

3

È possibile utilizzare restituire nuova ActionAsPdf. Nessun attributo personalizzato o altro richiesto. Esempio: https://github.com/webgio/Rotativa/

public ActionResult PrintPreviewDocument() 
{ 
    return new ActionAsPdf("PreviewDocument") { FileName = "PDF Doc.pdf" }; 
} 

public ActionResult PreviewDocument() 
{ 

    var htmlContent = Session["html"].ToString(); 
    var model = new PdfInfo { Content = htmlContent, Name = "PDF Doc" }; 
    return View(model); 
} 
Problemi correlati