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] MultiCell


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut [FPDF] MultiCell
    Bonjour, peut-on aligner verticalement dans un MultiCell ?

  2. #2
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    J'ai un tableau avec deux MultiCell sur la même ligne.

    Si le premier n'a qu'une ligne et le secon deux, le premier a la couleur de fon et la bodure que la premiere ligne donc pas cool du tout...

  3. #3
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    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
     
    function CotisationTable($header,$data){
        //Couleurs, épaisseur du trait et police grasse
        $this->SetFillColor(255,0,0);
        $this->SetTextColor(255);
        $this->SetDrawColor(128,0,0);
        $this->SetLineWidth(.1);
        $this->SetFont('','B');
        //En-tête
        $w=array(40,90,25,50,42,32);
        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){
        		unset($nb_ligne);
        		$x_base = $this->GetX();
     
        		$nb_ligne[] = $this->NbLines($w[1],$row[1]);
        		$nb_ligne[] .= $this->NbLines($w[2],$row[2]);
        		$nb_ligne[] .= $this->NbLines($w[4],$row[4]);
     
        		$nb_ligne_max = max($nb_ligne);
     
            $this->Cell($w[0],(6*$nb_ligne_max),$row[0],'LR',0,'C',$fill);
     
            $x = $this->getX();
            $y = $this->getY();
            $this->MultiCell($w[1],6,$row[1],'LR','L',$fill);
            $this->SetXY(($x+$w[1]),($y));
     
            $x = $this->getX();
            $y = $this->getY();
            $this->MultiCell($w[2],6,$row[2],'LR','L',$fill);
            $this->SetXY(($x+$w[2]),($y));
            //$this->Cell($w[2],(6*$nb_ligne_max),$row[2],'LR',0,'L',$fill);
     
            $this->Cell($w[3],(6*$nb_ligne_max),$row[3],'LR',0,'R',$fill);
     
            $x = $this->getX();
            $y = $this->getY();
            $this->MultiCell($w[4],6,$row[4],'LR','L',$fill);
            $this->SetXY(($x+$w[4]),($y));
     
     
            $this->Cell($w[5],(6*$nb_ligne_max),$row[5],'LR',0,'R',$fill);
            $this->SetXY($x_base,($y+($nb_ligne_max*6)));
            $fill=!$fill;
        }
        //Trait de terminaison
        $this->Cell(array_sum($w),0,'','T');
    	}
     
    //renvoye le nombre de ligne d'un MultiCell prend en parametres une largeur et un texte
    	function NbLines($w,$txt){
           //Computes the number of lines a MultiCell of width w will take
           $cw=&$this->CurrentFont['cw'];
           if($w==0)
               $w=$this->w-$this->rMargin-$this->x;
           $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
           $s=str_replace("\r",'',$txt);
           $nb=strlen($s);
           if($nb>0 and $s[$nb-1]=="\n")
               $nb--;
           $sep=-1;
           $i=$j=$l=0;
           $nl=1;
           while($i<$nb){
               $c=$s[$i];
               if($c=="\n"){
                   $i++;
                   $sep=-1;
                   $j=$i;
                   $l=0;
                   $nl++;
                   continue;
               }
               if($c==' ')
                   $sep=$i;
               $l+=$cw[$c];
               if($l>$wmax){
                      if($sep==-1){
                          if($i==$j)
                              $i++;
                      }
                      else
                          $i=$sep+1;
                      $sep=-1;
                      $j=$i;
                      $l=0;
                      $nl++;
               }
               else
                   $i++;
       }   
           return $nl;
       }

  4. #4
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Personne pour me donner un coup de main ?

  5. #5
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    UP

  6. #6
    Membre chevronné Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Par défaut
    Citation Envoyé par schlough
    Si le premier n'a qu'une ligne et le secon deux, le premier a la couleur de fon et la bodure que la premiere ligne donc pas cool du tout...
    rien compris...

  7. #7
    NoT
    NoT est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Par défaut
    J'ai aps tout comprit non plus là Oo

    Cela dit, non, tu ne peux pas aligner verticalement dans un MultiCell , à toi de bidouiller une fonction qui va ajouter des "\n" au bon endroit dans ta chaine à afficher. C'est comme ça que j'ai fais pour réaliser une classe d'affichage PDF de tableaux, gérant les multicell ( contrairement au script donné par Olivier sur fpdf.org)

  8. #8
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Je tente de me réexpliquer j'ai un tableau

    sur chaque ligne de tableau j'ai 2 MultiCell

    mes lignes ont une couleur de fond qui alterne, transparent ou bleu clair

    sur le transparent pas de probleme

    sur le bleu, si mon Multicell ne contient qu'une ligne, seul celle ci a le fond bleu mais si le deuxième multicell contient deux lignes pour afficher la ligne suivante du tableau je saute deux ligne, dans mon premier multicelle je me retrouve donc avec une ligne bleu et la seconde transparente car le MultiCell ne fait qu'une ligne.

    En fait meme si la ligne est vide il faudrait que je lui dise qu'il y en a une pour avoir la couleur de fond...

    J'ai été clair là ?

  9. #9
    NoT
    NoT est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Par défaut
    bah dans tous les cas il faut que tes 2 multicell sur la même ligne aient la même hauteur, donc il va falloir calculer à l'avance ( avant de tracer ta ligne ) la hauteur des 2 multicells, en nombre de ligne ( avec une fonction que je t'avais filé) , garder en mémoire la plus grande des 2 valeurs, retoucher l'une des 2 chaines passé au multicell de façon à ajouter autant de "\n" que nécessaire, afin qu'à l'affichage les 2 multicells fassent la même hauteur.

    C'est ptet un peu bidouille mais c'est à mon avis la seule façon de faire.

  10. #10
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    Tu as ceci

  11. #11
    NoT
    NoT est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Par défaut
    La fonction drawTextBox() affiche une chaîne à l'intérieur d'un rectangle ; elle est tronquée si elle déborde.
    Je penses pas qu'elle soit si interessante pour faire des tableaux avec du texte dedan :/ Fin surtout si on veut pas perdre d'informations.

  12. #12
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Bonjour, j'ai fait ceci mais ca écrit les \n plutot que me faire un retour a la ligne

    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
     
    function CotisationTable($header,$data){
        //Couleurs, épaisseur du trait et police grasse
        $this->SetFillColor(255,0,0);
        $this->SetTextColor(255);
        $this->SetDrawColor(128,0,0);
        $this->SetLineWidth(.1);
        $this->SetFont('','B');
        //En-tête
        $w=array(40,90,25,50,42,32);
        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){
        		unset($nb_ligne);
        		$x_base = $this->GetX();
     
        		$nb_ligne[] = $this->NbLines($w[1],$row[1]);
        		$nb_ligne[] .= $this->NbLines($w[2],$row[2]);
        		$nb_ligne[] .= $this->NbLines($w[4],$row[4]);
     
        		$nb_ligne_max = max($nb_ligne);
     
            $this->Cell($w[0],(6*$nb_ligne_max),$row[0],'LR',0,'C',$fill);
     
            $x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[0];
            $bckn ='';
            for($i=0;$i < $nb_bckn;$i++)
            	$bckn .= '\n';
     
            $this->MultiCell($w[1],6,$row[1].$bckn,'LR','L',$fill);
            $this->SetXY(($x+$w[1]),($y));
     
            $x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[1];
            $bckn ='';
            for($i=0;$i < $nb_bckn;$i++)
            	$bckn .= '\n';
     
            $this->MultiCell($w[2],6,$row[2].$bckn,'LR','L',$fill);
            $this->SetXY(($x+$w[2]),($y));
     
            $this->Cell($w[3],(6*$nb_ligne_max),$row[3],'LR',0,'R',$fill);
     
            $x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[02];
            $bckn ='';
            for($i=0;$i < $nb_bckn;$i++)
            	$bckn .= '\n';
     
            $this->MultiCell($w[4],6,$row[4].$bckn,'LR','L',$fill);
            $this->SetXY(($x+$w[4]),($y));
     
     
            $this->Cell($w[5],(6*$nb_ligne_max),$row[5],'LR',0,'R',$fill);
            $this->SetXY($x_base,($y+($nb_ligne_max*6)));
            $fill=!$fill;
        }
        //Trait de terminaison
        $this->Cell(array_sum($w),0,'','T');
    	}

  13. #13
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    J'ai mis les \n entre " au lieu de ' il ne s'affiche plus mais je n'ai pas de retour à la ligne....

  14. #14
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    c'est bon, il fallait mettre <= a la place de < dans les if

  15. #15
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Petite question subsidiare, comment puis je faire pour répéter l'en tete du tableau à chaque haut de page ?

  16. #16
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    UP

  17. #17
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    J'ai encore fait des modifs, ca marche bien sur la premiere page mais sur la seconde ca passe a la ligne apres chaque MultiCell

    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
     
    function CotisationTable($header,$data){
        //Couleurs, épaisseur du trait et police grasse
        $this->SetFillColor(255,0,0);
        $this->SetTextColor(255);
        $this->SetDrawColor(128,0,0);
        $this->SetLineWidth(.1);
        $this->SetFont('','B');
        //En-tête
        $w=array(40,90,25,50,42,32);
        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){
    		unset($nb_ligne);
    		$x_base = $this->GetX();
     
    		$nb_ligne[] = $this->NbLines($w[0],$row[0]);
    		$nb_ligne[] .= $this->NbLines($w[1],$row[1]);
    		$nb_ligne[] .= $this->NbLines($w[2],$row[2]);
    		$nb_ligne[] .= $this->NbLines($w[3],$row[3]);
    		$nb_ligne[] .= $this->NbLines($w[4],$row[4]);
    		$nb_ligne[] .= $this->NbLines($w[5],$row[5]);
     
    		$nb_ligne_max = max($nb_ligne);
     
    		$x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[0];
            $bckn ='';
            for($i=0;$i <= $nb_bckn;$i++)
            	$bckn .= "\n";
            $this->MultiCell($w[0],6,$row[0].$bckn,'LR','C',$fill);
    		$this->SetXY(($x+$w[0]),($y));
     
            $x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[1];
            $bckn ='';
            for($i=0;$i <= $nb_bckn;$i++)
            	$bckn .= "\n";
     
            $this->MultiCell($w[1],6,$row[1].$bckn,'LR','L',$fill);
            $this->SetXY(($x+$w[1]),($y));
     
            $x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[2];
            $bckn ='';
            for($i=0;$i <= $nb_bckn;$i++)
            	$bckn .= "\n";
     
            $this->MultiCell($w[2],6,$row[2].$bckn,'LR','L',$fill);
            $this->SetXY(($x+$w[2]),($y));
     
     
    		$x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[3];
            $bckn ='';
            for($i=0;$i <= $nb_bckn;$i++)
            	$bckn .= "\n";
     
            $this->MultiCell($w[3],6,$row[3].$bckn,'LR','R',$fill);
    		$this->SetXY(($x+$w[3]),($y));
     
     
            $x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[4];
            $bckn ='';
            for($i=0;$i <= $nb_bckn;$i++)
            	$bckn .= "\n";
     
            $this->MultiCell($w[4],6,$row[4].$bckn,'LR','L',$fill);
            $this->SetXY(($x+$w[4]),($y));
     
            $x = $this->getX();
            $y = $this->getY();
     
            $nb_bckn = $nb_ligne_max - $nb_ligne[5];
            $bckn ='';
            for($i=0;$i <= $nb_bckn;$i++)
            	$bckn .= "\n";
     
            $this->MultiCell($w[5],6,$row[5].$bckn,'LR','R',$fill);
            $this->SetXY($x_base,($y+($nb_ligne_max*6)));
            $fill=!$fill;
        }
        //Trait de terminaison
        $this->Cell(array_sum($w),0,'','T');
    	}

  18. #18
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Personne pour me donenr un coup de main ?

    Une fois que j'ai résolu ce problème mon pdf est fini, il marchait avant que je mette des MultiCell partout mais l'alignement n'était pas beau...

  19. #19
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    UP

  20. #20
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Ca sert à rien de faire des up constamment, merci d'arrêter. Si on ne répond pas c'est qu'on a pas de réponse.
    FPDF a un forum, tu devrais peut-être te tourner vers eux pour ce genre de problème.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] FPDF MultiCell + BDD SQL
    Par Lord_Onance dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/06/2015, 10h03
  2. [FPDF] multicell et hauteur de la cellule
    Par Mo_Poly dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/03/2008, 20h04
  3. [FPDF] MultiCell dans un Tableau
    Par pubpixel dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 19/10/2007, 17h51
  4. [FPDF] Problème \n dans MultiCell
    Par calitom dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 08/02/2007, 18h58
  5. [FPDF] multicell PHP
    Par wildbackk dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/04/2006, 10h06

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