Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > PDF > FPDF
FPDF Forum d'entraide pour la bibliothèque FPDF permettant de générer des documents PDF en PHP. Avant de poster -> tutoriels FPDF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2006, 15h27   #1
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
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
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h30   #2
Membre éprouvé
 
Avatar de gofono_bass
 
Inscription : décembre 2005
Messages : 385
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 385
Points : 409
Points : 409
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.
__________________
mais pourquoi tu cours?
gofono_bass est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h42   #3
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
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 :
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');
	}
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h45   #4
Membre éprouvé
 
Avatar de gofono_bass
 
Inscription : décembre 2005
Messages : 385
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 385
Points : 409
Points : 409
et , un peu bourrin mais bon.. si tu mets multicell partout, et tu ajoutes \n là ou tu veux tes retours à la ligne?
__________________
mais pourquoi tu cours?
gofono_bass est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h48   #5
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
non j'ai déjà essayé mais ca me pourrit la mise en page du tableau j'ai meme pu de ligne

Code :
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');
	}
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h03   #6
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
En fait pares chaque MultiCell ca passe a la ligne...
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 17h19   #7
NoT
Membre confirmé
 
Inscription : février 2004
Messages : 237
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 237
Points : 261
Points : 261
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();
NoT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 09h08   #8
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
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
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 09h14   #9
Membre éprouvé
 
Avatar de gofono_bass
 
Inscription : décembre 2005
Messages : 385
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 385
Points : 409
Points : 409
tu peux avoir les X et Y avec GetX() et GetY()
__________________
mais pourquoi tu cours?
gofono_bass est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 09h21   #10
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
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 ?
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 09h38   #11
Membre éprouvé
 
Avatar de gofono_bass
 
Inscription : décembre 2005
Messages : 385
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 385
Points : 409
Points : 409
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...
__________________
mais pourquoi tu cours?
gofono_bass est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 09h40   #12
NoT
Membre confirmé
 
Inscription : février 2004
Messages : 237
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 237
Points : 261
Points : 261
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 :
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.
NoT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 09h42   #13
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
Je vois pas trop comment l'utiliser dans mon code que j'ai mis ci dessus...
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 09h52   #14
NoT
Membre confirmé
 
Inscription : février 2004
Messages : 237
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 237
Points : 261
Points : 261
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à.
NoT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 10h39   #15
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
Mouais je vois pas trop comment l'utiliser dans mon code...

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

Code :
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');
	}
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 10h45   #16
NoT
Membre confirmé
 
Inscription : février 2004
Messages : 237
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 237
Points : 261
Points : 261
à 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 )
NoT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 11h27   #17
Membre confirmé
 
Avatar de BenoitDenis
 
Inscription : avril 2005
Messages : 538
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : avril 2005
Messages : 538
Points : 219
Points : 219
Envoyer un message via MSN à BenoitDenis
C'est quoi le $w et le $txt que la fonction prend en parametres ?
__________________
Le contenu est roi, optimisé il est empereur...

Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

http://www.tethis-interactive.com
BenoitDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 11h54   #18
NoT
Membre confirmé
 
Inscription : février 2004
Messages : 237
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 237
Points : 261
Points : 261
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
NoT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h42.


 
 
 
 
Partenaires

Hébergement Web