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] Tableau 2 colonnes


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut [FPDF] Tableau 2 colonnes
    Bonsoir,

    Dans une partie de mon site web, je donne la possibilité au visiteur de consulter des fiches d'institutions. Je voudrais donner la possibilité au visiteur d'enregistrer au format pdf la fiche d'une institution.

    Les données sont relativement simples:

    4 tables (Identification, Contact, Public, Activités) de deux colonnes:
    • Première colonne le libellé

    • Deuxième colonne l'information


    J'ai créé dans une classe qui étend 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
     
        function BasicTable($data,$width)
        {
            $this->SetFont('Arial','',12);
            $this->SetFillColor(240,255,191);
            $this->SetTextColor(0,0,0); 
            $this->Cell(0,0,'','B',0,'L',0);  
            $this->Ln(0.1);                                
            //Données
            foreach($data as $lib=>$row)
            {
                if (strlen($row) == 0) {
                    $hauteur = 7;
                }
                else {
                    $hauteur = (ceil(strlen($row)/70)*6.5);             
                    $nb = preg_match_all("(\\n)",$row,$trouve);
                    //$hauteur = $hauteur +  ($nb * 5);
                }    
                $this->MultiCell(0,0,
                    $this->Cell($width,$hauteur,$lib,'LR',0,'L',1)
                    .$this->MultiCell(0,6,$row,0,'L',0));
     
            }
            $this->Ln(); 
            $this->Cell(0,0,'','B',1,'L',0);        
            $this->Ln(2);             
        }
    Je voudrais que la colonne libellé prenne la même hauteur que la colonne "donnée"... Mon code bug évidement si la partie donnée contient beaucoup de retour à la ligne.

    Je ne sais plus trop comment aborder le problème, en html, je n'ai pas de soucis les tables gèrent très bien leur hauteur de cellule et même avec des divs ça serait assez facile à mettre en place avec du CSS...

    Merci d'avance
    lionel

  2. #2
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    Citation Envoyé par spitou_77 Voir le message
    $this->MultiCell(0,0,
    $this->Cell($width,$hauteur,$lib,'LR',0,'L',1)
    .$this->MultiCell(0,6,$row,0,'L',0));
    Hello,

    Ce bout de code me parait "étrange"!

    Je suis pas sur d'avoir compris ce qui représente la première colonne de ce qui correspond à la deuxième.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->Cell($width/2,$hauteur,$col1_txt,'LR',0,'L',1)
    $this->Cell($width/2,$hauteur,$col2_txt,'LR',1,'L',1)
    En faisant comme ca tu va dessiner 2 rectangles l'un à coté de l'autre , de même hauteur, de largeur la moitié de ton paramètre de taille passé, une bordure à gauche et à droite.
    Un saut de ligne est inséré automatiquement après la dernière case de la ligne (paramètre en vert).

    ++
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse. Le soucis c'est que j'ai besoin d'un multicell pour la colonne data, certaines données sont trop longues pour s'afficher sur une seule ligne ou contiennent des '\n'.

    C'est d'ailleurs mon plus gros soucis, le calcul de ma hauteur sera complètement foireux en cas d'utilisation de plusieurs retour à lignes.

    si $row contient 'Bonjour\n\nBlaBlaBla\n\nAurevoir', mon calcul va déterminer qu'une hauteur d'une seule ligne (31/70 arrondi vers le haut) suffira à contenir mon texte alors qu'avec les retours à la ligne, il m'en faudrait 5.

    Je vais essayer de modifier le calcul de ma hauteur:
    1) $nbligne = ceil(strlen($row)/70);
    2) $nbretour = preg_match_all("(\\n)",$row,$trouve);
    3) $hauteur = ($nbligne + $nbretour) * 6.5;

    Et pour mon code étrange:
    le premier $this->MultiCell correspondrait en html à la balise <tr>
    et qui comporterait un <th> ($this->Cell) et un <td> ($this->MultiCell)

    Je ne suis vraiment pas sur du tout que ce soit très propre ou optimisé... je débute avec fpdf... tous les conseils sont les bienvenus

    merci

  4. #4
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    J'ai pas de quoi le tester, mais voici une idée :
    ( GetStringWidth permet de récupérer la longueur de la chaine dans le système 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
     
    $no_colonnes = 2;
     
    $nb_lignes_col1 = ceil($this->GetStringWidth($col1_txt)/($width*$no_colonnes))+substr_count($col1_txt,'\n');
    $nb_lignes_col2 = ceil($this->GetStringWidth($col2_txt)/($width*$no_colonnes))+substr_count($col2_txt,'\n');
     
    $diff_nb_lignes = abs($nb_lignes_col2-$nb_lignes_col1);
    if ($nb_lignes_col1 < $nb_lignes_col2){
       for ($i=0; $i<$diff_nb_lignes ; $i++){
          $col1_txt .= "\n";
       }
       $this->MultiCell($width/$no_colonnes,$hauteur,$col1_txt,'LR','L',1)
    }else{
       for ($i=0; $i< $diff_nb_lignes; $i++){
          $col2_txt .= "\n";
       }
       $this->MultiCell($width/$no_colonnes,$hauteur,$col2_txt,'LR','L',1)
    }
    $this->Ln();
    Le calcul de la hauteur a surement besoin de qq optimisations : genre ne pas compter les \n dans la longueur, mais cela est peut être fait automatiquement par la fonction GetStringWidth, je ne sais pas.
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                    $nbligne = 0;
                    $nbretour = 0;
                    $paragraphe = explode (CHR(10),$row);
                    foreach ($paragraphe as $p){                  
                        if (strlen($p) > 1){
                            $nbligne = $nbligne + (ceil(strlen($p)/58)); 
                            }
                        else
                           $nbretour++;    
                    } 
                    $hauteur = ($nbligne + $nbretour) * 6;
    Merci pour tes réponses, cela m'a mis sur la bonne voie pour trouver une solution à mon problème.

    J'ai du utiliser la police "Courier" sinon j'obtenais des surprises

    Encore merci
    lionel

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

Discussions similaires

  1. excel et tableau de colonne
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 08/01/2007, 16h42
  2. [FPDF] Tableau avec FPDF
    Par sly33 dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 11/12/2006, 14h39
  3. [XSL~FO] tableau à colonnes variables
    Par matts21 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 18/09/2006, 15h47
  4. [FPDF] tableau horizontale
    Par gforce dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/07/2006, 16h45
  5. Tableau -> Titre colonne (th) + saut de ligne ?!
    Par AceG dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 07/05/2005, 09h46

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