2010-11-19 11 views
4

In unserer Anwendung haben wir Links zu dynamisch generierten PDF-Dokumenten. Die Links sehen in etwa so aus host/22-5/file_3136.pdf so scheint es für den Browser wie ein statisches PDF-Dokument. Wenn der Link angeklickt wird, öffnet sich ein neues Fenster. Das Fenster erhält PDF-Dokument nur (kein HTML) mit Header wie:So zeigen Sie den Ladebildschirm vor dem PDF-Dokument an

Content-Disposition: inline; filename=file_3136.pdf 
Content-Type: application/pdf 

Wir wollen Benutzer in der Lage sein, das PDF im Browser zu sehen, ob PDF-Plug-in installiert ist und in der Lage sein, das Dokument speichern mit dem korrekten Dateiname.

Jetzt möchten wir einen Ladebildschirm hinzufügen, der während der PDF-Generierung angezeigt werden würde. Was ist der beste Weg, dies zu tun, während die aktuelle Funktionalität beibehalten wird.

Eine Option wäre, den Ladebildschirm anzuzeigen und dann nach Abschluss der Generierung in PDF umzuleiten. Dies würde erfordern, dass ich das PDF für einige Zeit auf dem Server aufbewahre. Momentan werden sie gelöscht, sobald die Antwort gesendet wird.

Eine weitere Option ist es, einige HTML und JavaScript zu senden (die Lade Seite zeigen) mit <embed>, oder <object> Tag, das auf dem Server zu dem pdf verweist.

Was ist der beste Ansatz? Was funktioniert mit den meisten Browsern?

Antwort

0

Auf Download-Sites sehe ich oft ein zusätzliches (kleines) Fenster auftauchen. Ich glaube, dass Fenster als "Choreograph" fungiert, um zu steuern, was auf der Hauptseite angezeigt wird, während auch eine Weiterleitung auf die Download-Datei abgefeuert wird.

+0

Ich verstehe diesen Ansatz nicht wirklich. Außerdem öffne ich schon ein neues Fenster um das PDF anzuzeigen. Kann das Fenster nicht die "Choreographie" machen? –

0

HTML-Weiterleitungen. Sie erstellen eine Seite, die alle paar Sekunden "an sich selbst" weiterleitet. Wenn die PDF-Datei fertig ist, generieren Sie stattdessen eine Weiterleitung an diese.

+0

Tun die Leute das wirklich? Redirect-Schleife anstelle einer einfachen AJAX-Anfrage, um Ihnen mitzuteilen, wann die PDF-Datei fertig ist. –

+0

Ja, es bringt alle Gehirne auf den Server, auf Kosten von zusätzlichem Datenverkehr. Ich habe es nie selbst gemacht, aber ich musste auch nie so etwas tun. –

0

Um die PDF-Datei tatsächlich vorab zu laden, so dass der Eindruck eines sofortigen Ladens gegeben ist. auf der Seite vor der pdf verlinkte Seite eine Vorbelastung Skript hinzufügen:

<img id="pdfLoader" src="preloader.jpg"/> 

Sie können von ajaxload.info

<script language="javascript" type="text/javascript"> 
//<![CDATA[ 
<!-- 
var pdfLoader = document.getElementById("pdfLoader"); 
pdfLoader.src = "http://mysite.com/mypdf.pdf"; 
//--> 
//]]> 
</script> 

Der obigen Code zwischen und auf der Seite mit dem Link zu der ein preloader Bild bekommen platziert .pdf-Datei (oder HTML-Datei mit dem .pdf darin) weist den Browser an, die PDF-Datei in den Browser-Cache zu laden, aber lassen Sie es dort. (Dateityp ist irrelevantes Bild() ist bequem, verwenden Sie das gleiche Skript für jeden Dateityp, da es nie gerendert wird) der Download geschieht, nachdem die Seite vollständig gerendert wurde, so verzögert die aktuelle Seite nicht. Beim Klicken auf den Link zur .pdf-Datei (oder HTML-Seite) findet der Browser die .pdf-Datei im Browser-Cache und lädt sie nicht herunter, sondern zeigt sie aus dem Cache bei scheinbar blendenden Download-Geschwindigkeiten an.

In Browser mit Javascript deaktiviert, verschlechtert sich die Funktion der ersten Seite angezeigt werden können sehr schnell anmutig auch Sie

+0

Es ist vielleicht clever, aber absolut nicht machbar für mich. Ich habe zahlreiche PDF-Links auf einer Seite. Das Vorgenerieren aller von ihnen für alle Kunden wird wahrscheinlich meine Server töten. –

0
+0

Dies wäre ein guter Optimierungsvorschlag. Wir benutzen FOP. Kann ich linearisierte PDFs mit FOP erzeugen? –

+0

FOP erzeugt keine linearisierten PDFs. Sie können ein Tool wie PDFLeo (http://www.rockpdf.com) verwenden, um PDF-Dateien zu linearisieren, damit sie schnell geladen werden. – cuteCAT

Verwandte Themen