Rob
Rob

Reputation: 2472

Display PDF in iframe

I have a solution in place for my site that renders a requested PDF document in a full page using the code below. Now my client wants the document rendered within an iframe. I can't seem to get it to work readily, maybe I am missing something obvious. The first code will properly display the PDF in a new window.

        if (File.Exists(filename))
        {            
            //Set the appropriate ContentType.
            Response.ContentType = "Application/pdf";
            Response.WriteFile(filename);
            Response.End();
        }
        else Response.Write("Error - can not find report");

The iframe code looks like this:

<iframe runat="server" id="iframepdf" height="600" width="800" > </iframe>

I know I am supposed to use the src attribute for the filename, but the problem seems to be that the iframe loads before the Page_Load event fires, so the PDF is not created. Is there something obvious I am missing?

Upvotes: 3

Views: 41418

Answers (4)

Rob
Rob

Reputation: 2472

I actually solved this! The solution was to generate another aspx page (showpdf.aspx) with the code that renders the PDF (the meat of it being the Response... code), then call that code in the iframe. I pass the necessary variable from the source page. Thanks all!

<iframe runat="server" id="iframepdf" height="600" width="800"  >  
</iframe>

        protected void Page_Load(object sender, EventArgs e)
        {
            String encounterID = Request.QueryString["EncounterID"];
            iframepdf.Attributes.Add("src", "showpdf.aspx?EncounterID=" + Request.QueryString["EncounterID"]);
        }

Upvotes: 2

Graymatter
Graymatter

Reputation: 6587

Use an ASHX handler. The source code to your getmypdf.ashx.cs handler should look something like this:

using System;
using System.Web;

public class getmypdf : IHttpHandler 
{
  public void ProcessRequest(HttpContext context)
  {
        Response.ContentType = "Application/pdf";
        Response.WriteFile("myfile.pdf");
        Response.End();
  }

  public bool IsReusable 
  {
    get 
    {
      return false;
    }
  }
}

getmypdf.ashx would contain something like this:

<% @ webhandler language="C#" class="getmypdf" %>

And your iframe would look like this:

<iframe runat="server" id="iframepdf" height="600" width="800" src="..../getmypdf.ashx"> </iframe>

Upvotes: 10

M Abbas
M Abbas

Reputation: 6479

Did you try:

window.onload = function() {
     document.getElementById("iframepdf").src = "the URL that loads the PDF"
}

Upvotes: 0

SLaks
SLaks

Reputation: 887245

You need to set the src="" to a different URL that serves a PDF.

Upvotes: 0

Related Questions