4 ways to send a PDF file to the IE Client in ASP.NET 2.0

by Rahul 6/19/2008 4:02:58 PM

In this scrap, I am sharing a project using which you can send PDF files to the IE Client in four different ways.

Create a new C# Website. While creating the following pages ensure that you DON'T have "Place code in Separate file" checkbox as checked. You need to create 4 pages called "Way1.aspx", "Way2.aspx", "Way3.aspx" and "PDFContainer.aspx" without a code behind.

So the four different ways which I was talking about is as follows...

1) You hit a button on a page and the page refreshes itself with a PDF file in the same instance of the IE Browser. You are not prompted to Open/Save/Cancel by the IE Client at all. The code for this page is as follows

Way1.aspx

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.ContentType = "application/pdf";
        Response.Clear();
        Response.TransmitFile("UML.pdf");
        Response.End();
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Way 1</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Send PDF" /><br />
        <br />
        This page will refresh itself with a PDF file opened in the same instance of IE itself. 
        Users will not get prompted to Save/Open/Cancel the PDF file.</div>
    </form>
</body>
</html>

2) You hit a button on a page and the page throws a Dialogbox saying Open/Save/Cancel. You click on Save and the FileName is populated is the document is according to your taste (meaning you have to supply it explicitly).

3) Verify similar to 2 above, but the filename in the Dialogbox is the name of the Page (meaning, if you don't the supply name, the Dialogbox takes the name of the aspx file as the PDF file name).

The code for this page is as follows...

Way2.aspx

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.ClearHeaders();
        Response.ContentType = "application/pdf";
        Response.Clear();
        Response.AppendHeader("Content-Disposition", "attachment;Filename=UML.pdf");
        Response.TransmitFile("UML.pdf");
        Response.End();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        Response.ClearHeaders();
        Response.ContentType = "application/pdf";
        Response.Clear();
        Response.AppendHeader("Content-Disposition", "attachment");
        Response.TransmitFile("UML.pdf");
        Response.End();
    }
    </script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Way 2</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Send PDF" /><br /><br />
        This button will do a postback and the Client will be prompted with a Dialog Box to Save/Open/Cancel the PDF file transmission. The thing to be noticed here is that the FileName in the Dialogbox will be automatically set as UML.pdf <br /><br />
        <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Send PDF without FileName" /><br /><br />
        This button will do a postback and the Client will be prompted with a Dialog Box to Save/Open/Cancel the PDF file transmission. The thing to be noticed here is that the FileName in the Dialogbox (Way2.pdf) is set as the Page Name, which is Way2.aspx</div>
    </form>
</body>
</html>

4) You hit a button on a page and the page opens a new instance of Internet Explorer and loads the PDF file in the IE Client itself without prompting to Open/Save/Cancel. The code for these pages Way3.aspx & PDFContainer.aspx are as follows...

Way3.aspx

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script  language=vbscript>
sub OpenInNewWindow()
    window.open("PDFContainer.aspx")
end sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Way 3</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input type=button OnClick="OpenInNewWindow()"  value="Open in New Window"/>
        <br /><br />
        This time, we will open a new Internet Explorer Window and Show the PDF File directly in the IE
    </div>
    </form>
</body>
</html>

PDFContainer.aspx

<%@ Page Language="C#" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
        Response.ContentType = "application/pdf"; 
        Response.Clear(); 
        Response.TransmitFile("C:\\umlclass.pdf"); 
        Response.End();        
    } 
</script> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <title>PDF File</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div>    
    </div> 
    </form> 
</body> 
</html>

These ways will not work with Adobe Reader 6.0 or below.

HTH, Wave
Rahul


Quote of the day:
To invent, you need a good imagination and a pile of junk. - Thomas A. Edison

Tags: , ,

ASP.NET | Code Snippet | Tips and Tricks

blog comments powered by Disqus

Comments


Disclaimer

The opinions expressed herein are our own personal opinions and do not represent our employer's view in any way.
© Copyright 2014, Rahul Soni