2009-05-01 15 views
0

Ich habe eine klassische ASP-Seite, die ein PDF generiert, dient es dem Browser. Was ich tun möchte, ist eine Lade-Seite, die das PDF im Hintergrund lädt, bevor es dem Browser zur Verfügung gestellt wird, wenn dies abgeschlossen ist, im Wesentlichen eine nette Seite hinzufügend, die dem Benutzer anzeigt, dass etwas passiert.Erstelle PDF im Hintergrund

Ich habe Dinge wie die Yahoo Fortschrittsbalken angeschaut, aber ich habe keine Möglichkeit gesehen, die PDF-Datei zu bedienen.

Hat jemand irgendwelche Vorschläge? Ich bin mir sicher, dass dies vorher getan worden sein muss.

Antwort

0

Ich habe eine Lösung für diese Situation gefunden, die Iframes verwendet. Es ist keine klassische Asp, aber ich sehe nicht, warum es nicht funktionieren würde. Hier ist die article Ich fand.

BEARBEITEN: Code hinzugefügt.

Container Seite von Ihrer Anwendung aufgerufen:

<head runat="server"> 
    <script language="javascript" type="text/javascript"> 
     function BuildPDF() { 
      var iframe = document.createElement("iframe"); 
      iframe.src = "BuildPDF.asp?" + <whatever args you need>; 
      iframe.style.display = "none"; 
      document.body.appendChild(iframe); 
     } 

     function UpdateProgress(message) { 
      document.getElementById('txtStatus').value = message; 
     } 

     function SetDisplayFileName(fileName) { 
      var viewFrame = document.createElement("iframe"); 
      viewFrame.id = "viewFrame"; 
      viewFrame.src = "WhateverTheNameOfYourPDFViewASPPageAndArgs"; 
      viewFrame.style.width = '100%'; 
      viewFrame.style.height = document.documentElement.clientHeight - 20; 
      document.body.appendChild(viewFrame); 
     } 

     function ResizeFrame() { 
      var viewFrame = document.getElementById("viewFrame"); 
      viewFrame.style.height = document.documentElement.clientHeight - 20; 
     } 
    </script> 
</head> 
<body onload="BuildPDF();" onresize="ResizeFrame();"> 
    <form id="form1" runat="server"> 
    <input type="text" id="txtStatus" style="width:80%; font-family: Tahoma, Verdana; font-size: small; font-weight: bold;" readonly="readonly" /> 
    <br />  
    </form> 
</body> 

Dann irgendwo in Ihrem BuildPDF.asp, haben Sie eine Funktion so etwas wie dies, dass Sie jederzeit anrufen können Sie die Statusmeldung aktualisieren möchten:

function UpdateProgress(message) 
    Response.Write("<script>parent.UpdateProgress('" & message & "');</script>") 
    Response.Flush() 
end function 

Die Seite, auf die Sie im "viewFrame" verwiesen haben, ist Ihre Seite, die den ContentType "application/pdf" streamt. Auch das habe ich in ASP.Net gemacht, aber ich sehe keinen Grund, warum es im klassischen ASP nicht funktionieren würde.

+0

Das ist die richtige Idee aber die klassische ASP-Seite, die aufgerufen wird, Response.ContentType = "application/pdf", es wäre nicht möglich, Skript-Tags auf dieser Seite auszugeben. –

+0

In dieser Situation haben Sie drei Seiten: eine "Container" -Seite mit zwei Iframes und eine Seite für jeden Iframe. Eine Iframe-Seite würde Ihre Fortschrittsupdates haben. Die andere würde Ihre Response.ContentType = "application/pdf" haben. –