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

Servlets/JSP Java Discussion :

Afficher le flux d'un PDF


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut Afficher le flux d'un PDF
    Je souhaite afficher le flux d'un pdf généré via iText, depuis le serveur.
    Si j'ai bien des données dans ce flux, j'affiche le pdf dans une nouvelle popup, si je n'ai pas de données correcte ou une erreur, j'affiche un message sur la page en cours (Edition.jsp)

    Fichier Edition.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <s:form id="pdf" action="ExportPdf" theme="simple" >  
       ...
        <sj:menu name="typeEdition" cssClass="edition" list="listeEditions" />
    </s:form>
    struts.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <action name="ExportPdf" class="ExportPdfAction">
       <result name="success" type="stream">
           <param name="inputName">inputStreamPdf</param> 
           <param name="contentType">application/pdf</param> 
           <param name="contentDisposition">filename="myFile.pdf"</param> 
           <param name="bufferSize">2048</param>
        </result>
        <result name="error">/WEB-INF/web/Edition.jsp</result>          
    </action>
    javascript, lors du click sur l'item menu
    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
    17
    18
    19
    20
    21
    22
     
    //  click sur l'item du menu 
    $('.edition').bind('click', function(event, data) {
        $('#pdf').submit();       
    }); 
     
    $('#pdf').submit(function(event) {
        // stop le submit normal
        event.preventDefault();
     
        // post avec les paramètres
        var posting = $.post( $( this ).attr( 'action' ), $('#pdf').serialize());
     
        // attend le résultat
        posting.done(function( data, event ) {
        if (data.substring(0,4) != '%PDF') {
           alert ("error");         
        } else {
           // le format pdf est reconnu mais pas affiché (le stream est dans l'url, mais pas dans le contenu)
           window.open('data:application/pdf,'+ data, 'pageEdition', 'menubar=no, height=600, width=900' );
        }   
    });
    Donc, je reçoi des données dans data (%PDF-1.4..) mais impossible d'afficher le pdf correctement.
    Une solution ?
    Merci

  2. #2
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut
    up

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 766
    Par défaut
    Je ne sais pas trop ce que fait ton code, mais
    le principe habituel est que ta servlet écrive le flux pdf dans la réponse.

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut
    En fait, je reçois bien le flux du PDF du côté client mais je n'arrive pas à l'afficher !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // attend le résultat
        posting.done(function( data, event ) {
        if (data.substring(0,4) != '%PDF') {
           alert ("error");         
        } else {
           // le format pdf est reconnu mais pas affiché (le stream est dans l'url, mais pas dans le contenu)
           window.open('data:application/pdf,'+ data, 'pageEdition', 'menubar=no, height=600, width=900' );
        }
    data contient le flux, mais lors du window.open(..., le flux est affiché dans la barre d'adresse mais pas dans le document !

    Merci

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    C'est un peu normal, ce que tu as récupéré, c'est le document pdf (sous forme d'une suite d'octets)... c'est le "contentType" qui fait que le navigateur peut faire le lien avec un plugin pour afficher correctement ton document.

    Ce que tu pourrais faire :

    - tu appelles ton serveur (ajax) pour lui demander de générer le document pdf que tu placeras dans un endroit accessible pour le client
    - tu renvois un statut et/ou un message au client
    - le client interprète le statut pour savoir si ça c'est bien passé :

    1. si ça c'est bien passé, tu fais ton window.open avec l'url du document pdf généré en 1
    2. sinon, tu affiches un message d'erreur
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut
    C'est un peu normal, ce que tu as récupéré, c'est le document pdf (sous forme d'une suite d'octets)... c'est le "contentType" qui fait que le navigateur peut faire le lien avec un plugin pour afficher correctement ton document.
    Le "ContentType" est spécifié sur l'ouverture de la feuille data:application/pdf suivi des bytes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    window.open('data:application/pdf,'+ data, 'pageEdition', 'menubar=no, height=600, width=900' );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher un flux pdf dans une nouvelle fenetre
    Par snopims dans le forum ASP.NET
    Réponses: 3
    Dernier message: 03/09/2009, 19h29
  2. Afficher un flux PDF dans une page HTML
    Par dachu dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 21/04/2008, 11h55
  3. Afficher un flux
    Par bolo dans le forum ASP
    Réponses: 1
    Dernier message: 13/11/2005, 18h30
  4. Pb, Transformation d'un flux HTML en PDF
    Par elitost dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 05/09/2005, 17h28
  5. [XSL] Afficher un flux XML
    Par minimoi1234 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 18/02/2005, 09h35

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