IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Afficher un PDF dans une iFrame (ou un <object>)


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Points : 177
    Points
    177
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#visuContrat').attr('src','ged/index/ajax-dispatch?document_id='+idDocument+'&actionRequire=ActionVisualiserContrat');
    Et voici le HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <iframe width="800px" height="250" id="visuContrat" ></iframe>
    Screenshot du bug sous IE8 :


    Je vous remercie par avance

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    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 : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    à tout hasard réinstalle acrobat reader.

    sinon est-ce que tu as essayé ceci?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Points : 177
    Points
    177
    Par défaut
    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...

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <object type="application/pdf" data="fichier.pdf" name="PDF" id="PDF">

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Points : 177
    Points
    177
    Par défaut
    Alors alors

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

    Il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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.

Discussions similaires

  1. Afficher un PDF dans une fenêtre
    Par chpounz dans le forum wxPython
    Réponses: 3
    Dernier message: 19/03/2009, 19h36
  2. afficher un pdf dans une page web
    Par amico125 dans le forum JSF
    Réponses: 0
    Dernier message: 27/02/2009, 17h45
  3. IE7-Vista pdf dans une iframe
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/04/2008, 11h35
  4. Afficher un XSL dans une iframe
    Par isn44 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 06/03/2008, 18h38
  5. [PDF] Afficher un pdf dans une page web
    Par hutchuck dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/01/2006, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo