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

Bibliothèques et frameworks PHP Discussion :

Export d'une liste en PDF avec TCPDF


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club Avatar de guilderoy67
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Par défaut Export d'une liste en PDF avec TCPDF
    Bonjour à tous,

    J'essaye d'effectuer l'export d'une liste en PHP grâce à la librairie TCPDF. La génération du PDF s'effectue correctement, en revanche lorsque que je veux ouvrir le PDF dans le navigateur lors de la création avec l'option $bRes = $oPdf->Output( $fileurl,'I'); , je n'ai aucun retour ni aucune erreur dans les logs.

    En revanche je constate que le fichier encodé sort vers la réponse de ma requête http lorsque je regarde dans ma console dev:

    %PDF-1.7

    %âãÏÓ

    7 0 obj

    << /Type /Page /Parent 1 0 R /LastModified (D:20200123232709+01'00') /Resources 2 0 R /MediaBox [0.000000 0.000000 595.276000 841.890000] /CropBox [0.000000 0.000000 595.276000 841.890000] /BleedBox [0.000000 0.000000 595.276000 841.890000] /TrimBox [0.000000 0.000000 595.276000 841.890000] /ArtBox [0.000000 0.000000 595.276000 841.890000] /Contents 8 0 R /Rotate 0 /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Annots [ 6 0 R ] /PZ 1 >>

    endobj

    8 0 obj

    <</Filter /FlateDecode /Length 611>> stream

    xíXÝOÛ0Ï_qoºþcwoÒ6A<´ÄTAiJ´ýõs¦uh(]B?(ueÕ:ßïww¾ØÆ¬¤áT÷{¸ºÑî'º÷*/.´ð¨{_]×|\FRðÌ`vJ81nsGÀmhµ¹6EÖ¹þÕ¶`²H

    Ô,¨^]ÁÏ\sCM'Gr'Qæ8C˳Û+¸ZI!l&ApvÍ$¤Z6ÏùÙö¦:ùxGr~ ÐFvlÌ!Tnô@cæ"ÁFJ3a>UlÌ0Em¦§ÙÔ0kÀ]øËÄ<zþìg«\´UB/¸^ͧÇy<qôzxJKõÕ,¬ÙgõÐõàjï{§ èBàµîi&t^×õÑí7¸Òѧ¹ËÄ×!ë&jYQ+ÒËQûÑ»WÉ»×Û

    ½ãWí-j;È!rk©¶
    Ci-joint mon code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public static function exportToPdf($aParam){
     
     if(isset($aParam['id_list']) && !empty($aParam['id_list'])){
     
    require_once('medias/libraries/tcpdf/tcpdf.php');
     
    $aRes = \models\mylists\mylists::getItemsFromIDList($aParam['id_list']);
     
    $tbl="";
    $tbl_header = '<table border="1">
     <thead>
     <tr>
     <th class="lead" scope="col"><strong>Nom de la liste</strong></th>
     <th class="lead" scope="col"><strong>Utilisateur</strong></th>
     <th class="lead" scope="col"><strong>Objet</strong></th>
     </tr>
     </thead>';
    $tbl_footer = '</table>';
     
    $oPdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
     
    $oPdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    $oPdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
    $oPdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
     
     foreach($aRes as $row) {
    $tbl .= "<tr><td>".$row['username']."</td>";
    $tbl .= "<td>".$row['prenom']."</td>";
    $tbl .= "<td>".$row['name']."</td>";
    $tbl .= "</tr> ";
    }
     
    $oPdf->AddPage();
    $oPdf->writeHTML($tbl_header . $tbl . $tbl_footer, true, 0, true, 0);
    $oPdf->lastPage();
     
    $fileurl = $_SERVER['DOCUMENT_ROOT']."medias/pdf/filename.pdf";
     
    $bRes = $oPdf->Output( $fileurl,'FI');
     
    $aResponse["message"] = "la liste a bien été exportée";
     
    }
    return $aResponse;
    }
    De plus lors d'appel de l'export j'effectue une requete ajax avec Jquery vers mon url /exportToPDF géré par mon routeur côté php:

    Code js : 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
    $.ajax({
       url : '/mylists/exportToPdf',
    type : 'POST',
    data:  aParam,
    dataType:'JSON',
    success : function(oResult, statut){
    var divResponse="";
    $("div.response").show();
     if(oResult.message != undefined){
                divResponse = "<div class='alert alert-success' role='alert'>"+oResult.message+"</div>";
    }
    else
    divResponse = "<div class='alert alert-danger' role='alert'>"+oResult.message_err+"</div>";
     
    $("div.response").append(divResponse);
     
    setTimeout(function() {
                $('div.response').fadeOut('slow');
    $('div.response').empty();
    }, 7000);
    },
    Merci d'avance pour votre aide,

    Cordialement,

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    si vous voulez juste enregistrer le fichier PDF, vous devez mettre uniquement "F" dans le 2e paramètre de "Output".

  3. #3
    Nouveau membre du Club Avatar de guilderoy67
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Par défaut
    Merci pour votre réponse, en fait je veux ouvrir le pdf dans un autre onglet. Ou au mieux proposer le telechargement du fichier lors de la génération. C'est la que je rencontre mon problème.

    J'ai également testé cette methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($fileurl).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($fileurl));
            readfile($fileurl);
    Et j'ai le même résultat que dans mon premier post

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    si vous faites un appel AJAX, c'est le JavaScript qui récupère le contenu du fichier.
    si vous voulez envoyez le fichier PDF au navigateur il faut utiliser un lien simple, vous ne pouvez pas en même temps afficher un message de succès de création de fichier et en même temps l'envoyer au navigateur. vous pouvez faire cela en 2 temps, d'abord afficher un message "fichier créé" et en dessous du message, mettre un lien qui télécharge le fichier PDF quand on clique dessus.

  5. #5
    Nouveau membre du Club Avatar de guilderoy67
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Par défaut
    Merci beaucoup c'était bien ca !

    Sujet résolu

  6. #6
    Nouveau membre du Club Avatar de guilderoy67
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Par défaut
    Si jamais il y a des intéressés, j'ai ensuite traité la réponse dans mon callback de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    let  oPdf = window.open("");
          oPdf.document.write("<iframe width='100%' height='100%' src='data:application/pdf;base64, " + encodeURI(oResult)+"'></iframe>");
    Cela évite les problèmes liés à Chrome suite à la suppression de Google du "top navigation". De cette manière je passe le pdf pour l'afficher dans un iframe.

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

Discussions similaires

  1. import/export d'une liste avec stsadm
    Par Benzeghiba dans le forum SharePoint
    Réponses: 1
    Dernier message: 08/09/2008, 12h11
  2. Tri d'une liste d'attente avec priorité
    Par boutchz dans le forum Access
    Réponses: 8
    Dernier message: 02/03/2006, 18h42
  3. Réponses: 2
    Dernier message: 15/04/2005, 15h51
  4. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46
  5. Exporter seulement une partie des données avec pg_dump ?
    Par Philhz dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/07/2004, 09h50

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