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] Probleme dans l'utilisation de la classe FPDF et les tableaux


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 91
    Points : 71
    Points
    71
    Par défaut [FPDF] Probleme dans l'utilisation de la classe FPDF et les tableaux
    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

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 2
    Points : 2
    Points
    2

  3. #3
    Nouveau Candidat au Club
    Profil pro
    chef de projets
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : chef de projets

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut problème avec AddCol
    bonjour mathieu77186,

    stp est ce que t'a trouvé la solution de ce problème, j'ai le meme problème que toi

    merci d'avance

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 65
    Points
    65

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2010, 22h40
  2. Réponses: 1
    Dernier message: 06/05/2008, 10h10
  3. [Fichier] Problemes dans l'utilisation de fstream
    Par Kerwando dans le forum SL & STL
    Réponses: 14
    Dernier message: 09/08/2007, 01h14
  4. Réponses: 2
    Dernier message: 04/08/2007, 19h26
  5. probleme dans l'utilisation de la fonction include
    Par cortex007 dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 17h37

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