ASP.NET MVC 項目直接預(yù)覽PDF文件
背景及需求
項目使用的是MVC4框架,其中有一個功能是根據(jù)設(shè)置生成PDF文件,并在點擊時直接預(yù)覽。
實現(xiàn)過程
1、第一版實現(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");
}
缺點:標(biāo)題和文件下載時名稱不是很友好。

1、第二版實現(xiàn)代碼:
我們做了2件事情:
1、讓下載彈出框能顯示友好的下載文件名。
2、讓瀏覽器中的其他兩個顯示GetPdf的地方也顯示友好的內(nèi)容。
自定義ActionFilter,對Header進(jìn)行修改,變?yōu)閮?nèi)聯(lián)。(直接這么替換不知道會不會有隱患。)
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實現(xiàn)對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è)置,但是這會讓內(nèi)容以附件的形式響應(yīng)到瀏覽器(具體參考文件響應(yīng)模式:內(nèi)聯(lián)和附件)。
//文件變成被瀏覽器下載。
{ FileDownloadName = "The Garbage Collection Handbook.pdf" };
}
頁面內(nèi)容修改如下
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@* 第二個參數(shù)可能是一個動態(tài)生成的內(nèi)容,需要ACTION中增加名稱選擇攔截,所以自定義了一個ActionNameSelectorAttribute類滿足要求。 *@
@Html.ActionLink("預(yù)覽PDF", "The Garbage Collection Handbook-PDF文件預(yù)覽", null,new { target="_blank"})
</div>
</body>
</html>
最終效果

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- C#實現(xiàn)pdf導(dǎo)出 .Net導(dǎo)出pdf文件
- ASP.NET實現(xiàn)將word文檔轉(zhuǎn)換成pdf的方法
- asp.net 按指定模板導(dǎo)出word,pdf實例代碼
- Asp.net實現(xiàn)直接在瀏覽器預(yù)覽Word、Excel、PDF、Txt文件(附源碼)
- 詳解開源免費且穩(wěn)定實用的.NET PDF打印組件itextSharp(.NET組件介紹之八)
- asp.net實現(xiàn)將ppt文檔轉(zhuǎn)換成pdf的方法
- ASP.NET保存PDF、Word和Excel文件到數(shù)據(jù)庫
- 如何使用Rotativa在ASP.NET Core MVC中創(chuàng)建PDF詳解
相關(guān)文章
Asp.Net Core實現(xiàn)Excel導(dǎo)出功能的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Asp.Net Core實現(xiàn)Excel導(dǎo)出功能的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
asp.net實現(xiàn)access數(shù)據(jù)庫分頁的方法
這篇文章主要介紹了asp.net實現(xiàn)access數(shù)據(jù)庫分頁的方法,很實用的access操作技巧,需要的朋友可以參考下2014-08-08
如何使用Python實現(xiàn)阿拉伯?dāng)?shù)字轉(zhuǎn)換成中國漢字
本文提供了一個Python代碼示例,用于將阿拉伯?dāng)?shù)字轉(zhuǎn)換為中文漢字表示,代碼定義了數(shù)字到漢字的映射表,并實現(xiàn)了處理不同位數(shù)(如個、十、百、千、萬等)的函數(shù),特別地,處理方式包括對大數(shù)字的分解和轉(zhuǎn)換,以及對連續(xù)零的特殊處理,感興趣的朋友跟隨小編一起看看吧2024-09-09
WPF數(shù)據(jù)綁定中的RelativeSource屬性
這篇文章介紹了WPF數(shù)據(jù)綁定中的RelativeSource屬性,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
Visual Studio 2013如何使XML文件轉(zhuǎn)換成類
Visual Studio 2013如何使XML文件轉(zhuǎn)換成類?這篇文章主要介紹了Visual Studio2013輕松將你的XML文件轉(zhuǎn)換成類的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
.net 中的 StringBuilder 和 TextWriter 區(qū)別詳解
這篇文章主要介紹了.net 中的 StringBuilder 和 TextWriter 區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

