2010-11-19 20 views
4

Dans notre application, nous avons des liens vers des documents PDF générés dynamiquement. Les liens ressemblent à ceci: host/22-5/file_3136.pdf alors pour le navigateur, cela ressemble à un document PDF statique. Lorsque vous cliquez sur le lien, une nouvelle fenêtre s'ouvre. Cette fenêtre reçoit le document PDF seulement (pas de HTML) avec en-têtes comme:Comment afficher l'écran de chargement avant le document PDF

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

Nous voulons que les utilisateurs puissent voir le PDF dans le navigateur si plug-in PDF est installé et pour pouvoir enregistrer le document avec correct nom de fichier.

Maintenant, nous voulons ajouter un écran de chargement qui serait affiché pendant la génération du PDF. Quel est le meilleur moyen de le faire, tout en conservant les fonctionnalités actuelles. Une option consisterait à afficher l'écran de chargement, puis à rediriger vers PDF lorsque la génération est terminée. Cela exigerait que je conserve le PDF sur le serveur pendant un certain temps. Actuellement, ils sont supprimés dès que la réponse est envoyée.

Une autre option consiste à envoyer du code HTML et javascript (pour afficher la page de chargement) avec l'étiquette <embed>, ou <object> qui pointe vers le fichier pdf sur le serveur.

Quelle est la meilleure approche? Qu'est-ce qui fonctionne avec la plupart des navigateurs?

Répondre

0

Sur les sites de téléchargement, je vois souvent une petite fenêtre supplémentaire. Je crois que cette fenêtre agit comme un «chorégraphe» pour contrôler ce qui s'affiche sur la page principale tout en renvoyant une redirection vers le fichier de téléchargement.

+0

Je ne comprends pas vraiment cette approche. En outre, j'ouvre déjà une nouvelle fenêtre pour afficher le PDF. Cette fenêtre ne peut-elle pas faire la "chorégraphie"? –

0

Redirections HTML. Vous créez une page qui redirige "à elle-même" toutes les quelques secondes. Lorsque le PDF est terminé, vous générez une redirection vers celui-ci à la place.

+0

Est-ce que les gens font vraiment ça? Redirige la boucle au lieu d'une simple requête AJAX pour vous indiquer quand le PDF est prêt. –

+0

Oui, ça met tous les cerveaux sur le serveur, au prix d'un trafic supplémentaire. Je ne l'ai jamais fait moi-même, mais je n'ai jamais eu besoin de faire quelque chose comme ça non plus. –

0

Pour réellement précharger le fichier PDF de sorte que l'impression de chargement instantané est donnée. dans la page avant la pdf page liée ajouter un script de pré-charge:

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

Vous pouvez obtenir une image de préchargement de ajaxload.info

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

Le code ci-dessus placé entre et dans la page contenant le lien vers la Le fichier .pdf (ou le fichier html avec le fichier .pdf) indique au navigateur de télécharger le fichier pdf dans le cache du navigateur, mais laissez-le. (le type de fichier est non pertinent image() est pratique, utilisez le même script pour n'importe quel type de fichier car il ne sera jamais rendu) le téléchargement se produit après que la page soit entièrement rendue afin de ne pas retarder la page actuelle. en cliquant sur le lien vers le fichier .pdf (ou la page html) le navigateur trouve le fichier .pdf dans le cache du navigateur et ne le télécharge pas, mais affiche à partir du cache, à des vitesses de téléchargement apparemment aveuglantes.

Dans les navigateurs avec javascript qui est désactivé, la fonction se dégrade gracieusement

+0

C'est peut-être intelligent mais absolument irréalisable pour moi. J'ai de nombreux liens PDF sur une page. Pré-générer tous pour tous les clients va probablement tuer mes serveurs. –

0

Si vous linéariser le .PDF, vous pouvez également afficher la première page très rapidement. J'ai écrit 2 articles présentant le PDF linéarisé au http://www.jpedal.org/PDFblog/2010/11/do-i-have-to-download-the-whole-pdf-if-i-view-it-across-the-internet/ et http://www.jpedal.org/PDFblog/2010/02/linearized-pdf-files/

+0

Ce serait une bonne suggestion d'optimisation. Nous utilisons FOP. Puis-je générer des fichiers PDF linéarisés avec FOP? –

+0

FOP ne génère pas de fichiers PDF linéarisés. Vous pouvez utiliser un outil comme PDFLeo (http://www.rockpdf.com) pour linéariser les fichiers PDF afin qu'ils soient chargés rapidement. – cuteCAT