[转]Display PDF within web browser using MVC3
本文转自: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.
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().
<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.
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.
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.
<li>@Html.ActionLink("Download Temp PDF","PDFDownload")</li>
Let's create action name PDFDownload that will allow user to download PDF.
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().
<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.
public PartialViewResult PDFPartialView()
{
return PartialView();
}
Add view by checking create partial view check box. We have created partial view . Create embed html 5 tag inside the partial view. Specify src to the relative path of the PDF file as fellow.PDFPartialView
<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.
//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.
@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.
<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的更多相关文章
- Display PDF in browser | Acrobat, Reader XI
点这个链接查看详细的解决办法 http://helpx.adobe.com/acrobat/using/display-pdf-browser-acrobat-xi.html When you cli ...
- Csharp:user WebControl Read Adobe PDF Files In Your Web Browser
namespace GeovinDu.PdfViewer { [DefaultProperty("FilePath")] [ToolboxData("<{0}:Sh ...
- 关于PB调用Microsoft Web Browser控件的一些问题
Microsoft Web Browser控件是WINDOWS系统自带的控件,一般不需要单独安装,由于工作的需要,把使用中遇到的问题记录一下,以便查阅. 插入控件: 环境为PB12.0,insert- ...
- Atitit.office word excel ppt pdf 的web在线预览方案与html转换方案 attilax 总结
Atitit.office word excel ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word excel pdf 的web预览要求 ...
- 对于一个网站,如何禁止直接从浏览器Web browser中访问js文件
比如有一个网站,https://testsystem.infotest.com 在这个网站的内容文件目录下面,有一个scripts文件夹,该文件夹中有一个js文件,比如lukeTest.js文件 这样 ...
- C#彻底解决Web Browser 跨域读取Iframes内容
C#彻底解决Web Browser 跨域读取Iframes内容 用C# winform的控件web browser 读取网页内容,分析一下数据,做一些采集工作. 如果是同一个域名下面还是好办的,基本上 ...
- 教你如何清除 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 的历史记录
有些许强迫症的开发人员可能会因为 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 冗余的历史记录而感到苦恼,下面的方法就可以有效的帮助解决你的痛点 ...
- 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 ...
- 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 ...
随机推荐
- C# LLSQL快速查询框架
介绍一种新类型查询方法,类似linq,lambda语法,类似标准的sql使用习惯,支持匿名类型,泛型,目前支持mssql,mysql, 切换只需要DatabaseConfig.DatabaseType ...
- Python 3.X 实现定时器 Timer,制作抽象的Timer定时器基类
Python 在不依赖第三方库的前提下,对于定时器的实现并不是很完美,但是这不意味着我们无法实现. 阅读了网上的一些资料,得出一些结论,顺手写了一个基类的定时器(Python3) BaseTimer: ...
- [moka摘录]查看邮件是否已被阅读
原文地址:http://www.php100.com/html/php/hanshu/2013/1101/6347.html 查看邮件是否已被阅读 当你在发送邮件时,你或许很想知道该邮件是否被对方已阅 ...
- 编译安装memcached扩展记要
编译memcached扩展的时候,得指定libmemcached库的位置 --with-libmemcached-dir=DIR 来指定路径.这个路径就是安装libmemcached时指定的prefi ...
- StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's All About Performance
http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25-servers-and ...
- ASP.NET MVC下判断用户登录和授权的方法
日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization),则对于某种用户角色才开放. 在asp. ...
- jQuery知识大杂汇
1.jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作. 基础语法: $(selector).action() 举几枚栗子吧: $(this).hide() - 隐藏当前元素 $ ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- Instruments指南:如何调试内存泄露
Instruments指南:如何调试内存泄露 开篇 现在,你应该使用的ARC,而不是原来我们使用的MRC或者其他.但是我们在使用ARC的时候也会出现内存泄露的情况. 幸运的是,苹果为我们提供了Inst ...
- 基础学习day08---多态、简单工厂、Object类equals和toString
一.多态 1.1.多态概念 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型:猫 x = new 猫(); 同时猫也是动物中的一种,也可以 ...