Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 10h44   #1
Membre habitué
 
Étudiant
Inscription : janvier 2007
Messages : 123
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2007
Messages : 123
Points : 116
Points : 116
Par défaut Afficher un PDF dans une iFrame (ou un <object>)

Bonjour à tous,

Actuellement, dans le cadre d'un projet au boulot, je dois corriger un bug concernant l'affichage d'un PDF dans une page Web.
Le problème est le suivant :
Le PDF s'affiche bien dans la page sous Firefox
Mais sous IE8, avec Acrobat Reader X, je n'ai qu'un écran gris (voir screenshot), de plus vu la réaction de l'ordi sur le moment, je suis certain à 99.99% que le plugin PDF est chargé et que le document est bien chargé il s'agit donc d'un bug que je ne sais pas résoudre.

Voici mes questions :

Comment insérer PROPREMENT un pdf dans une page web ? (peu importe les réglages utilisateur : le comportement par défaut du plugin PDF sous Windows (et même sous Linux je crois) c'est de laisser les pdf s'afficher dans la page)
Est-ce qu'une iFrame est une bonne idée ? (J'ai déjà essayé avec un <object> l'erreur sous IE8 est la même...par contre ça marche nikel sous Firefox)
Est-ce que les headers utilisés sont les bons ?

Ci-dessous le code PHP/XHTML/JS qui charge le fichier PDF.

Le PHP :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$contrat = $documentState->getDocumentBean();
$absolutePathName = $contrat->path_document;
if (file_exists($absolutePathName)) {
	header('Content-Type: application/pdf');
	header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
	header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
	header('Content-Disposition: inline filename=' . $contrat->nom_archivage. date("dmy",time()) . '.pdf');
	readfile($absolutePathName);
	exit;
}
else
{
echo "Contrat / Fichier non trouvé";
exit;
}
Le javascript (appel le code PHP ci-dessus )
Code :
$('#visuContrat').attr('src','ged/index/ajax-dispatch?document_id='+idDocument+'&actionRequire=ActionVisualiserContrat');
Et voici le HTML :
Code :
<iframe width="800px" height="250" id="visuContrat" ></iframe>
Screenshot du bug sous IE8 :


Je vous remercie par avance
mrjay42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h07   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
à tout hasard réinstalle acrobat reader.

sinon est-ce que tu as essayé ceci?


Code :
1
2
3
4
5
6
7
8
9
10
11
12
<object type="application/pdf" name="PDF" id="PDF">
<param name="src" value="chemin du pdf.pdf" />
</object>
 
pour configurer le lecteur d'adobe
 
<script type="text/javascript">
PDF.SetShowToolBar("true"); //--- barre d'outils true(visible) false(non visible) ---//
PDF.SetShowScrollbar("true"); //--- barre de scroll true(visible) false(non visible) ---//
PDF.SetPageMode("none"); //--- cache les signets ---//
PDF.setZoom(80%); //--- Zoom le document à 80% ---//
</script>
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h10   #3
Membre habitué
 
Étudiant
Inscription : janvier 2007
Messages : 123
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2007
Messages : 123
Points : 116
Points : 116
Je teste ça de suite !

Pour la réinstall d'Acrobat reader X, ce n'est pas la peine (enfin...je pense), le bug a été constaté sur deux ordinateurs totalement différents...
mrjay42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h20   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Oui c'est bien mieux avec object.

Il est préférable d'ajouter l'attribut data pour être sûr que la source soit reconnue.
Code :
<object type="application/pdf" data="fichier.pdf" name="PDF" id="PDF">
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 16h48   #5
Membre habitué
 
Étudiant
Inscription : janvier 2007
Messages : 123
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2007
Messages : 123
Points : 116
Points : 116
Alors alors

Après deux semaines sur CE BUG à la con.
J'ai fini par trouver la solution.

Il faut mettre :
Code :
header("Accept-Ranges: bytes");


Sinon cet abruti d'IE est pas foutu d'afficher un PDF.

Voici l'extrait de la rfc : http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Citation:
14.5 Accept-Ranges

The Accept-Ranges response-header field allows the server to
indicate its acceptance of range requests for a resource:

Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges
acceptable-ranges = 1#range-unit | "none"

Origin servers that accept byte-range requests MAY send

Accept-Ranges: bytes

but are not required to do so. Clients MAY generate byte-range
requests without having received this header for the resource
involved. Range units are defined in section 3.12.

Servers that do not accept any kind of range request for a
resource MAY send

Accept-Ranges: none

to advise the client not to attempt a range request.
mrjay42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h00.


 
 
 
 
Partenaires

Hébergement Web