Bonjour,

J'utilise la class FPDF pour générer comme son nom l'indique, du PDF.
Avec un poil d'héritage pour gérer les tableaux ... dont voici le code :

Merci d'avance
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class PDF_MySQL_Table extends FPDF
{
var $ProcessingTable=false;
var $aCols=array();
var $TableX;
var $HeaderColor;
var $RowColors;
var $ColorIndex;
 
function Header()
{
	//Imprime l'en-tête du tableau si nécessaire
	if($this->ProcessingTable)
		$this->TableHeader();
}
 
function TableHeader()
{
	$this->SetFont('Arial','B',8);
	$this->Ln(10);
	$this->SetX($this->TableX);
	$fill=!empty($this->HeaderColor);
	if($fill)
		$this->SetFillColor($this->HeaderColor[0],$this->HeaderColor[1],$this->HeaderColor[2]);
	foreach($this->aCols as $col)
		$this->Cell($col['w'],6,$col['c'],1,0,'C',$fill);
	$this->Ln();
}
 
function Row($data)
{
	$this->SetX($this->TableX);
	$ci=$this->ColorIndex;
	$fill=!empty($this->RowColors[$ci]);
	if($fill)
		$this->SetFillColor($this->RowColors[$ci][0],$this->RowColors[$ci][1],$this->RowColors[$ci][2]);
	foreach($this->aCols as $col)
		$this->Cell($col['w'],5,$data[$col['f']],1,0,$col['a'],$fill);
	$this->Ln();
	$this->ColorIndex=1-$ci;
}
 
function CalcWidths($width,$align)
{
	//Calcule les largeurs des colonnes
	$TableWidth=0;
	foreach($this->aCols as $i=>$col)
	{
		$w=$col['w'];
		if($w==-1)
			$w=$width/count($this->aCols);
		elseif(substr($w,-1)=='%')
			$w=$w/100*$width;
		$this->aCols[$i]['w']=$w;
		$TableWidth+=$w;
	}
	//Calcule l'abscisse du tableau
	if($align=='C')
		$this->TableX=max(($this->w-$TableWidth)/2,0);
	elseif($align=='R')
		$this->TableX=max($this->w-$this->rMargin-$TableWidth,0);
	else
		$this->TableX=$this->lMargin;
}
 
function AddCol($field=-1,$width=-1,$caption='',$align='L')
{
	//Ajoute une colonne au tableau
	if($field==-1)
		$field=count($this->aCols);
	$this->aCols[]=array('f'=>$field,'c'=>$caption,'w'=>$width,'a'=>$align);
}
 
function Table($query,$prop=array())
{
	//Exécute la requête
	$res=mysql_query($query) or die('Erreur: '.mysql_error()."<BR>Requête: $query");
	//Ajoute toutes les colonnes si aucune n'a été définie
	if(count($this->aCols)==0)
	{
		$nb=mysql_num_fields($res);
		for($i=0;$i<$nb;$i++)
			$this->AddCol();
	}
	//Détermine les noms des colonnes si non spécifiés
	foreach($this->aCols as $i=>$col)
	{
		if($col['c']=='')
		{
			if(is_string($col['f']))
				$this->aCols[$i]['c']=ucfirst($col['f']);
			else
				$this->aCols[$i]['c']=ucfirst(mysql_field_name($res,$col['f']));
		}
	}
	//Traite les propriétés
	if(!isset($prop['width']))
		$prop['width']=0;
	if($prop['width']==0)
		$prop['width']=$this->w-$this->lMargin-$this->rMargin;
	if(!isset($prop['align']))
		$prop['align']='C';
	if(!isset($prop['padding']))
		$prop['padding']=$this->cMargin;
	$cMargin=$this->cMargin;
	$this->cMargin=$prop['padding'];
	if(!isset($prop['HeaderColor']))
		$prop['HeaderColor']=array();
	$this->HeaderColor=$prop['HeaderColor'];
	if(!isset($prop['color1']))
		$prop['color1']=array();
	if(!isset($prop['color2']))
		$prop['color2']=array();
	$this->RowColors=array($prop['color1'],$prop['color2']);
	//Calcule les largeurs des colonnes
	$this->CalcWidths($prop['width'],$prop['align']);
	//Imprime l'en-tête
	$this->TableHeader();
	//Imprime les lignes
	$this->SetFont('Arial','',8);
	$this->ColorIndex=0;
	$this->ProcessingTable=true;
	while($row=mysql_fetch_array($res))
		$this->Row($row);
	$this->ProcessingTable=false;
	$this->cMargin=$cMargin;
	$this->aCols=array();
}
}
Tout marche parfaitement.
Mon petit probleme est que je suis censé afficher un champs commentaire qui peut etre parfois assez long.
J'aimerai que le texte revienne a la ligne si il depasse la largeur de la colonne et pas qu'il s'ecrive par dessus la colonne suivante.

Est ce que quelqu'un aurait une petite idée ??

Sachant que la solution doit se trouver dans la fonction Addcol détaillée ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
function AddCol([mixed field [, mixed width [, string caption [, string align]]]])
 
field : champ de la requête SQL (nom ou indice). -1 signifie que la colonne représente le champ situé à la même position dans la requête (valeur par défaut).
 
width : largeur de la colonne. Elle peut être un nombre donnant la valeur absolue, ou une chaîne de la forme x% pour indiquer le pourcentage de la largeur du tableau. -1 signifie la largeur du tableau divisée par le nombre de colonnes (valeur par defaut).
 
caption : titre de la colonne. S'il est vide, le nom du champ avec une majuscule est utilisé (valeur par défaut).
 
align : alignement du texte dans la colonne. Les valeurs possibles sont L, C et R (valeur par défaut : L).
Merci d'avance