ASP.NET MVC 項(xiàng)目直接預(yù)覽PDF文件
背景及需求
項(xiàng)目使用的是MVC4框架,其中有一個(gè)功能是根據(jù)設(shè)置生成PDF文件,并在點(diǎn)擊時(shí)直接預(yù)覽。
實(shí)現(xiàn)過(guò)程
1、第一版實(shí)現(xiàn)代碼:
HTML內(nèi)容
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@Html.ActionLink("預(yù)覽PDF","GetPdf",null,new { target="_blank"})
</div>
</body>
</html>
控制器代碼
public ActionResult GetPdf()
{
return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf");
}
缺點(diǎn):標(biāo)題和文件下載時(shí)名稱不是很友好。

1、第二版實(shí)現(xiàn)代碼:
我們做了2件事情:
1、讓下載彈出框能顯示友好的下載文件名。
2、讓瀏覽器中的其他兩個(gè)顯示GetPdf的地方也顯示友好的內(nèi)容。
自定義ActionFilter,對(duì)Header進(jìn)行修改,變?yōu)閮?nèi)聯(lián)。(直接這么替換不知道會(huì)不會(huì)有隱患。)
public class MyPdfActionFilter : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//Content-Disposition=attachment%3b+filename%3d%22The+Garbage+Collection+Handbook.pdf%22}
var filerHeader = filterContext.HttpContext.Response.Headers.Get("Content-Disposition");
if (!string.IsNullOrEmpty(filerHeader) && filerHeader.Substring(0, "attachment".Length).ToLower().Equals("attachment"))
{ filterContext.HttpContext.Response.Headers["Content-Disposition"] = "inline" + filerHeader.Substring("attachment".Length, filerHeader.Length - "attachment".Length);
}
}
}
自定義ActionNameSelector實(shí)現(xiàn)對(duì)Action名稱的攔截和判斷。
public class MyActionNameSelecter : ActionNameSelectorAttribute
{
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
return actionName.Contains("-PDF文件預(yù)覽");
}
}
控制器內(nèi)代碼修改如下
[MyActionNameSelecter]
[MyPdfActionFilter]
public ActionResult GetPdf()
{
return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf")
//增加FileDownloadName設(shè)置,但是這會(huì)讓內(nèi)容以附件的形式響應(yīng)到瀏覽器(具體參考文件響應(yīng)模式:內(nèi)聯(lián)和附件)。
//文件變成被瀏覽器下載。
{ FileDownloadName = "The Garbage Collection Handbook.pdf" };
}
頁(yè)面內(nèi)容修改如下
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@* 第二個(gè)參數(shù)可能是一個(gè)動(dòng)態(tài)生成的內(nèi)容,需要ACTION中增加名稱選擇攔截,所以自定義了一個(gè)ActionNameSelectorAttribute類滿足要求。 *@
@Html.ActionLink("預(yù)覽PDF", "The Garbage Collection Handbook-PDF文件預(yù)覽", null,new { target="_blank"})
</div>
</body>
</html>
最終效果

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- C#實(shí)現(xiàn)pdf導(dǎo)出 .Net導(dǎo)出pdf文件
- ASP.NET實(shí)現(xiàn)將word文檔轉(zhuǎn)換成pdf的方法
- asp.net 按指定模板導(dǎo)出word,pdf實(shí)例代碼
- Asp.net實(shí)現(xiàn)直接在瀏覽器預(yù)覽Word、Excel、PDF、Txt文件(附源碼)
- 詳解開源免費(fèi)且穩(wěn)定實(shí)用的.NET PDF打印組件itextSharp(.NET組件介紹之八)
- asp.net實(shí)現(xiàn)將ppt文檔轉(zhuǎn)換成pdf的方法
- ASP.NET保存PDF、Word和Excel文件到數(shù)據(jù)庫(kù)
- 如何使用Rotativa在ASP.NET Core MVC中創(chuàng)建PDF詳解
相關(guān)文章
ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection)上篇
這篇文章主要為大家詳細(xì)介紹了ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
密碼綁定至密碼文本框中(TextMode設(shè)為Password)
一般情況之下TextBox的TextMode設(shè)為Password話,我們想在后臺(tái)(.cs)綁定一個(gè)值至此文本框,是無(wú)法實(shí)現(xiàn)的,如果一定要綁定值的話,該如何實(shí)現(xiàn)呢?,本文將告訴你實(shí)現(xiàn)方法,感興趣的朋友可以參考下2013-01-01
ASP.NET中Session和Cache的區(qū)別總結(jié)
這篇文章主要介紹了ASP.NET中Session和Cache的區(qū)別總結(jié),本文結(jié)合使用經(jīng)驗(yàn),總結(jié)出了5點(diǎn)Session緩存和Cache緩存的區(qū)別,需要的朋友可以參考下2015-06-06
.NET?Core使用Worker?Service創(chuàng)建服務(wù)
這篇文章介紹了.NET?Core使用Worker?Service創(chuàng)建服務(wù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
ASP.NET?Core在Task中使用IServiceProvider的問(wèn)題解析
這篇文章主要介紹了解決ASP.NET?Core在Task中使用IServiceProvider的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
ASP.NET中application對(duì)象的使用介紹
這篇文章主要介紹了ASP.NET中application對(duì)象的使用,需要的朋友可以參考下2014-03-03
IIS故障(Connections_Refused)問(wèn)題分析及處理
這幾天某地市Web服務(wù)器連續(xù)多次出現(xiàn)故障問(wèn)題(Connections_Refused),正好借這個(gè)案例向大家詳細(xì)介紹下,需要了解的朋友可以參考下2012-12-12

