J'ai besoin d'afficher les fichiers PDF d'une tierce partie sur une page web. J'ai des liens vers les documents tels qu'ils apparaissent sur les pages sources. Malheureusement, aucun de ces liens n'est un lien réel vers les documents, mais plutôt des requêtes GET avec certains paramètres, ou d'autres références indirectes comme celles-ci :
http://cdm.unfccc.int/UserManagement/FileStorage/SNM7EQ2RUD4IA0JLO3HCZ8BTK1VX5P
Si le site web n'impose pas le téléchargement avec Content-Disposition: attachment;
dans les en-têtes de réponse, comme celui ci-dessus, alors je peux facilement obtenir l'affichage nécessaire par :
<object width="90%" height="600" type="application/pdf"
data="http://cdm.unfccc.int/UserManagement/FileStorage/SNM7EQ2RUD4IA0JLO3HCZ8BTK1VX5P"
id="pdf_content">
<p>Can't seem to display the document. Try <a href="http://cdm.unfccc.int/UserManagement/FileStorage/SNM7EQ2RUD4IA0JLO3HCZ8BTK1VX5P">
downloading</a> it.</p>
<embed type="application/pdf" src="http://cdm.unfccc.int/UserManagement/FileStorage/SNM7EQ2RUD4IA0JLO3HCZ8BTK1VX5P"
width="90%" height="600" />
</object>
Il s'adapte très bien à la majorité des navigateurs. L'utilisation de <object>
y <embed>
en même temps fonctionne pour moi, et, pour autant que j'ai testé, n'affecte pas le problème que je décris ci-dessous (dites-moi si je me trompe).
Le problème commence lorsque le site Web exige le téléchargement avec la balise susmentionnée dans les en-têtes HTTP. Par exemple, le document sur le lien suivant :
http://mer.markit.com/br-reg/PublicReport.action?getDocumentById=true&document_id=103000000000681
ne serait pas affiché par la structure HTML que j'ai montrée ci-dessus. Il tombe gracieusement et le lien pour le téléchargement fonctionne très bien, mais j'ai besoin de le visualiser !
Ça fait 3 jours que je me tape la tête contre le mur, je n'arrive pas à comprendre.
Il existe peut-être un moyen de capturer les en-têtes de la demande et de les ignorer, ou de forcer la "visualisation" dans la demande GET.
Pour des informations générales, il s'agit d'une partie d'une application Ruby on Rails, la solution devrait donc venir de là. Je ne donne pas de code ROR ici, car cela ne semble pas être une source de problèmes.
Toute solution simple serait la bienvenue, et toute autre solution serait la bienvenue.
Les solutions alternatives auxquelles j'ai pensé et les commentaires à rejeter :
-
Télécharger tous ces fichiers au stockage local à l'avance et les servir à partir de là.
La capacité de stockage nécessaire serait d'environ ~1TB et en augmentation, donc stocker sur le serveur serait coûteux pour un petit SaaS commercial qu'il est. -
Mettez ces documents en cache au moment où vous en aurez besoin. Par exemple, lorsqu'une personne ouvre la page du projet, le processus télécharge en arrière-plan les PDF associés, de sorte que si l'utilisateur clique sur le lien du document, il reçoit le document qui vient d'être téléchargé sur le stockage local. Le cache pourrait être conservé pendant quelques heures/jours, au cas où l'utilisateur reviendrait.
Cela pourrait être viable, mais si la base d'utilisateurs était importante, cette solution aurait le même problème que la précédente. En outre, à l'heure actuelle, je ne saurais pas comment mettre en œuvre ce type d'algorithme (je suis un débutant, vous voyez).