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 :

[PDF] Tableau en PDF


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien d'exploitation
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien d'exploitation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [PDF] Tableau en PDF
    Bonjour,

    Je souhaite transformer un tableau en PDF. Ceci est réussi grâce à FPDF ou encore DOMPDF mais seulement pour du contenu en HTML.
    Cependant ça ne fonctionne plus dès qu'il y a quelques balises php et une requête sql.

    Pourriez vous m'aider? Comment je dois procéder?

    Code de base
    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
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
    require_once('connexion.php');
     
    if(isset($_POST['date'])) $date=$_POST['date']; else $date="";
    if(isset($_POST['datedeux'])) $datedeux=$_POST['datedeux']; else $datedeux="";
     
    echo "</br>";
    ?>
    <div align = "center">
    <h3><?php echo $date; ?></h3>
    </div>
     
    <?php
    $sql = "SELECT * FROM `registre` WHERE `entree` BETWEEN '".$date." 00:00:00.00' AND '".$datedeux." 23:59:59.999' ORDER BY `entree` ASC";
    $resultat = $mysqli->query($sql);
    ?>
     
    <table>
            <tr>
                <td><b> Nom <b/></td>
                <td><b> Prenom <b/></td>
                <td><b> Societe <b/></td>
                <td><b> Service <b/></td>
                <td><b> ID <b/></td>
                <td><b> Motif <b/></td>
                <td><b> Entrée <b/></td>
                <td><b> Sortie <b/></td>
                <td><b> Sortie par DCT <b/></td>
            </tr>
     
    <?php      
    while($donnees = mysqli_fetch_assoc($resultat))
        {
    ?>
            <tr>
     
                <td><?php echo $donnees['nom']?> </td>
                <td><?php echo $donnees['prenom']?> </td>
                <td><?php echo $donnees['societe']?> </td>
                <td><?php echo $donnees['service']?> </td>
                <td><?php echo $donnees['id']?> </td>
                <td><?php echo $donnees['motif']?> </td>
                <td><?php echo $donnees['entree']?> </td>
                <td><?php echo $donnees['sortie']?> </td>
                <td align="center"><?php echo $donnees['sortiepardct']?> </td>
     
            </tr>
     
     
    <?php      
    }
    ?>
    Et voici un test fonctionnel avec dompdf

    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
    <?php
     
    $html = "<table border='1' width='100%' style='border-collapse: collapse;'>
            <tr>
                <th>Nom</th>
                <th>Prenom</th>
                <th>Societe</th>
                <th>Service</th>
                <th>ID</th>
                <th>Motif</th>
                <th>Entrée</th>
                <th>Sortie</th>
                <th>Sortie par DCT</th>
            </tr>
     
            <tr>     
                <td>test </td>
                <td>test </td>
                <td>test </td>
                <td>test </td>
                <td>test </td>
                <td>test </td>
                <td>test </td>
                <td>test </td>
                <td>test </td>
            </tr>
     </table>";
     $filename = "newpdffile";
     
    // include autoloader
    require_once 'dompdf/autoload.inc.php';
    // reference the Dompdf namespace
    use Dompdf\Dompdf;
    // instantiate and use the dompdf class
    $dompdf = new Dompdf();
    $dompdf->loadHtml($html);
    // (Optional) Setup the paper size and orientation
    $dompdf->setPaper('A4', 'landscape');
    // Render the HTML as PDF
    $dompdf->render();
    // Output the generated PDF to Browser
    $dompdf->stream($filename,array("Attachment"=>0));
     
    ?>
    Code non fonctionnel:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?php
     
    require_once('connexion.php');
     
    if(isset($_POST['date'])) $date=$_POST['date']; else $date="";
    if(isset($_POST['datedeux'])) $datedeux=$_POST['datedeux']; else $datedeux="";
     
    echo "</br>";
    ?>
    <div align = "center"> 
    <h3><?php echo $date; ?></h3>
    </div>
    <?php
    $sql = "SELECT * FROM `registre` WHERE `entree` BETWEEN '".$date." 00:00:00.00' AND '".$datedeux." 23:59:59.999' ORDER BY `entree` ASC";
    $resultat = $mysqli->query($sql);
    ?>
     
    <?php
     
    $html = "<table border='1' width='100%' style='border-collapse: collapse;'>
    		<tr>
    			<td><b> Nom <b/></td>
    			<td><b> Prenom <b/></td>
    			<td><b> Societe <b/></td>
    			<td><b> Service <b/></td>
    			<td><b> ID Disney <b/></td>
    			<td><b> Motif <b/></td>
    			<td><b> Entrée <b/></td>
    			<td><b> Sortie <b/></td>
    			<td><b> Sortie par DCT <b/></td>
    		</tr>
    		
    <?php		
    while($donnees = mysqli_fetch_assoc($resultat)) 
    	{  
    ?>
    		<tr>
    			<td><?php echo $donnees['nom']?> </td>
    			<td><?php echo $donnees['prenom']?> </td>
    			<td><?php echo $donnees['societe']?> </td>
    			<td><?php echo $donnees['service']?> </td>
    			<td><?php echo $donnees['iddisney']?> </td>
    			<td><?php echo $donnees['motif']?> </td>
    			<td><?php echo $donnees['entree']?> </td>
    			<td><?php echo $donnees['sortie']?> </td>
    			<td><?php echo $donnees['sortiepardct']?> </td>
    		</tr>	
     
     
    <?php		
    	} 
    ?>
     
     </table>";
     $filename = "newpdffile";
     
    // include autoloader
    require_once 'dompdf/autoload.inc.php';
    // reference the Dompdf namespace
    use Dompdf\Dompdf;
    // instantiate and use the dompdf class
    $dompdf = new Dompdf();
    $dompdf->loadHtml($html);
    // (Optional) Setup the paper size and orientation
    $dompdf->setPaper('A4', 'landscape');
    // Render the HTML as PDF
    $dompdf->render();
    // Output the generated PDF to Browser
    $dompdf->stream($filename,array("Attachment"=>0));
     
    </body>
    </html>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Mets les balises PHP aux bons endroits et ça ira mieux.


    N.B. pour les entêtes de tables, il existe <th>.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien d'exploitation
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien d'exploitation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En effet c'est corrigé pour <th>.
    Au niveau des erreurs balise PHP je ne vois pas où je me suis trompé. Quelqu'un peut m'éclairer à ce sujet?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Utilise la temporisation.

    1- AVANT de construire la table, mets : ob_start()
    2- Entre deux, Reprends ton code de base (le 1er, comme pour afficher la table)

    3- APRES : ob_get_contents()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $html = ob_get_contents();
    Dernière modification par Invité ; 26/02/2018 à 08h01.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien d'exploitation
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien d'exploitation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour la méthode de la temporisation.
    Cependant je rencontre maintenant un message d'erreur à l'affichage de la page:
    File does not begin with '%PDF-'.
    Local\EWH-10220-22

    Je ne comprends pas du tout ce que veut dire cette erreur via des recherches internet.

    Mon code actuel:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <?php
     
    require_once('connexion.php');
     
    if(isset($_POST['date'])) $date=$_POST['date']; else $date="";
    if(isset($_POST['datedeux'])) $datedeux=$_POST['datedeux']; else $datedeux="";
     
    echo "</br>";
    ?>
    <div align = "center"> 
    <h3><?php echo $date; ?></h3>
    </div>
    <?php
    $sql = "SELECT * FROM `registre` WHERE `entree` BETWEEN '".$date." 00:00:00.00' AND '".$datedeux." 23:59:59.999' ORDER BY `entree` ASC";
    $resultat = $mysqli->query($sql);
    ?>
     
    <?php
    ob_start();
    ?>
    <table border='1' width='100%' style='border-collapse: collapse;'>
    		<tr>
    			<th><b> Nom <b/></th>
    			<th><b> Prenom <b/></th>
    			<th><b> Societe <b/></th>
    			<th><b> Service <b/></th>
    			<th><b> ID Disney <b/></th>
    			<th><b> Motif <b/></th>
    			<th><b> Entrée <b/></th>
    			<th><b> Sortie <b/></th>
    			<th><b> Sortie par DCT <b/></th>
    		</tr>
     
    <?php		
    while($donnees = mysqli_fetch_assoc($resultat)) 
    	{  
    ?>
    		<tr>
    			<td><?php echo $donnees['nom']?> </td>
    			<td><?php echo $donnees['prenom']?> </td>
    			<td><?php echo $donnees['societe']?> </td>
    			<td><?php echo $donnees['service']?> </td>
    			<td><?php echo $donnees['iddisney']?> </td>
    			<td><?php echo $donnees['motif']?> </td>
    			<td><?php echo $donnees['entree']?> </td>
    			<td><?php echo $donnees['sortie']?> </td>
    			<td><?php echo $donnees['sortiepardct']?> </td>
    		</tr>	
     
     
    <?php		
    	} 
    ?>
     
    </table>
    <?php
    $html = ob_get_contents();
    $filename = "newpdffile";
     
    // include autoloader
    require_once 'dompdf/autoload.inc.php';
    // reference the Dompdf namespace
    use Dompdf\Dompdf;
    // instantiate and use the dompdf class
    $dompdf = new Dompdf();
    $dompdf->loadHtml($html);
    // (Optional) Setup the paper size and orientation
    $dompdf->setPaper('A4', 'landscape');
    // Render the HTML as PDF
    $dompdf->render();
    // Output the generated PDF to Browser
    $dompdf->stream($filename,array("Attachment"=>0));
     
     
     ?>
    </body>
    </html>

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM `registre` WHERE `entree` BETWEEN '".$date." 00:00:00.00' AND '".$datedeux." 23:59:59.999' ORDER BY `entree` ASC";
    Tu as vérifié cette requête dans ton phpmyadmin ? Ca me paraît bizarre.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql='SELECT * FROM `registre` WHERE `entree` BETWEEN concat("/"",'.$date.'," 00:00:00","/"") AND concat("/"",'.$datedeux.'," 23:59:59","/"") ORDER BY `entree` ASC;'
    echo $sql;
    Tu veux transformer un date en datetime, fais plutôt ça... Teste le résultat dans ton phpmyadmin.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,


    1- Si on suppose que :
    • `entree` est au format DATETIME,
    • $date et $datedeux sont au format DATE
    • ... et qu'on veut comparer les DATE(s)

    il me semble que la fonction DATE() peut faire l'affaire ici, non ?
    (mais je ne sais pas si elle peut s'utiliser comme ça)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM `registre` WHERE DATE(`entree`) BETWEEN '".$date."' AND '".$datedeux."' ORDER BY `entree` ASC";


    2- Quant à l'erreur "File does not begin with '%PDF-' :
    2a- vérifie la sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo '<pre>'.$html.'</pre>';
    exit;
    2b- regarde dans la doc Dompdf ?...

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien d'exploitation
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien d'exploitation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    @Dendrite la requête a déjà été vérifié sous phpmyadmin et elle est fonctionnel

    @jreaux62 je viens de vérifier la sortie grâce à ton code, la data est présente comme je voulais. Pour l'erreur File does not begin with '%PDF-' je ne trouve pas de réponses dans les docs Dompdf. Certains disent que ça vient de la version de Adobe Reader. Je vais faire le test sur un autre pc avec une autre version plus tard.

    Sauf si quelqu'un à une solution, je passe pour l'instant à TCPDF avec le code suivant:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php  
    function fetch_data()  
    {  
    $output = '';  
    $conn = mysqli_connect("localhost", "root", "", "bdd_rd");  
     
     
    if(isset($_POST['date'])) $date=$_POST['date']; else $date="";
    if(isset($_POST['datedeux'])) $datedeux=$_POST['datedeux']; else $datedeux="";
    $sql = "SELECT * FROM `registre` WHERE `entree` BETWEEN '".$date." 00:00:00.00' AND '".$datedeux." 23:59:59.999' ORDER BY `entree` ASC";  
    $result = mysqli_query($conn, $sql);
    while($row = mysqli_fetch_array($result))  
    {       
    $output .= '<tr>    
    <td>'.$row["nom"].'</td>  
    <td>'.$row["prenom"].'</td>  
    </tr>  
    ';  
    }  
    return $output;  
    }  
    if(isset($_POST["generate_pdf"]))  
    {  
    require_once('tcpdf/tcpdf.php');  
    $obj_pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);  
    $obj_pdf->SetCreator(PDF_CREATOR);  
    $obj_pdf->SetTitle("Generate HTML Table Data To PDF From MySQL Database Using TCPDF In PHP");  
    $obj_pdf->SetHeaderData('', '', PDF_HEADER_TITLE, PDF_HEADER_STRING);  
    $obj_pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));  
    $obj_pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));  
    $obj_pdf->SetDefaultMonospacedFont('helvetica');  
    $obj_pdf->SetFooterMargin(PDF_MARGIN_FOOTER);  
    $obj_pdf->SetMargins(PDF_MARGIN_LEFT, '10', PDF_MARGIN_RIGHT);  
    $obj_pdf->setPrintHeader(false);  
    $obj_pdf->setPrintFooter(false);  
    $obj_pdf->SetAutoPageBreak(TRUE, 10);  
    $obj_pdf->SetFont('helvetica', '', 11);  
    $obj_pdf->AddPage();  
    $content = '';  
    $content .= '  
    <h4 align="center">Generate HTML Table Data To PDF From MySQL Database Using TCPDF In PHP</h4><br /> 
    <table border="1" cellspacing="0" cellpadding="3">  
    <tr>  
    <th width="30%">Nom</th>  
    <th width="30%">Prenom</th>  
    </tr>  
    ';  
    $content .= fetch_data();  
    $content .= '</table>';  
    $obj_pdf->writeHTML($content);  
    $obj_pdf->Output('file.pdf', 'I');  
    }  
    ?>  
    <!DOCTYPE html>  
    <html>  
    <head>  
    <title>SoftAOX | Generate HTML Table Data To PDF From MySQL Database Using TCPDF In PHP</title>  
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.min.css" />            
    </head>  
    <body>  
    <br />
    <div class="container">  
    <h4 align="center"> Generate HTML Table Data To PDF From MySQL Database Using TCPDF In PHP</h4><br />  
    <div class="table-responsive">  
    <div class="col-md-12" align="right">
    <form method="post">  
    <input type="submit" name="generate_pdf" class="btn btn-success" value="Generate PDF" />  
    </form>  
    </div>
    <br/>
    <br/>
    <table class="table table-bordered">  
    <tr>  
    <th width="30%">Nom</th>  
    <th width="30%">Prenom</th>  
    </tr>  
    <?php  
    echo fetch_data();  
    ?>  
    </table>  
    </div>  
    </div>  
    </body>  
    </html>
    La génération de PDF est fonctionnel, cependant dès que je met les variable ".$date." et ".$datedeux", impossible d'afficher le contenu.
    C'est fonctionnel avec une requête sans ces variables étrangement
    Je dois louper quelque chose.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Comprends-tu au moins les codes ?

    $html et $output servent à construire la <table>.
    Donc tu peux reprendre la méthode de $html dans le 2eme code, au lieu de passer par une fonction.

    Seule la partie "generation du pdf" diffère.

Discussions similaires

  1. [FPDF] Exporter résultat en PDF mais sous forme de tableau
    Par Luverger dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 09/03/2007, 12h13
  2. copier un tableau de valeur depuis un pdf
    Par gabvba dans le forum Général VBA
    Réponses: 5
    Dernier message: 03/03/2007, 16h47
  3. [FPDF] Tableau sur document PDF
    Par pollux75012 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 09/02/2007, 18h01
  4. Probleme récupération d'un pdf sous forme d'un tableau de byte
    Par wallyfr dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 31/08/2006, 16h10
  5. [Info]Exportation automatique de tableau en *.pdf ou *.doc
    Par demifred dans le forum Documents
    Réponses: 3
    Dernier message: 12/08/2005, 08h06

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