ASP.NET MVC prévisualise directement les fichiers PDF

高洛峰
Libérer: 2017-02-27 16:31:54
original
3277 Les gens l'ont consulté

Contexte et exigences

Le projet utilise le framework MVC4. L'une des fonctions consiste à générer des fichiers PDF en fonction des paramètres et à les prévisualiser directement lorsque vous cliquez dessus.

Processus de mise en œuvre

1. Code de mise en œuvre de la première version :

Contenu HTML

@{
 Layout = null;
}

<!DOCTYPE html>
<html>
<head>
 <meta name="viewport" content="width=device-width" />
 <title>Index</title>
</head>
<body>
 <p> 
 @Html.ActionLink("预览PDF","GetPdf",null,new { target="_blank"})
 </p>
</body>
</html>
Copier après la connexion

Code du contrôleur

 public ActionResult GetPdf()
 {
  return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf");
 }
Copier après la connexion

Inconvénients : Le titre et le nom du fichier lors du téléchargement ne sont pas très conviviaux.

ASP.NET MVC 直接预览PDF文件

1. Code d'implémentation de la deuxième version :

Nous avons fait 2 choses :

1. Laissez la boîte de dialogue de téléchargement afficher un nom de fichier de téléchargement convivial.

2. Laissez les deux autres endroits du navigateur qui affichent GetPdf afficher également du contenu convivial.

Personnalisez l'ActionFilter et modifiez l'en-tête pour qu'il devienne en ligne. (Je ne sais pas s'il y aura des dangers cachés à le remplacer directement.)

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);
  }
 }
 }
Copier après la connexion

Implémentation personnalisée d'ActionNameSelector Interception et jugement des noms d'action.

public class MyActionNameSelecter : ActionNameSelectorAttribute
 {
 public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
 {
  return actionName.Contains("-PDF文件预览");
 }
 }
Copier après la connexion

Le code dans le contrôleur est modifié comme suit

[MyActionNameSelecter]
 [MyPdfActionFilter]
 public ActionResult GetPdf()
 {
  return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf")
  //增加FileDownloadName设置,但是这会让内容以附件的形式响应到浏览器(具体参考文件响应模式:内联和附件)。
  //文件变成被浏览器下载。
  { FileDownloadName = "The Garbage Collection Handbook.pdf" };
 }
Copier après la connexion

Le contenu de la page est modifié comme suit

@{
 Layout = null;
}
<!DOCTYPE html>
<html>
<head>
 <meta name="viewport" content="width=device-width" />
 <title>Index</title>
</head>
<body>
 <p> 
 @* 第二个参数可能是一个动态生成的内容,需要ACTION中增加名称选择拦截,所以自定义了一个ActionNameSelectorAttribute类满足要求。 *@
 @Html.ActionLink("预览PDF", "The Garbage Collection Handbook-PDF文件预览", null,new { target="_blank"})
 </p>
</body>
</html>
Copier après la connexion

Effet final

ASP.NET MVC 直接预览PDF文件


Pour plus d'articles liés à ASP.NET MVC aperçu direct des fichiers PDF, veuillez faire attention au site Web PHP chinois !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal