2013-01-07 80 views
5

我正在使用Rotativa工具來顯示pdf。它正常工作與下面的代碼:Rotativa下載另存爲對話框

public ActionResult PreviewDocument() 
{ 

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

我想知道通過瀏覽器的「另存爲」對話框下載PDF上點擊一個按鈕的方式,而不是在一些iframe中顯示。 「新的ViewAsPdf(模型)」只是返回pdf數據。

在此先感謝。

回答

5

您可以到Rotativa呼叫這樣添加附加屬性:

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

,它會爲你創建的文件。 :)

+0

爲什麼這不是被接受的答案?這很簡單,幾乎不需要任何額外的代碼,並且工作得很好。 – Simon

3

我終於有辦法做到這一點。

其實rotativa的方法「返回新的ViewAsPdf(模型)」返回HttpResponseStream。我們幾乎無法做的事情。但是,我們可以通過使用自定義屬性來修改/更改響應。我們可以覆蓋操作過濾器的OnResultExecuted()方法。

控制器的動作

[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); 
} 

自定義操作過濾器:

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

爲什麼這個答案沒有被提及爲「答案」?這對所有使用MVC ActionResults返回PDF文件的人都很有用,而不管任何庫。我正在使用MvcRazorToPdf,它取決於iTextSharp,並且此代碼仍然有效。 –

+0

這是不必要的複雜,看看@ derekadk的答案。您只需添加FileName屬性即可: 返回新的ViewAsPdf(模型){FileName =「file.pdf」}; –

3

您可以使用返回新ActionAsPdf。沒有自定義屬性或其他所需的東西。 例子: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); 
}