ASP.NET MVC 项目直接预览PDF文件

背景及需求

项目使用的是MVC4框架,其中有一个功能是根据设置生成PDF文件,并在点击时直接预览。

实现过程

1、第一版实现代码:

HTML内容

@{
 Layout = null;
}

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

控制器代码

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

缺点:标题和文件下载时名称不是很友好。

1、第二版实现代码:

我们做了2件事情:

  1、让下载弹出框能显示友好的下载文件名。

  2、让浏览器中的其他两个显示GetPdf的地方也显示友好的内容。

自定义ActionFilter,对Header进行修改,变为内联。(直接这么替换不知道会不会有隐患。)

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实现对Action名称的拦截和判断。

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

控制器内代码修改如下

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

页面内容修改如下

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

最终效果

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • ASP.NET保存PDF、Word和Excel文件到数据库

    在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名称为Documents的表: 代码如下: create table Documents ( SNo int identity, Name_File varchar(100), DisplayName varchar(50), Extension varchar(10), ContentType va

  • asp.net 按指定模板导出word,pdf实例代码

    复制代码 代码如下: /// <summary>        /// 导出word文件        /// </summary>        /// <param name="templateFile">模板路径</param>        /// <param name="fileNameWord">导出文件名称</param>        /// <param name=&q

  • asp.net实现将ppt文档转换成pdf的方法

    本文实例讲述了asp.net实现将ppt文档转换成pdf的方法.分享给大家供大家参考.具体实现方法如下: 一.添加引用 复制代码 代码如下: using Microsoft.Office.Core; using Microsoft.Office.Interop.PowerPoint; 二.转换方法 复制代码 代码如下: ///<summary>        /// 把PowerPoint文件转换成PDF格式文件       ///</summary>        ///<

  • Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)

    1.功能说明 输入文件路径,在浏览器输出文件预览信息,经测试360极速(Chrome).IE9/10.Firefox通过 2.分类文件及代码说明 DemoFiles 存放可测试文件 Default.aspx  启动页 ExcelPreview.cs  Excel预览类 public static void Priview(System.Web.UI.Page p, string inFilePath, string outDirPath = "") { Microsoft.Office

  • ASP.NET实现将word文档转换成pdf的方法

    本文实例讲述了ASP.NET实现将word文档转换成pdf的方法,分享给大家供大家参考.具体实现步骤如下: 一.添加引用 复制代码 代码如下: using Microsoft.Office.Interop.Word; 二.转换方法   1.方法 复制代码 代码如下: /// <summary>     /// 把Word文件转换成pdf文件     /// </summary>     /// <param name="sourcePath">需要转

  • ASP.NET MVC 项目直接预览PDF文件

    背景及需求 项目使用的是MVC4框架,其中有一个功能是根据设置生成PDF文件,并在点击时直接预览. 实现过程 1.第一版实现代码: HTML内容 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> &

  • Vue-pdf实现在线预览PDF文件

    前言 在大多数项目中都会遇到在线预览PDF文件,项目使用的是element ui,使用vue-pdf实现. 安装依赖 npm install --save vue-pdf 相关参数 参数介绍: url :pdf 文件的路径,可以是本地路径,也可以是在线路径. page: 当前显示的页数,比如第一页page=1 rotate : 旋转角度,比如0就是不旋转,+90,-90 就是水平旋转. progress :当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了. page-

  • 如何在vue中使用pdfjs预览pdf文件

    目录 前言 在写项目的过程中,偶尔会有使用到pdf的文件,当我们想看pdf文件的时候,你的操作是不是先把pdf文件下载下来,通过电脑安装的专用于打开pdf的软件来查看pdf文件呢.如果有个需求说不要让用户安装软件呢,毕竟还是有很多用户不知道怎么安装软件或者这个东西需要什么东西才能打开嘛.ok,有了这样的需求那我们是不是也得去实现嘛,毕竟这理由咱也没法反驳啊. 思考 既然都提出来了,那就想想怎么使用咯.既然需要用到pdf.不知道有没有关于js能够操作的库文件来帮我呢?果断一百度,咱们今天的主角就来

  • 如何在Windows Vista中预览PDF文件的方法

    之前我们曾介绍过Windows Vista的预览功能,即在用户不打开相应文件的情况下查看文件的具体内容,这是个相当有用的功能,可以大大提高日常工作的效率.Windows Vista预览功能可支持的对象包括图片.音频.视频.字体.文本.E-mail乃至Office文档如Word.Excel.PowerPoint文件. 不过,对于PDF(Portable Document Format)文件,则没有这么幸运了,即使在Windows Vista中安装了可以创建PDF的Office 2007后,仍然不能

  • Vue实现在线预览pdf文件功能(利用pdf.js/iframe/embed)

    前言 最近在做一个精品课程,需要在线预览课件ppt,我们的思路是将ppt转换为pdf在线预览,所以问题就是如何实现在线预览pdf了. 在实现的过程中,为了更好地显示效果,我采用了多种不同的方法,最终选择效果最好的pdf.js. 实现方法: 1:iframe 采取iframe将pdf嵌入网页从而达到预览效果,想法很美好,实现很简单,但显示很残酷- 虽然一行代码简洁明了,打开谷歌浏览器效果也还行,但缺点也是十分明显的!!!! <iframe src="http......" widt

  • vue使用pdf.js预览pdf文件的方法

    我们在页面进行pdf预览的时候,由于有些文件不能够进行打印和下载,这时候我们使用window自带的pdf就很难满足客户的需求,因此需要另外的办法来支持我们进行特殊条件的pdf文件预览,这里我采用引入pdf.js文件的形式来达到目的. 第一步:下载pdf.js 引入pdf.js文件 地址如下:http://mozilla.github.io/pdf.js/getting_started/ 第二步,vue引入 我这里是把下载下来的文件放在了根目录的piblic下 第三步,使用 主要是地址"/buil

  • vue实现在线预览pdf文件和下载(pdf.js)

    最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如jquery.media.js(ie无法直接浏览) 最后选择了pdf.js插件(兼容ie10及以上.谷歌.安卓,苹果) 强烈推荐改插件,以下介绍用法 (1)下载插件 下载路径: pdf.js (2)将下载构建后的插件放到文件中public(vue/cli 3.0) (3)在vue文件中直接使用,贴上完整代码 <template> <div class="wrap"> <iframe :src=

  • vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法

    目前大多数PC浏览器支持在线预览pdf文件,但大多数手机浏览器还未支持,尝试用手机浏览器打开一个pdf文件会弹出是否下载的提示框.网上查了一些资料,在实现的过程中,还是走了比较多的弯路,最后采用了备受推荐的pdf.js插件来实现. pdf.js可以从github上clone下来,然后本地gulp生成可用的pdf.js和pdf.worker.js(参考readme即可). 不过更简单的方法是使用cnpm来安装: cnpm isntall --save pdfjs-dist,然后可以在项目中使用了,

  • Java预览PDF时的文件名称问题及解决

    目录 Java预览PDF时的文件名称 问题场景 解决思路 解决方案 预览pdf时中文乱码 第一步 第二步 Java预览PDF时的文件名称 问题场景 今天在做新项目的时候,测试提交过来一个bug:在谷歌浏览器上预览一些客户上传的pdf文件时,发现浏览器的标签上展示的要么不是我们看到的文件名,要么就直接是方法名,看起来不太合适,让我想想办法优化优化. 刚开始看到这个问题的时候确实很头疼,因为之前尝试过去解决这个问题,但是当时因为一些其他的原因,没有仔细的去思考这些个问题,这会做新项目刚好有时间去琢磨

  • vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题解决

    目录 vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题 1.先安装vue-pdf-embed 2.安装后 在使用页面引入 PS:vue3.0借用vue-pdf-embed实现在线预览pdf文件 实现效果 实现步骤 一:安装依赖 二:页面使用 三:可能报错一 问题解决 1:下载依赖 2:配置vue.config.js文件 三:可能报错二 问题原因 问题解决 vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题 本来想的很简单 觉得

随机推荐