本文转自:http://www.codeproject.com/Tips/697733/Display-PDF-within-web-browser-using-MVC

Introduction

I will demonstrate you different way to display PDF within browser using  MVC3.

Background

I have created MVC3 empty project. I have added Controller name Home and created action name Index. I have added Index view for index action. I have added Temp.pdf in my solution.

Using the code

Method 1:- Display PDf by filePath. Let's create action name DispalyPDF in Home controller as fellow and add view for action.

Hide    Copy Code
public FileResult DisplayPDF()
{
return File("/Temp.pdf", "application/pdf");
}

That's it you can able to view PDF in browser.

I have use File function as my return type which return FileResult having overload File(filePaht,contentType).

filePath: Define the path of file. I have file in my root directory name Temp.pdf. I have define my file path as "/Temp.pdf".

contentType: Define the type of file we are returning. If the content type is supported by browser browser will display that file.

I have specified link in the Index view that will navigate to the action DisplyaPDF().

Hide    Copy Code
<li>@Html.ActionLink("Viw Temp PDF Method1","DisplayPDF")</li>

Method 2:- Display PDF by fileContent. Let's create action PDFDispaly() as fellow and add view PDFDisplay.

Hide    Copy Code
public FileResult PDFDisplay()
{
string filepath = Server.MapPath("/Temp.pdf");
byte[] pdfByte = Helper.GetBytesFromFile(filepath);
return File(pdfByte, "application/pdf");
}

I have use File function as return type having overload File(fileContent,fileContentType)

fileContent : define file content as the byte array.

fileContentType: define the type of file eg pdf, excel, text etc..

I have use server.MapPath method to get actual path of file on server by specifying virtual path as argument. I have created Helper method name GetByetsFromFile that will return fileContent as byte array by accepting actual file path as argument.

Hide    Copy Code
public static byte[] GetBytesFromFile(string fullFilePath)
{
// this method is limited to 2^32 byte files (4.2 GB) FileStream fs = null;
try
{
fs = File.OpenRead(fullFilePath);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
return bytes;
}
finally
{
if (fs != null)
{
fs.Close();
fs.Dispose();
}
} }

Method3:- Download PDF File Let's add another link that will provide to download Temp.pdf on ClientSide.

Hide    Copy Code
<li>@Html.ActionLink("Download Temp PDF","PDFDownload")</li>

Let's create action name PDFDownload that will allow user to download PDF.

Hide    Copy Code
public FileResult PDFDownload()
{ string filepath =Server.MapPath("/Temp.pdf");
byte[] pdfByte = Helper.GetBytesFromFile(filepath);
return File(pdfByte, "application/pdf", "demoform1");
}

I have use File function as my return type where overload  accept the fileContent, contentType and fileDownloadName.

fileDownloadName: we just need to specify the file download name where MVC3 engine will do all the magic for us and download the file on client side with the specified name.

Method4:- Display PDF File as PartialView. You can not specify the return type File as PartialViewResult. Let's use the HTML 5 tag embed in partialview to display pdf within browser and render the partial view inside div using AJax.ActionLink helper.

Let's add another actionlink on Index View but this time we will add ajax.actionlink().

Hide    Copy Code
<li>@Ajax.ActionLink("Viw Temp PDF Method4", "PDFPartialView", new AjaxOptions { UpdateTargetId = "pdfContainer" })</li> 

Let's create action method PDFPartialView inside Home controller that return partialviewresult as fellow.

Hide    Copy Code
public PartialViewResult PDFPartialView()
{
return PartialView();
}

Add view by checking create partial view check box. We have created partial view PDFPartialView. Create embed html 5 tag inside the partial view. Specify src to the relative path of the PDF file as fellow.

Hide    Copy Code
<h4>Partial View That display PDF....</h4><br /><embed src="/Temp.pdf" type="application/pdf"></embed> 

Click on the link "View Temp pdf method3". You will notice pdf loaded inside the div id pdfContainer.

Method5:- Display PDF as 64 bit string. This method only work with Chrome browser. We will follow following 3 step process.

Step 1 Convert PDF into the 64 bit array.

Step 2 Convert 64 bit array into 64 bit string.

Step3 Display 64 bit string as Src of the embed tag.

Note:- Do not forget to specify mime type as type.(e.g. "image/png")

Let's create action PDFInCrome in Home controller as follow.

Hide    Copy Code
//only work in the crome
public PartialViewResult PDFInCrome()
{ string filepath = Server.MapPath("/Temp.pdf");
byte[] pdfByte = Helper.GetBytesFromFile(filepath);
var strBase64=Convert.ToBase64String(pdfByte);
PDFCrome pdfCrome = new PDFCrome();
pdfCrome.Content = string.Format("data:application/pdf;base64,{0}", strBase64);
return PartialView(pdfCrome);
}

Let's add partial view PDFInCrome as follow.

Hide    Copy Code
 @model DisplayPDFDemo.Comman.PDFCrome

<embed src="@Model.Content" ></embed> 

We are done with our action and view. Let's call our partial view on click of Ajax.ActionLink in our Index view.

Hide    Copy Code
<li>@Ajax.ActionLink("Viw Temp PDF Method5", "PDFInCrome", new AjaxOptions { UpdateTargetId = "pdfContainer" })</li>  

This is end our simple demo of display PDF within web browser hope you enjoy.

 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

[转]Display PDF within web browser using MVC3的更多相关文章

  1. Display PDF in browser | Acrobat, Reader XI

    点这个链接查看详细的解决办法 http://helpx.adobe.com/acrobat/using/display-pdf-browser-acrobat-xi.html When you cli ...

  2. Csharp:user WebControl Read Adobe PDF Files In Your Web Browser

    namespace GeovinDu.PdfViewer { [DefaultProperty("FilePath")] [ToolboxData("<{0}:Sh ...

  3. 关于PB调用Microsoft Web Browser控件的一些问题

    Microsoft Web Browser控件是WINDOWS系统自带的控件,一般不需要单独安装,由于工作的需要,把使用中遇到的问题记录一下,以便查阅. 插入控件: 环境为PB12.0,insert- ...

  4. Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结

    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求 ...

  5. 对于一个网站,如何禁止直接从浏览器Web browser中访问js文件

    比如有一个网站,https://testsystem.infotest.com 在这个网站的内容文件目录下面,有一个scripts文件夹,该文件夹中有一个js文件,比如lukeTest.js文件 这样 ...

  6. C#彻底解决Web Browser 跨域读取Iframes内容

    C#彻底解决Web Browser 跨域读取Iframes内容 用C# winform的控件web browser 读取网页内容,分析一下数据,做一些采集工作. 如果是同一个域名下面还是好办的,基本上 ...

  7. 教你如何清除 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 的历史记录

    有些许强迫症的开发人员可能会因为 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 冗余的历史记录而感到苦恼,下面的方法就可以有效的帮助解决你的痛点 ...

  8. How To Open An URL In Android’s Web Browser

    How To Open An URL In Android’s Web Browser 以下核心代码片断,将展现使用“android.content.Intent” 打开一个指定的 URL. butt ...

  9. How to open a web site with the default web browser in a NEW window

    http://delphi.about.com/cs/adptips2004/a/bltip0504_4.htm When using ShellExecute (as explained in th ...

随机推荐

  1. ASP.NET MVC进阶一

    一.控制器相关 在Controller类中方法访问级别为public的方法,就是行为(Action). 如果不希望Controller类中的方法成为Action(可以在地址栏中被访问),有两种实现方式 ...

  2. linux2.4.18内核定时器的使用

    Linux2.4下驱动中定时器的应用 我的内核是2.4.18的.Linux的内核中定义了一个定时器的结构: #include<linux/timer.h> struct timer_lis ...

  3. jsp中自定义Taglib案例

    一.使用TagSupport类案例解析 1.自定义Tag使用jdbc连接mysql数据库 1.1定义标签处理器类 package com.able.tag; import java.sql.Conne ...

  4. [moka学习笔记]yii2.0 rules的用法(收集,不定期更新)

    public function rules(){ return [ ['title','required','message'=>'标题不能为空'], ['title','string','mi ...

  5. Android 手机卫士11--窗体弹出PopupWindow

    protected void showPopupWindow(View view) { View popupView = View.inflate(this, R.layout.popupwindow ...

  6. linux下log4j乱码解决

    使用log4j的时候,在WIN系统的时候正常显示中文,但是发布到linux系统的时候中文就显示成乱码了 由于log4j配置文件中没有设置编码格式(encoding),所以log4j就使用系统默认编码. ...

  7. Android SDK Tools和Android SDK Platform-tools

    SDK Platform 可以理解为版本,因此有 SDK Platform 7,SDK Platform 8等等Android SDK Tools 是各个版本都可通用的工具文件夹,里面有draw9pa ...

  8. WP多语言

    WP多语言.本地化 建立一个Resources文件夹,再建立两个文件夹en-US和zh-CN,(分别表示美国英语.中文中国),每个文件夹下再新建资源文件(.resx),在资源文件中添加示例信息 新建一 ...

  9. ArcEngine 0x8004023C

    在进行缓冲区查询时,查询的并是不要素本身的范围,而是缓冲一定半径,所以用到了ITopologicalOperator接口,主要是利用其buffer方法,代码如下: IFeatureClass pFea ...

  10. 基于MATLAB实现的云模型计算隶属度

    ”云”或者’云滴‘是云模型的基本单元,所谓云是指在其论域上的一个分布,可以用联合概率的形式(x, u)来表示 云模型用三个数据来表示其特征 期望:云滴在论域空间分布的期望,一般用符号Εx表示. 熵:不 ...