Heim  >  Artikel  >  Backend-Entwicklung  >  ASP.NET MVC-Einstellungen generieren PDF-Dateien und können zur Vorschau angeklickt werden

ASP.NET MVC-Einstellungen generieren PDF-Dateien und können zur Vorschau angeklickt werden

Y2J
Y2JOriginal
2017-05-09 11:22:114069Durchsuche

In diesem Artikel wird hauptsächlich die Methode zur direkten Vorschau von PDF-Dateien in ASP.NET MVC-Projekten vorgestellt, die einen sehr guten Referenzwert hat. Schauen wir uns das mit dem Editor an

Hintergrund und Anforderungen

Das Projekt verwendet das MVC4-Framework. Eine der Funktionen besteht darin, PDF-Dateien basierend auf Einstellungen zu generieren und diese beim Klicken direkt in der Vorschau anzuzeigen.

Implementierungsprozess

1. Implementierungscode der ersten Version:

HTML-Inhalt

@{
 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>

Controller-Code

 public ActionResult GetPdf()
 {
  return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf");
 }

Nachteile: Die Titel und Name des Dateidownloads sind nicht sehr benutzerfreundlich.

1. Implementierungscode der zweiten Version:

Wir haben zwei Dinge getan:

1. Lassen Sie im Download-Popup-Fenster einen benutzerfreundlichen Download-Dateinamen anzeigen.

2. Lassen Sie die anderen beiden Stellen im Browser, an denen GetPdf angezeigt wird, auch benutzerfreundliche Inhalte anzeigen.

Passen Sie den ActionFilter an und ändern Sie den Header so, dass er inline wird. (Ich weiß nicht, ob es versteckte Gefahren gibt, wenn Sie es direkt auf diese Weise ersetzen.)

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

Passen Sie ActionNameSelector an, um Abfangen und Urteilen zu implementieren von Aktionsnamen.

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

Der Code im Controller wird wie folgt geändert

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

Seiteninhalt wie folgt ändern

@{
 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>

Endeffekt

[Verwandte Empfehlungen]

1. ASP.NET Kostenloses Video-Tutorial

2. ASP.NET-Tutorial

3. Geek Academy ASP .NET-Video-Tutorial

Das obige ist der detaillierte Inhalt vonASP.NET MVC-Einstellungen generieren PDF-Dateien und können zur Vorschau angeklickt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn