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] Retours à la ligne


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] Retours à la ligne
    Bonjour,

    est-il possible de faire un retour à la ligne après n caracteres dans une celule ($pdf->Cell())avec FDPF

  2. #2
    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
    Il me semble que pour afficher un texte de plusieurs lignes il faut utiliser MultiCell (casse à vérifier...) . T'as plusieurs cellules les unes en dessous des autres ensuite. Les \n générent automatiquement ces nouvelles cellules.

  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
    En fait je fais un tableau

    mais dans certaines colonnes j'aimerais des retours à la ligne après tant de caracteres...
    notamment la colonne 0,1,6 et 8

    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
    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(.3);
        $this->SetFont('','B');
        //En-tête
        $w=array(55,50,25,20,25,20,20,30,50);
        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,'C',$fill);
            $this->Cell($w[4],6,$row[4],'LR',0,'R',$fill);
            $this->Cell($w[5],6,$row[5],'LR',0,'L',$fill);
            $this->Cell($w[6],6,$row[6],'LR',0,'L',$fill);
            $this->Cell($w[7],6,$row[7],'LR',0,'R',$fill);
            $this->Cell($w[8],6,$row[8],'LR',0,'L',$fill);
            $this->Ln();
            $fill=!$fill;
        }
        //Trait de terminaison
        $this->Cell(array_sum($w),0,'','T');
    	}

  4. #4
    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
    et , un peu bourrin mais bon.. si tu mets multicell partout, et tu ajoutes \n là ou tu veux tes retours à la ligne?

  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
    non j'ai déjà essayé mais ca me pourrit la mise en page du tableau j'ai meme pu de 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
     
    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(.3);
        $this->SetFont('','B');
        //En-tête
        $w=array(55,50,25,20,25,20,20,30,50);
        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->MultiCell($w[0],6,$row[0],'LR','L',$fill);
            $this->MultiCell($w[1],6,$row[1],'LR','L',$fill);
            $this->MultiCell($w[2],6,$row[2],'LR','L',$fill);
            $this->MultiCell($w[3],6,$row[3],'LR','C',$fill);
            $this->MultiCell($w[4],6,$row[4],'LR','R',$fill);
            $this->MultiCell($w[5],6,$row[5],'LR','L',$fill);
            $this->MultiCell($w[6],6,$row[6],'LR','L',$fill);
            $this->MultiCell($w[7],6,$row[7],'LR','R',$fill);
            $this->MultiCell($w[8],6,$row[8],'LR','L',$fill);
            $this->Ln();
            $fill=!$fill;
        }
        //Trait de terminaison
        $this->Cell(array_sum($w),0,'','T');
    	}

  6. #6
    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
    En fait pares chaque MultiCell ca passe a la ligne...

  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
    Le plus simple reste quand même de passe par des MultiCell, mais effectivement après un MultiCell, fpdf revient automatiquement à la ligne, c'est à toi de replacer correctement ton pointeur après le multicell, avec SetXY();

  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
    Ah d'accord je savais pas pour le retour à la ligne automatique...
    comment puis je faire un setXY pour revenir alors que c'est une fonction que j'appelle, je ne connais pas forcément le X et le Y ou le remettre

  9. #9
    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
    tu peux avoir les X et Y avec GetX() et GetY()

  10. #10
    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
    Oui mais si je fais un GetX et un GetY après le MultiCell c'est que je suis dèja passé à la ligne donc comment je connais le X et le Y pour revenir à la ligne précédente ?

  11. #11
    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
    euh oui, j'avaias répondu un peu vite, désolé..
    un autre truc un peu bourrin que je te propose (j'en connais plein lol), c'est de ne pas faire de multicell, mais de tracer un rectangle et d'ecrire dedans avec des Cell sans contours.... j'ai été obligé de le faire une fois parce qu'il y avait un peu n'importe quoi que le client voulait dans sa cellule du tableau...

  12. #12
    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
    Il te faut rajouter cette fonction que j'ai récupérer qq part sur le site de fpdf mais je sais pu trop ou :

    ( à ajouter dans la classe fpdf )

    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
    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;
    	}
    Elle te renvoi le nombre de ligne que va utiliser un multicell avec un texte $txt et une largeur $w

    Avec ça tu devrais avoir tout ce qui te faut pour résoudre ton soucis.

  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
    Je vois pas trop comment l'utiliser dans mon code que j'ai mis ci dessus...

  14. #14
    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
    Et bien avec ça tu peux connaitre le nb de ligne de ton MultiCell, donc retrouver le Y , pour le X tu le connais hein , c'est la largeur de ton multicell, je vois pas ce qui te manque là.

  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
    Mouais je vois pas trop comment l'utiliser dans mon code...

    Je te donne mon code, si tu peut m'aider à le modifier....

    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
     
    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,40,25,30,25,20,40,30,50);
        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){
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[0],6,$row[0],'LR','L',$fill);
            $this->SetXY(($x + 40),$y);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[1],6,$row[1],'LR','L',$fill);
            $this->SetXY(($x+40),$y);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[2],6,$row[2],'LR','L',$fill);
            $this->SetXY(($x+25),$y);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[3],6,$row[3],'LR','C',$fill);
            $this->SetXY(($x+30),$y);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[4],6,$row[4],'LR','R',$fill);
            $this->SetXY(($x+25),$y);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[5],6,$row[5],'LR','L',$fill);
            $this->SetXY(($x+20),$y);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[6],6,$row[6],'LR','L',$fill);
            $this->SetXY(($x+40),$y);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->MultiCell($w[7],6,$row[7],'LR','R',$fill);
            $this->SetXY(($x+30),$y);
            $this->MultiCell($w[8],6,$row[8],'LR','L',$fill);
            $this->Ln();
            $fill=!$fill;
        }
        //Trait de terminaison
        $this->Cell(array_sum($w),0,'','T');
    	}

  16. #16
    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
    à un moment donné c'est qd même toi le programmeur..

    Déjà tu pourrais stocker tes alignements ( L,C,R) dans un tableau à part de la même manière que tes largeurs, t'y verrais peut-etre plus clair et ce serait bien plus propre.

    Ensuite de la même façon que tu repositionne les X, tu dois utiliser la fonction que je t'ai envoyé à certains endroits pour sauter ou non la ligne.. ( en oubliant pas que la fonction renvoi un nb de lignes, donc à multiplier par la hauteur d'écriture de ton MultiCell. ( 6 dans ton exemple )

  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
    C'est quoi le $w et le $txt que la fonction prend en parametres ?

  18. #18
    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
    Citation Envoyé par NoT

    Elle te renvoi le nombre de ligne que va utiliser un multicell avec un texte $txt et une largeur $w
    T.T

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

Discussions similaires

  1. [FPDF] Retour à la ligne.. (FPDF)
    Par Dainku dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 14/02/2014, 11h30
  2. Caractère de retour à la ligne.
    Par Pari dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2009, 09h59
  3. [FPDF] Chaînes longues - retour à la ligne auto ?
    Par patrickzfr dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/10/2007, 21h01
  4. [MFC] Retour à la ligne dans un CEdit
    Par Kant dans le forum MFC
    Réponses: 7
    Dernier message: 18/02/2004, 08h58
  5. Conserver les retours à la ligne
    Par arwen dans le forum ASP
    Réponses: 2
    Dernier message: 04/12/2003, 12h50

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