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] Retour à la ligne automatique dans une cellule


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Points : 12
    Points
    12
    Par défaut [FPDF] Retour à la ligne automatique dans une cellule
    Bonjour,

    J'aimerais savoir si c'est possible d'avoir plusieurs lignes dans une cell automatiquement ?

    Question simple mais dont je n'ai pas trouvé la réponse!

    Merci.

  2. #2
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    Salut, tu peux faire des cellules avec plusieurs ligns en utilisant la méthode
    MultiCell

    Vas voir sur fpdf.org pour les arguments et des explications...

    ++
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Salut jc_cornic,

    merci de ta réponse.

    Le probleme est que si j'utilise une multicell alors il va y avoir une autre cellule qui se créera en dessous de la premiere!

    Ce que je souhaite c'est que la cellule ne change pas de dimension mais que le texte se mette quand même sur deux lignes. Je ne sais pas si c'est possible ou non.

    Je ne sais pas si je me fait bien comprendre

    Merci, quand même.

  4. #4
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    Salut, effectivement, cela ne semble pas clair... As tu du code à proposer ???

    Sinon, avec MultiCell, tu peux choisir la taille de ta cellule et avec \n dans le texte, tu peux faire des retours à la ligne comme tu veux...

    Le problème est que si tu fais 2 MultiCell à la suite, fpdf les met l'une en dessous de l'autre. Ce problème est solutionnable (ça existe ce mot?)

    Tu mémorise la position (x1, y1) de ta MultiCell1, sa taille (sizeX, sizeY) et tu place la deuxième en même y (y2=y1) et tu change le x (x2 = x1+sizeX)

    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
     
     
    $x1=10;
    $y1=50;
    $sizeX=100;
    $sizeY=40;
     
    $pdf->SetXY($x1, $x2);
    $pdf->MultiCell($sizeX, $sizeY, "mon texte\navec des retours chariots", 1, "C", 0);
     
    // placement de la deuxième MultiCell
    $pdf->SetXY($x1+$sizeX, $y1);
    $pdf->MultiCell($sizeX, $sizeY, "mon deuxième texte\navec des retours chariots", 1, "C", 0);
     
    ...

    Espérant t'avoir aidé...

    ++
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Salut jc_cornic, je te remercie de ta réponse!!

    Désolé de revenir si tard mais j'avais kaissé ce probleme de coté...

    Je pense que Imoreion a posé la même question que moi concernant le retour a la ligne dans une multicell.

    Le probleme est lorsque l'on insere une multicell on perd la postion et si il y a un retour a la ligne alors la multicell prend la place de deux multicell en hauteur.

    Si je comprend bien pour rester dans une ligne, on est obligé de récupérer les valeurs de la position, insérer une multicell(en la prévoyant assez fine au cas ou il y a des retours a la ligne) et ensuite insérer la suite de notre ligne grace a la position qu'on a récupérer!

    Je trouve que sa fait pas mal, juste pour un retour a la ligne!

    peut etre a tu une autre solution!

    Je te remercie,
    Franchesko.

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Non, c'est plus simple que cela. La hauteur $h que tu indiques pour une multicell est la hauteur d'une ligne. s'il y a n lignes, la multicell se redimensionnera automatiquement à n*$h en hauteur.

    Si tu ne veux pas avoir à gérer à chaque fois les problèmes de curseur - par exemple si plusieurs multicells doivent figurer sur la même ligne - le mieux est sans doute de surcharger la méthode dans une classe dérivée. J'utilise la surcharge suivante, assez simple comme tu peux le constater :

    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
     
     
    	//----------------------------------------------------------------------------
    	// MULTI CELL
    	// @in $w = largeur de la cellule (occupe toute la ligne si $w == 0)
    	// @in $h = hauteur de la ligne (et non pas de la cellule multi-lignes !!)
    	// @in $txt = texte à insérer
    	// @in $border = spécification de bordure (0,1,'L','T','R','B')
    	// @in $align = spécification d'alignement ('L', 'R', 'C', 'J')
    	// @in $fill = spécification de remplissage (0,1)
    	// @in $cursorPos = placement du curseur après traitement (0=à droite, 1=saut de ligne)
    	//----------------------------------------------------------------------------
    	function multiCell($w, $h, $txt, $border = 0, $align = 'J', $fill = 0, $cursorPos = 1) {
    		// NB : ces contorsions sont rendues nécessaires par le fait que dans la classe de base, 
    		// SetY() a comme effet de bord de replacer le curseur à gauche...
    		if( $cursorPos == 0 ) {
    			$y = $this->GetY();
    			$x = $this->GetX() + $w;
    		}
    		parent::MultiCell($w, $h, $txt, $border, $align, $fill);
    		if( $cursorPos == 0 ) {
    			$this->SetY($y);
    			$this->SetX($x);
    		}
    	}

  7. #7
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Salut ^^
    J'ai résolu mon problème de cellules dans mon post : http://www.fpdf.org/fr/script/script3.php

  8. #8
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Hum c'est pas aussi simple que ça finalement.
    Herode, pourrais-tu me dire où placer dans mon script ta fonction multiCell() stp ?
    Merci ^^

    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
     
    <?
    // Export en PDF
    require('fpdf.php');
     
    class PDF extends FPDF
    {
    	//En-tête
    	function Header()
    	{
    	    //Logo
    	    $this->Image('LOGOROC.jpg',10,8,33);
    	    //Police Arial gras 15
    	    $this->SetFont('Arial','B',15);
    	    //Décalage à droite
    	    $this->Cell(80);
    	    //Titre
    	    $this->Cell(30,15,'Répertoire du personnel',0,0,'C');
    	    //Saut de ligne
    	    $this->Ln(20);
    	}
     
    	//Pied de page
    	function Footer()
    	{
    	    //Positionnement à 1,5 cm du bas
    	    $this->SetY(-15);
    	    //Police Arial italique 8
    	    $this->SetFont('Arial','I',8);
    	    //Numéro de page
    	    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    	}
     
    	//Chargement des données
    	function LoadData($file)
    	{
    	    //Lecture des lignes du fichier
    	    $lines=file($file);
    	    $data=array();
    	    foreach($lines as $line)
    	        $data[]=explode(';',chop($line));
    	    return $data;
    	}
     
    	//Tableau coloré
    	function FancyTable($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(38,38,35,15,22,22,22);
    	    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,'L',$fill);
    	        $this->Cell($w[4],6,$row[4],'LR',0,'L',$fill);
    	        $this->Cell($w[5],6,$row[5],'LR',0,'L',$fill);
    	        $this->Cell($w[6],6,$row[6],'LR',0,'L',$fill);
    	        $this->Ln();
    	        $fill=!$fill;
    	    }
    	    $this->Cell(array_sum($w),0,'','T');
    	}
    }
     
    $pdf=new PDF();
    //Titres des colonnes
    $header=array('Service','Fonction','Nom','Num int', 'Num ext', 'Num port', 'Num fax');
    //Chargement des données
    $data=$pdf->LoadData('repertoire.csv');
    $pdf->SetFont('Arial','',10);
    $pdf->AddPage();
    $pdf->FancyTable($header,$data);
    $pdf->AliasNbPages();
    $pdf->SetFont('Times','',10);
    $pdf->Output();
    ?>

  9. #9
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Tu peux en faire une méthode de ta classe PDF. Comme elle dérive de FPDF, PDF::MultiCell() surchargera FPDF::MultiCell().

  10. #10
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Je te remercie de ton aide, mais, - désolé de paraître neuneu -, j'ai rien compris
    Je suis désolé, étant un pur débutant, je n'ai jamais entendu parler de ces méthodes et surcharges
    Que dois-je faire concrètement ?
    Merci de ton aide et désolé pour l'abus

  11. #11
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Ha, ok ! Je reformule de manière moins laconique en ce cas.

    La classe FPDF est... une classe. Elle obéit donc aux principes de base du développement par objets. Je ne vais pas te faire de cours là-dessus, si tu ne connais pas, fonce sur les FAQ/tutos et bouquins qui en parlent. Mais en résumé, pour expliquer le principe des surcharges et (un peu) le code dans ma version de MultiCell():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class A { function display() { echo "A::display"; } }
    class B extends A { function display() { echo "B::display"; } }
    class C extends A { function display() { echo parent::display()."  --  B::display"; } }
     
    $obj = new A(); $obj->display();
    echo "<br/>";
    $obj = new B(); $obj->display();
    echo "<br/>";
    $obj = new C(); $obj->display();
    donne comme sortie :
    A::display
    B::display
    A::display -- C::display
    La classe de base A fait son travail. RAS.
    B hérite de A, donc de ses méthodes. Mais B a redéfini (surchargé) la méthode display(). C'est donc cette nouvelle version qui est appelée sur la deuxième ligne.
    C hérite de A et surcharge aussi display() mais fait appel, au sein de cette méthode, à la version originale (parent::display), à laquelle elle ajoute une nouvelle chaîne.

    Je n'en dis pas plus sur l'héritage, les surcharges et le polymorphisme, cf. les cours (indispensables ) à ce le sujet.

    Conclusion : dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class PDF extends FPDF
    {
       [..]
       function MultiCell(...) { ... } 
       [...]
    }
     
    $pdf=new PDF();
    $pdf->MultiCell(...); 
    [...]
    Tu insère la nouvelle version de la fonction MultiCell() dans ta classe dérivée, ici nommée PDF. C'est cette nouvelle version qui sera appelée. Attention aux arguments : la nouvelle version n'a pas exactement la même signature que l'ancienne, même si elle respecte le principe de substitution de Liskov. L'argument supplémentaire te permet de règler le comportement du curseur à la fin de rendu de la MultiCell. Par défaut, il fait comme d'hab' et passe à la ligne.

  12. #12
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Merci beaucoup pour ton cours Herode
    Je pense avoir tout compris
    Demain je testerai tout ça !
    Encore merci !

  13. #13
    Membre régulier Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Points : 89
    Points
    89
    Par défaut
    Ah beh non
    En fait j'ai compris la théorie, mais je coince pour la pratique
    Est-ce que je dois modifier le fichier fpdf.php ?
    Et si oui/non, Que dois-je changer concrètement ?
    Désolé, mais je n'arrive à apprendre que par l'exemple
    Merci beaucoup !

    P.S : je t'offrirai des fleurs à la fin

  14. #14
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Je ne vois pas bien comment t'expliquer ça mieux et je ne vais tout de même pas faire le code à ta place car si tu n'as lu les cours, ce serait sans fin

    Voir ici pour commencer : PHP5, FAQ

  15. #15
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    Par défaut
    Salut,

    Je fais des étiquettes pour les enveloppes où figurent :
    Nom
    Métier
    Adresse
    Code postal- Ville

    Je dois prendre en compte un format spécial (étiquette 99.1*38.1). Pas de problème pour faire deux multiCell sur la même ligne, mais tout ce complique lorsque la chaîne de mon texte contient un "\n" ....
    J'ai suivi tes conseils : Créer classe PDF qui dérive de FPDF et j'ai placé la méthode Multi-Cell.
    Enfin dans mon fichier j'ai bien créé une instance de la classe PDF mais le résultat est exactement le même. Un saut de ligne provoque une hauteur de nbLignes*hauteur... Si vous pouviez m'aider ! Merci d'avance.

  16. #16
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut MultiCell sans retour à la ligne
    en fait j'ai posé un peu la même question il y a 2 semaines...je m'en suis sortie en créant un focntion tout simple qui me permet d'afficher mes cellules avec plusieurs lignes les unes à la suite des autres, et non les unes en dessou des autres!J'utilise tout simplment la fonction GetX et SetXY:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function Multi_retour($w,$h,$txt,$b,$a,$f)
    	{
    		$x_m=$this->GetX();
    		$y_m=$this->GetY();
    		$this->MultiCell($w,$h,$txt,$b,$a,$f);
    		$x_m=$x_m+$w;
    		$this->SetXY($x_m,$y_m);
    	}
    Voilà, en espèrant que ça vous soit utile!
    Feel good, feel geek

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 10
    Points
    10
    Par défaut
    J'ai une question concernant la fonction Multicell
    D'après ce que j'ai compris cela crée les cellule d'un tableau dans lequel on peu faire un retour a la ligne dans une cellule??
    Mon problème est de comprendre comment je peu faire pour le remplir a partir d'une base donnée Mysql

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 10
    Points
    10
    Par défaut
    j'avais le même problème que toi maintenant sa marche
    voici mon code en espérant que sa puisse aider quelqu'un
    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    <?php
    require('fpdf.php');
     
    class PDF extends FPDF
    {
    //Chargement des données
    function LoadData($file)
    {
        //Lecture des lignes du fichier
        $lines=file($file);
        $data=array();
        foreach($lines as $line)
            $data[]=explode(';',chop($line));
        return $data;
    }
    //Tableau amélioré
    function ImprovedTable($header,$data)
    {
        //Largeurs des colonnes
        $w=array(15,20,20,6,15,50,20,4,4,4,4,4,4,4,4,4);
        //En-tête
        for($i=0;$i<count($header);$i++)
            $this->Cell($w[$i],7,$header[$i],1,0,'C');
        $this->Ln();
        //Données
        foreach($data as $row)
        {
    		$this->Cell($w[0],6,$row[0],'LR');
            $this->Cell($w[1],6,$row[1],'LR');
            $this->Cell($w[2],6,$row[2],'LR');
    		$this->Cell($w[3],6,$row[3],'LR');
    		$this->Cell($w[4],6,$row[4],'LR');
    		$this->Cell($w[5],6,$row[5],'LR');
    		$this->Cell($w[6],6,$row[6],'LR');
    		$this->Cell($w[7],6,$row[7],'LR');
    		$this->Cell($w[8],6,$row[8],'LR');
    		$this->Cell($w[9],6,$row[9],'LR');
    		$this->Cell($w[10],6,$row[10],'LR');
    		$this->Cell($w[11],6,$row[11],'LR');
    		$this->Cell($w[12],6,$row[12],'LR');
    		$this->Cell($w[13],6,$row[13],'LR');
    		$this->Cell($w[14],6,$row[14],'LR');
    		$this->Cell($w[15],6,$row[15],'LR');
            $this->Ln();
        }
        //Trait de terminaison
        $this->Cell(array_sum($w),0,'','T');
    }
     
    function WordWrap(&$text, $maxwidth)
    {
        $text = trim($text);
        if ($text==='')
            return 0;
        $space = $this->GetStringWidth(' ');
        $lines = explode("\n", $text);
        $text = '';
        $count = 0;
     
        foreach ($lines as $line)
        {
            $words = preg_split('/ +/', $line);
            $width = 0;
     
            foreach ($words as $word)
            {
                $wordwidth = $this->GetStringWidth($word);
                if ($wordwidth > $maxwidth)
                {
                    // Word is too long, we cut it
                    for($i=0; $i<strlen($word); $i++)
                    {
                        $wordwidth = $this->GetStringWidth(substr($word, $i, 1));
                        if($width + $wordwidth <= $maxwidth)
                        {
                            $width += $wordwidth;
                            $text .= substr($word, $i, 1);
                        }
                        else
                        {
                            $width = $wordwidth;
                            $text = rtrim($text)."\n".substr($word, $i, 1);
                            $count++;
                        }
                    }
                }
                elseif($width + $wordwidth <= $maxwidth)
                {
                    $width += $wordwidth + $space;
                    $text .= $word.' ';
                }
                else
                {
                    $width = $wordwidth + $space;
                    $text = rtrim($text)."\n".$word.' ';
                    $count++;
                }
            }
            $text = rtrim($text)."\n";
            $count++;
        }
        $text = rtrim($text);
        return $count;
    }
     
     
     
     
    	//----------------------------------------------------------------------------
    	// MULTI CELL
    	// @in $w = largeur de la cellule (occupe toute la ligne si $w == 0)
    	// @in $h = hauteur de la ligne (et non pas de la cellule multi-lignes !!)
    	// @in $txt = texte à insérer
    	// @in $border = spécification de bordure (0,1,'L','T','R','B')
    	// @in $align = spécification d'alignement ('L', 'R', 'C', 'J')
    	// @in $fill = spécification de remplissage (0,1)
    	// @in $cursorPos = placement du curseur après traitement (0=à droite, 1=saut de ligne)
    	//----------------------------------------------------------------------------
    	function multiCell($w, $h, $txt, $border = 0, $align = 'J', $fill = 0, $cursorPos = 1) {
    		// NB : ces contorsions sont rendues nécessaires par le fait que dans la classe de base, 
    		// SetY() a comme effet de bord de replacer le curseur à gauche...
    		if( $cursorPos == 0 ) {
    			$y = $this->GetY();
    			$x = $this->GetX() + $w;
    		}
    		parent::MultiCell($w, $h, $txt, $border, $align, $fill);
    		if( $cursorPos == 0 ) {
    			$this->SetY($y);
    			$this->SetX($x);
    		}
    	}
     
     
    }
     
     
     
    $pdf=new PDF();
    $pdf->SetFont('Arial','',6);
    $pdf->AddPage();
    mysql_connect("localhost","root","mysql");
    mysql_select_db("documentaire");
    $req = mysql_query("SELECT * FROM repertoire");
    while($result = mysql_fetch_array($req))
    {
    	//$lieu=$result['lieu'];
    	$nb=$pdf->WordWrap($result['lieu'], 15);
    	$pdf->multiCell('20','3',$result['lieu'],'0','J','0','0');
    	//$type=$result['type'];
    	$nb=$pdf->WordWrap($result['type'], 15);
    	$pdf->multiCell('20','3',$result['type'],'0','J','0','0');
    	//$dom=$result['domaine'];
    	$nb=$pdf->WordWrap($result['domaine'], 35);
    	$pdf->multiCell('30','3',$result['domaine'],'0','J','0','0');
    	//$ind=$result['ind'];
    	$nb=$pdf->WordWrap($result['ind'], 15);
    	$pdf->multiCell('4','3',$result['ind'],'0','J','0','0');
    	//$ap=$result['application'];
    	$nb=$pdf->WordWrap($result['application'], 11);
    	$pdf->multiCell('14','3',$result['application'],'0','J','0','0');
    	//$rap=$result['rapport'];
    	$nb=$pdf->WordWrap($result['rapport'], 15);
    	$pdf->multiCell('20','3',$result['rapport'],'0','J','0','0');
    	//$int=$result['intitule'];	
    	$nb=$pdf->WordWrap($result['intitule'], 38);
    	$pdf->multiCell('40','3',$result['intitule'],'0','J','0','0');
    	//$rq=$result['rq'];
    	$nb=$pdf->WordWrap($result['rq'], 7);
    	$pdf->multiCell('5','3',$result['rq'],'0','J','0','0');
    	//$ms=$result['ms'];
    	$nb=$pdf->WordWrap($result['ms'], 7);
    	$pdf->multiCell('5','3',$result['ms'],'0','J','0','0');
    	//$rs=$result['rs'];
    	$nb=$pdf->WordWrap($result['rs'], 7);
    	$pdf->multiCell('5','3',$result['rs'],'0','J','0','0');
    	//$uo=$result['uo'];
    	$nb=$pdf->WordWrap($result['uo'], 7);
    	$pdf->multiCell('5','3',$result['uo'],'0','J','0','0');
    	//$s=$result['s'];
    	$nb=$pdf->WordWrap($result['s'], 7);
    	$pdf->multiCell('5','3',$result['s'],'0','J','0','0');
    	//$c=$result['c'];
    	$nb=$pdf->WordWrap($result['c'], 7);
    	$pdf->multiCell('5','3',$result['c'],'0','J','0','0');
    	//$f=$result['f'];
    	$nb=$pdf->WordWrap($result['f'], 7);
    	$pdf->multiCell('5','3',$result['f'],'0','J','0','0');
    	//$m=$result['m'];
    	$nb=$pdf->WordWrap($result['m'], 7);
    	$pdf->multiCell('5','3',$result['m'],'0','J','0','0');
    	//$l=$result['l'];
    	$nb=$pdf->WordWrap($result['l'], 7);
    	$pdf->multiCell('5','3',$result['l'],'0','J','0','1');
    	//$pdf->multiCell('5','3',"",'1','J','0','1');
    	$pdf->Cell(190,6,"",0,1,'C');
     
    }
     
    //Titres des colonnes
    //$header=array("lieu","Type de procedure","Domaine","indice","Date d application","Intitulé du document","Ident","RQ","MS","RS","UO","S","C","F","M","L");
    //$test=array("","","","","","","","","","","","","","","");
     
    $pdf->Output();
    ?>

  19. #19
    Candidat au Club
    Femme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut multicell
    merci pour votre code qui' m a beaucoup servi
    mais je n'arrive pas à ajouter l'entete de tableau
    j'ai crée une fonction header
    function ImprovedTable($header)
    {
    //Largeurs des colonnes
    $w=array(15,125,125);
    //En-tête
    for($i=0;$i<count($header);$i++)
    $this->Cell($w[$i],7,$header[$i],1,0,'C');
    $this->Ln();
    //
    // $this->Cell(array_sum($w),0,'','T');
    }
    et j'ai fait appel à $header
    ça n'affiche rien
    aidez moi svp

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/03/2020, 23h20
  2. Réponses: 1
    Dernier message: 19/11/2008, 18h22
  3. Retour à la ligne automatique dans une zone de texte
    Par pasc06 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 20/10/2008, 22h03
  4. Retour à la ligne automatique dans les div
    Par Delphy113 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/02/2006, 10h42
  5. Insérer une ligne automatiquement dans une autre tab
    Par davyd dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/03/2005, 17h08

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