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 :

[FPDF] Export en PDF : mise en page des tableaux


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut [FPDF] Export en PDF : mise en page des tableaux
    Salut ^^
    Je suis en train de faire un export en PDF d'une table, mais j'ai des champs assez grands, donc ils débordent de leur place dans une cellule.
    Certains débordent sur la cellule d'à côté, d'autres sont coupées.
    Mais je voudrais que le surplus aille à la ligne dans la même cellule.
    Voici le script :
    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
    <?php
    require('fpdf.php');
     
    class PDF extends FPDF
    {
    //En-tête
    function Header()
    {
        //Logo
        $this->Image('LOGOROC.jpg',10,8,33);
        //Police Arial gras 15
        $this->SetFont('Arial','B',15);
        //Décalage à droite
        $this->Cell(80);
        //Titre
        $this->Cell(30,15,'Répertoire du personnel',0,0,'C');
        //Saut de ligne
        $this->Ln(20);
    }
     
    //Pied de page
    function Footer()
    {
        //Positionnement à 1,5 cm du bas
        $this->SetY(-15);
        //Police Arial italique 8
        $this->SetFont('Arial','I',8);
        //Numéro de page
        $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    }
     
    //Chargement des données
    function LoadData($file)
    {
        //Lecture des lignes du fichier
        $lines=file($file);
        $data=array();
        foreach($lines as $line)
            $data[]=explode(';',chop($line));
        return $data;
    }
     
    //Tableau coloré
    function FancyTable($header,$data)
    {
        //Couleurs, épaisseur du trait et police grasse
        $this->SetFillColor(255,0,0);
        $this->SetTextColor(255);
        $this->SetDrawColor(128,0,0);
        $this->SetLineWidth(.3);
        $this->SetFont('','B');
        //En-tête
        $w=array(40,40,35,15,20,20,20);
        for($i=0;$i<count($header);$i++)
            $this->Cell($w[$i],7,$header[$i],1,0,'C',1);
        $this->Ln();
        //Restauration des couleurs et de la police
        $this->SetFillColor(224,235,255);
        $this->SetTextColor(0);
        $this->SetFont('');
        //Données
        $fill=0;
        foreach($data as $row)
        {
            $this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
            $this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
            $this->Cell($w[2],6,$row[2],'LR',0,'L',$fill);
            $this->Cell($w[3],6,$row[3],'LR',0,'R',$fill);
            $this->Cell($w[4],6,$row[4],'LR',0,'R',$fill);
            $this->Cell($w[5],6,$row[5],'LR',0,'R',$fill);
            $this->Cell($w[6],6,$row[6],'LR',0,'R',$fill);
            $this->Ln();
            $fill=!$fill;
        }
        $this->Cell(array_sum($w),0,'','T');
    }
    }
     
    $pdf=new PDF();
    //Titres des colonnes
    $header=array('Service','Fonction','Nom','Num int', 'Num ext', 'Num port', 'Num fax');
    //Chargement des données
    $data=$pdf->LoadData('repertoire.csv');
    $pdf->SetFont('Arial','',8);
    $pdf->AddPage();
    $pdf->FancyTable($header,$data);
    $pdf->AliasNbPages();
    $pdf->SetFont('Times','',10);
    $pdf->Output();
    ?>
    Merci ^^

  2. #2
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    J'en profite aussi pour demander une chose.
    Mon tableau prend plusieurs pages.
    Comment reprendre la barre de titre au début de chaque page ?
    Merci ^^

  3. #3
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Trouvé pour mon problème de cellules ^^ : http://www.fpdf.org/fr/script/script3.php
    Et vous ne savez pas pour mes titres à répéter à chaque page ?
    Merci ^^

  4. #4
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    En surchargeant la fonction FPDF::Header() pour y placer tes traitements. Cette méthode est appelée automatiquement à chaque nouvelle page - de même que FPDF::Footer() d'ailleurs

  5. #5
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Merci bien, mais j'ai essayé des trucs, sans succès
    Voici ce que j'ai essayé :
    J'ai essayé de mettre de faire function Header($header), de rajouter en fin de fonction un $this->$header, et quelques variantes de cette dernière, sans succès
    Pourrais-tu encore une fois m'éclairer de ta lumière bienveillante ?
    Merci

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Ce n'est pas une fonction Header() qu'il faut faire, mais une méthode Header() dans la classe que tu dérives de FPDF. Voir l'autre fil de discussion sur le développement orienté objet.

    En gros :
    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
     
    class MyPDF extends FPDF {
      public function Header() {
        $this->SetFont('Arial','B',15);
        $this->Cell(0, 20, "CECI EST LE HEADER", 0, 0);
      }
      public function Footer() {
        $this->Cell(0, 10, "CECI EST LE FOOTER", 0, 0);
      }
    }
     
    $pdf = new MyPDF();
    $pdf->AddPage(); // appel implicite à MyPDF::Header() et éventuellement Footer() de la page précédente()
    $pdf->Write(20, "blablabla et blibloblu");
    $pdf->Ln();
    $pdf->Output() // appel implicité à Footer de la dernière page
    En sortie, ton PDF contient :
    CECI EST LE HEADER
    blablabla et blibloblu
    CECI EST LE FOOTER
    Au risque de me répéter, il est indispensable que tu apprennes les bases de la programmation objet si tu veux te débrouiller avec FPDF (et même en général, d'ailleurs ).
    Bon courage !

  7. #7
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Génial merci beaucoup Herode
    Et oui, je pense que je vais commencer.
    Bonne nuit

  8. #8
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Salut c'est encore moi !!!

    Voilà en fait j'ai très bien compris ce que tu m'as dit, mais j'ai un peu de mal à placer mon array.
    Je voudrais mettre l'en-tête de mon tableau au début de chaque page, donc logiquement je devrais mettre l'array dans le Header().
    Seulement, il ne semble pas prit en compte.
    J'ai essayé de le mettre avec un this->$header; dans le Header(), mais apparemment il n'est prit en compte qu'à la déclaration du tableau dans ses paramètres.
    Donc je suis coincé
    Qu'en pensez-vous ?
    Merci ^^

    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
    require('fpdf.php');
     
    	class PDF extends FPDF
    	{
    		//En-tête
    		function Header()
    		{
    			//Logo
    			$this->Image('LOGOROC.jpg',10,8,33);
    			//Police Arial gras 15
    			$this->SetFont('Arial','B',15);
    			//Décalage à droite
    			$this->Cell(80);
    			//Titre
    			$this->Cell(30,15,'Répertoire du personnel',0,0,'C');
    			//Saut de ligne
    			$this->Ln(20);1
    		}
     
    		//Pied de page
    		function Footer()
    		{
    			//Positionnement à 1,5 cm du bas
    			$this->SetY(-15);
    			//Police Arial italique 8
    			$this->SetFont('Arial','I',8);
    			//Numéro de page
    			$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    		}
     
    		//Chargement des données
    		function LoadData($file)
    		{
    			//Lecture des lignes du fichier
    			$lines=file($file);
    			$data=array();
    			foreach($lines as $line)
    				$data[]=explode(';',chop($line));
    			return $data;
    		}
     
    		//Tableau coloré
    		function FancyTable($header,$data)
    		{
    			//Couleurs, épaisseur du trait et police grasse
    			$this->SetFillColor(255,0,0);
    			$this->SetTextColor(255);
    			$this->SetDrawColor(128,0,0);
    			$this->SetLineWidth(.3);
    			$this->SetFont('','B');
    			//En-tête
    			$w=array(38,38,35,15,22,22,22);
    			for($i=0;$i<count($header);$i++)
    				$this->Cell($w[$i],7,$header[$i],1,0,'C',1);
    			$this->Ln();
    			//Restauration des couleurs et de la police
    			$this->SetFillColor(224,235,255);
    			$this->SetTextColor(0);
    			$this->SetFont('');
    			//Données
    			$fill=0;
    			foreach($data as $row)
    			{
    				$this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
    				$this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
    				$this->Cell($w[2],6,$row[2],'LR',0,'L',$fill);
    				$this->Cell($w[3],6,$row[3],'LR',0,'L',$fill);
    				$this->Cell($w[4],6,$row[4],'LR',0,'L',$fill);
    				$this->Cell($w[5],6,$row[5],'LR',0,'L',$fill);
    				$this->Cell($w[6],6,$row[6],'LR',0,'L',$fill);
    				$this->Ln();
    				$fill=!$fill;
    			}
    			$this->Cell(array_sum($w),0,'','T');
    		}
     
    	$pdf=new PDF();
    	//Titres des colonnes
    	$header=array('Service','Fonction','Nom','Num int', 'Num ext', 'Num port', 'Num fax');
    	//Chargement des données
    	$data=$pdf->LoadData('repertoire.csv');
    	$pdf->SetFont('Arial','',10);
    	$pdf->AddPage();
    	$pdf->FancyTable($header,$data);
    	$pdf->AliasNbPages();
    	$pdf->SetFont('Times','',10);
    	$pdf->Output();
    ?>

  9. #9
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par Imoreion Voir le message
    J'ai essayé de le mettre avec un this->$header; dans le Header(), mais apparemment il n'est prit en compte qu'à la déclaration du tableau dans ses paramètres.
    this->$header, ça ne compilera pas
    A part ça, je n'ai pas bien saisi les détails mais ce qui est certain, c'est que
    1 - il y a 2 bugs dans ton code : faute de frappe, erreur de syntaxe
    2 - une fois ces bugs corrigés, ça marche.

    Les bugs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function Header() {
       [...]
       $this->Ln(20);1     ----> ICI, il y a un éléphant après le ";" !!!!!
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class PDF extends FPDF {
       [...]
                                 ----> ICI, il manque une accolade fermante pour clore ta définition de classe
    $pdf=new PDF();
    }
    Note que tu peux avoir des informations sur ces bugs en regardant les messages envoyés par le serveur web que tu utilises (error.log chez Apache, l'observateur d'événements sous IIS, je crois...)

  10. #10
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Ah oui effet ça m'aidait pas ^^

    Mais j'ai remarqué que la conception de mon tableau n'aide pas pour ce que je veux faire ^^

    Comment tu ferais toi pour mettre le contenu de la variable $header en répétition à chaque page ?
    Parce que c'est ça en fait qu'il faudrait ^^
    Désolé mais je coince vraiment.
    Merci ^^

Discussions similaires

  1. Mise en page des commentaires en vue d'une impression pdf
    Par garbit dans le forum Powerpoint
    Réponses: 1
    Dernier message: 08/04/2015, 14h12
  2. [Visual Web] [SJSC] Mise en page des composants relative
    Par Original Prankster dans le forum NetBeans
    Réponses: 2
    Dernier message: 29/06/2006, 10h07
  3. [FPDF] Export de PDF à partir d'un fichier PHP
    Par Mat5725 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/04/2006, 20h57
  4. [LaTeX2html] Mise en page des pages html
    Par coachllb dans le forum Editeurs / Outils
    Réponses: 8
    Dernier message: 09/02/2006, 15h00

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