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

PHP & Base de données Discussion :

FPDF changement de page


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 412
    Par défaut FPDF changement de page
    Bonjour à tous, je poste ici car je ne sais pas trop où le faire.

    Voila je fais une extraction FPDF, la première page fonctionne bien mais lorsque les données demande qu'une deuxième, troisième, quatrième ........ page soit construite, c'est un bordel sans nom

    Voici 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
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    <?php
    // Connexion à la BDD
    $bddname = 'xxx';
    $hostname = 'xxx';
    $username = 'xxx';
    $password = 'xxx';
    $db = mysqli_connect ($hostname, $username, $password, $bddname);
     
     
    // Appel de la librairie FPDF
    require("fpdf/fpdf.php");
     
     
    // Création de la class PDF
    class PDF extends FPDF {
        // Header
        function Header() {
            // Logo
            //$this->Image('images/logo-infiniblog.jpg',8,2,80);
            // Saut de ligne
            $this->Ln(20);
        }
        // Footer
        function Footer() {
            // Positionnement à 1,5 cm du bas
            $this->SetY(-15);
            // Adresse
            $this->Cell(196,5,'Mes coordonnées - Mon téléphone',0,0,'C');
        }
    }
     
     
    // Activation de la classe
    $pdf = new PDF('P','mm','A4');
    $pdf->AddPage();
    $pdf->SetFont('Helvetica','',11);
    $pdf->SetTextColor(0);
     
     
    $req = "SELECT *FROM users";
    $rep = mysqli_query($db, $req);
    $row = mysqli_fetch_array($rep);
     
     
    // Infos de la commande calées à gauche
    $now= date('d/m/Y'); 
    $heure= date('H:i'); 
    $pdf->Text(8,38,'Liste des amicalistes :');
    $pdf->Text(8,43,'en date du : '.$now);
    //$pdf->Text(8,48,'Mode de règlement : '.$row['prenom']);
     
     
    $req1 = "SELECT * FROM users Order BY statut DESC, login ASC";
    $rep1 = mysqli_query($db, $req1);
    $row1 = mysqli_fetch_array($rep1);
     
     
    // Infos du client calées à droite
    $pdf->Text(120,38,utf8_decode("Extration effectuée par : ".$row1['login']));
    $pdf->Text(120,43,utf8_decode("Le : ".$now." à : " .$heure));
    //$pdf->Text(120,48,$row1['ddn'].' '.utf8_decode($row1['login']));
     
     
    // Position de l'entête à 10mm des infos (48 + 10)
    $position_entete = 18;
     
     
    function entete_table($position_entete){
        global $pdf;
        $pdf->SetDrawColor(183); // Couleur du fond
        $pdf->SetFillColor(221); // Couleur des filets
        $pdf->SetTextColor(0); // Couleur du texte
        $pdf->SetY($position_entete);
        $pdf->SetX(8);
        $pdf->Cell(80,8,'NOM',1,0,'C',1);
        $pdf->SetX(88); // 80 + les 8
        $pdf->Cell(80,8,'PRENOM',1,0,'C',1);
        $pdf->SetX(168); // 160 + 8
        $pdf->Cell(35,8,'Enfant de - 18 ans',1,0,'C',1);
        $pdf->Ln(); // Retour à la ligne
    }
    entete_table($position_entete);
     
     
    // Liste des détails
    $position_detail = 66; // Position à 8mm de l'entête
     
     
    $req2 = "SELECT * FROM users Order BY statut DESC, login ASC";
    $rep2 = mysqli_query($db, $req2);
    while ($row2 = mysqli_fetch_array($rep2)) {
        if ($row2['statut']== 2){$enfant="OUI";}
        if ($row2['statut']== 1){$enfant="NON";}
        $pdf->SetY($position_detail);
        $pdf->SetX(8);
        $pdf->MultiCell(80,8,utf8_decode($row2['nom']),1,'L');
        $pdf->SetY($position_detail);
        $pdf->SetX(88);
        $pdf->MultiCell(80,8,utf8_decode($row2['prenom']),1,'L');
        $pdf->SetY($position_detail);
        $pdf->SetX(168);
        $pdf->MultiCell(35,8,$enfant,1,'R');
        $position_detail += 8;
    }
     
     
    $nom = 'amicalistes-'.$row['id'].'.pdf';
     
     
    // Création du PDF
    $pdf->Output($nom,'I');
    ?>
    Qui pourrait m'aider pour qu'à chaque nouvelle page cela reprend l'entête du tableau et continue d'insérer les données comme sur la page 1

    Merci à vous

  2. #2
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mars 2023
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2023
    Messages : 33
    Par défaut
    Bonjour,

    Je comprends que vous souhaitez générer un PDF avec FPDF en PHP où chaque nouvelle page inclut automatiquement l'en-tête du tableau, garantissant ainsi une mise en forme cohérente sur toutes les pages. Voici comment vous pouvez résoudre ce problème en modifiant votre classe PDF et en ajustant votre logique de génération.

    Étapes à suivre :
    Déplacer l'en-tête du tableau dans la méthode Header() de la classe PDF :

    La méthode Header() de FPDF est appelée automatiquement à chaque ajout de page. En y plaçant l'en-tête du tableau, vous vous assurez qu'il apparaît sur chaque nouvelle page.
    Ajouter une gestion conditionnelle pour les informations spécifiques à la première page :

    Si vous avez des informations qui ne doivent apparaître que sur la première page (comme "Extraction effectuée par"), vous pouvez utiliser une variable de classe pour suivre si la page en cours est la première.
    Utiliser SetAutoPageBreak pour gérer automatiquement les sauts de page :

    Cela permet à FPDF de gérer les sauts de page lorsque le contenu dépasse la page actuelle, et d'appeler la méthode Header() à chaque nouvelle page.
    Implémentation détaillée :
    Voici une version modifiée de votre script PHP qui intègre ces améliorations :

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <?php
    // Connexion à la BDD
    $bddname = 'xxx';
    $hostname = 'xxx';
    $username = 'xxx';
    $password = 'xxx';
    $db = mysqli_connect($hostname, $username, $password, $bddname);
     
    // Appel de la librairie FPDF
    require("fpdf/fpdf.php");
     
    // Création de la classe PDF étendue
    class PDF extends FPDF {
        // Variable pour suivre la première page
        protected $isFirstPage = true;
        protected $extractionInfo = '';
     
        // Méthode pour définir les informations d'extraction
        public function setExtractionInfo($info) {
            $this->extractionInfo = $info;
        }
     
        // En-tête de page
        function Header() {
            if ($this->isFirstPage) {
                // Informations spécifiques à la première page
                $this->SetFont('Helvetica','B',14);
                $this->Cell(0,10,'Liste des amicalistes',0,1,'C');
                $this->SetFont('Helvetica','',11);
                $now = date('d/m/Y');
                $heure = date('H:i');
     
                // Infos à gauche
                $this->SetXY(10, 20);
                $this->Cell(0,6,'En date du : ' . $now,0,1,'L');
     
                // Infos à droite
                $this->SetXY(120, 20);
                $this->Cell(0,6,utf8_decode("Extraction effectuée par : " . $this->extractionInfo),0,1,'R');
                $this->SetXY(120, 25);
                $this->Cell(0,6,utf8_decode("Le : " . $now . " à " . $heure),0,1,'R');
     
                $this->Ln(10); // Saut de ligne après les infos
     
                $this->isFirstPage = false; // Marquer que la première page a été traitée
            } else {
                // Pour les pages suivantes, ajouter un petit espace
                $this->Ln(5);
            }
     
            // En-tête du tableau
            $this->SetFillColor(221,221,221);
            $this->SetDrawColor(183,183,183);
            $this->SetTextColor(0);
            $this->SetFont('Helvetica','B',11);
            $this->Cell(80,8,'NOM',1,0,'C',1);
            $this->Cell(80,8,'PRENOM',1,0,'C',1);
            $this->Cell(35,8,'Enfant de - 18 ans',1,1,'C',1);
            $this->SetFont('Helvetica','',11);
        }
     
        // Pied de page
        function Footer() {
            // Positionnement à 1,5 cm du bas
            $this->SetY(-15);
            $this->SetFont('Helvetica','I',8);
            $this->Cell(0,5,'Mes coordonnées - Mon téléphone',0,0,'C');
        }
    }
     
    // Activation de la classe
    $pdf = new PDF('P','mm','A4');
    $pdf->SetAutoPageBreak(true, 20); // Gestion automatique des sauts de page avec une marge de 20mm
    $pdf->AddPage();
     
    // Récupérer les informations d'extraction (exemple : utilisateur actuel)
    $req1 = "SELECT * FROM users ORDER BY statut DESC, login ASC LIMIT 1";
    $rep1 = mysqli_query($db, $req1);
    $row1 = mysqli_fetch_array($rep1);
     
    // Définir les informations d'extraction dans l'objet PDF
    $pdf->setExtractionInfo($row1['login']);
     
    // Liste des détails
    $req2 = "SELECT * FROM users ORDER BY statut DESC, login ASC";
    $rep2 = mysqli_query($db, $req2);
    while ($row2 = mysqli_fetch_array($rep2)) {
        $enfant = ($row2['statut'] == 2) ? "OUI" : "NON";
     
        // Vérifier si un saut de page est nécessaire
        if($pdf->GetY() > 270){ // Ajustez cette valeur en fonction de vos marges et de la taille du papier
            $pdf->AddPage();
        }
     
        // Ajouter les données dans le tableau
        $pdf->Cell(80,8,utf8_decode($row2['nom']),1,0,'L');
        $pdf->Cell(80,8,utf8_decode($row2['prenom']),1,0,'L');
        $pdf->Cell(35,8,$enfant,1,1,'C');
    }
     
    // Définir le nom du fichier PDF
    $nom = 'amicalistes-' . $row1['id'] . '.pdf';
     
    // Générer le PDF
    $pdf->Output($nom,'I');
    ?>

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/06/2007, 15h51
  2. [FPDF] Tableaux : besoin d'aide pour détecter le changement de page
    Par vallica dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 26/06/2006, 20h15
  3. Etat : changement de page
    Par nicoaix dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2006, 12h22
  4. Réponses: 9
    Dernier message: 16/01/2006, 14h16
  5. [FPDF] générer des pages PHP en PDF
    Par saint-pere dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/09/2005, 18h13

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