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

PHP & Base de données Discussion :

FPDF MultiCell + BDD SQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 5
    Points
    5
    Par défaut FPDF MultiCell + BDD SQL
    Bonjour à tous,
    je dois créer un PDF avec la classe FPDF à partir d'une BDD.

    Pour le moment j'utilise la fonction Cell, ça fonctionne mais lorsque mon texte est long, il dépasse sur les autres cellules, j'ai vu que la fonction MultiCell permet de faire des retours à la ligne.
    Le soucis étant que je n'arrive pas DU TOUT à appliquer le MultiCell avec mon code... je sais que le sujet a déjà été traité mais je n'y arrive vraiment pas et ça commence un peu à être fatiguant..
    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
    <?php
    require('connexion.php');
    require ('fpdf.php');
     
    class PDF extends FPDF
    {
    var $col = 0;
    var $y0;
    function header (){
     
    // Logo
        $this->Image('logo.png',10,6,30);
    // Police Arial gras 15
        $this->SetFont('Arial','B',15);
        // Décalage à droite
        $this->Cell(95);
        // Titre
        $this->Cell(10,20,'Récapitulatif des prestations','C');
        // Saut de ligne
        $this->Ln(20);
    }
    function Footer()
    {
        // Pied de page
        $this->SetY(-15);
        $this->SetFont('Arial','I',8);
        $this->SetTextColor(128);
        $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
    }
    function SetCol($col)
    {
        // Positionnement sur une colonne
        $this->col = $col;
        $x = 10+$col*65;
        $this->SetLeftMargin($x);
        $this->SetX($x);
    }
     
    function AcceptPageBreak()
    {
        // Méthode autorisant ou non le saut de page automatique
        if($this->col<2)
        {
            // Passage à la colonne suivante
            $this->SetCol($this->col+1);
            // Ordonnée en haut
            $this->SetY($this->y0);
            // On reste sur la page
            return false;
        }
        else
        {
            // Retour en première colonne
            $this->SetCol(0);
            // Saut de page
            return true;
        }
    }
    function Tableau($header,$data)
    {
        //Couleurs, épaisseur du trait et police BOLD
        $this->SetFillColor(150,180,255); //fond des entetes de colonnes
        $this->SetTextColor(0); //couleur du texte des entetes des colonnes
        $this->SetDrawColor(0); // couleur des bordures
        $this->SetLineWidth(.2); //epaisseur des traits
        $this->SetFont('','B');
     
        //En-tête
        $w=array(7,30,50,15,15,25,30,7,15,15,15,15,16,16,20);
        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); //couleur du fond des cases
        $this->SetTextColor(0); //couleur du texte des cases
        $this->SetFont('');
     
        //Données
        $fill=true;
        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->Cell($w[7],6,$row[7],'LR',0,'L',$fill);
            $this->Cell($w[8],6,$row[8],'LR',0,'L',$fill);
            $this->Cell($w[9],6,$row[9],'LR',0,'L',$fill);  
            $this->Cell($w[10],6,$row[10],'LR',0,'L',$fill);
            $this->Cell($w[11],6,$row[11],'LR',0,'L',$fill);
            $this->Cell($w[12],6,$row[12],'LR',0,'L',$fill);
            $this->Cell($w[13],6,$row[13],'LR',0,'L',$fill);
            $this->Cell($w[14],6,$row[14],'LR',0,'L',$fill);  
        	  $this->Ln();
            $fill=!$fill;
        }
     
        $this->Cell(array_sum($w),0,'','T');
    }
    }
     
     
    $data = array();
     
    //Requete SQL, pour la classe imprimer on change le format DATE_TIME vers DATE avec 'CAST'
    $sql = $pdo->query ('SELECT event_id, event_titre, event_description, CAST( event_debut AS DATE ), CAST(event_finTH as DATE), event_nomclient, event_lieu, event_type, event_ref, event_numero, event_commercial, CAST(event_dateDtransp as DATE), event_nbembauche, event_nbcuisinier, event_heureArrivee FROM table_evenements');
    //Boucle sur les resultats
    while($col = $sql->fetch())
    {
        array($col);
        $data[] = $col;  
    }
     
    $sql->closeCursor();
     
    //Creation nouveau pdf L = Paysage, P = Portrait
    $pdf=new PDF('L');
    //Titres des colonnes
    $header=array('Id','Titre','Description','Début','Fin Th.','Client','Lieu','Type','Ref.','Numéro','Commercial','Transp Deb','NB Serveur','Nb Cuisinier','Arrivée');
    $pdf->SetFont('Arial','',7);
    $titre = 'Recapitulatif Prestation';
    $pdf->SetTitle($titre);
    $pdf->SetMargins(2,30);
    $pdf->AddPage();
    $pdf->Tableau($header,$data);
    $pdf->Output('Recapitulatif_Prestations_'.date("Y_m_d").'.pdf','I');
    ?>
    Je voudrais donc remplacer les Cell par du MultiCell.
    Je vous remercie d'avance, et soyez indulgents, je suis un grand débutant !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Montre nous ton code avec multicell et dit nous surtout quel résultat tu obtiens.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci de votre réponse, justement je n'arrive vraiment pas à faire du MultiCell avec ma requête, j'aimerais juste savoir si je pouvais avoir un exemple avec une requête qui retourne les valeurs dans un MultiCell..
    J'ai pas envie de passer pour un feignant, mais la je commence à saturer...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai bien compris que tu n'y arrivais mais justement montre nous ce que tu as écris et dit nous ce que ça donne pour qu'on puisse comprendre.

    Que les données viennent d'une requête ou pas, ne change rien à l'utilisation de multicell.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je sens que je vais me faire taper sur les doigts
    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
    <?php
    require('mc_table.php');
    require('connexion.php');
     
    $sql = $pdo->query ('SELECT event_id, event_titre, event_description, CAST( event_debut AS DATE ), CAST(event_finTH as DATE), event_nomclient, event_lieu, event_type, event_ref, event_numero, event_commercial, CAST(event_dateDtransp as DATE), event_nbembauche, event_nbcuisinier, event_heureArrivee FROM table_evenements');
     
    $pdf=new PDF_MC_Table();
    $pdf->AddPage();
    $pdf->SetFont('Arial','',14);
    //Table de 20 lignes et 4 colonnes
    $pdf->SetWidths(array(7,30,55,15,15,20,30,7,15,10,15,15,16,16,15));
    srand(microtime()*1000000);
    for($i=0;$i<20;$i++)
    while($row = $sql->fetch())
    {
    	$pdf->Row(array($sql));
    	}
    $pdf->Output();
    ?>
    Mon mc_table.php :
    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
    <?php
    require('fpdf.php');
     
    class PDF_MC_Table extends FPDF
    {
    var $widths;
    var $aligns;
     
    function SetWidths($w)
    {
    	//Tableau des largeurs de colonnes
    	$this->widths=$w;
    }
     
    function SetAligns($a)
    {
    	//Tableau des alignements de colonnes
    	$this->aligns=$a;
    }
     
    function Row($data)
    {
    	//Calcule la hauteur de la ligne
    	$nb=0;
    	for($i=0;$i<count($data);$i++)
    		$nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
    	$h=5*$nb;
    	//Effectue un saut de page si nécessaire
    	$this->CheckPageBreak($h);
    	//Dessine les cellules
    	for($i=0;$i<count($data);$i++)
    	{
    		$w=$this->widths[$i];
    		$a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
    		//Sauve la position courante
    		$x=$this->GetX();
    		$y=$this->GetY();
    		//Dessine le cadre
    		$this->Rect($x,$y,$w,$h);
    		//Imprime le texte
    		$this->MultiCell($w,5,$data[$i],0,$a);
    		//Repositionne à droite
    		$this->SetXY($x+$w,$y);
    	}
    	//Va à la ligne
    	$this->Ln($h);
    }
     
    function CheckPageBreak($h)
    {
    	//Si la hauteur h provoque un débordement, saut de page manuel
    	if($this->GetY()+$h>$this->PageBreakTrigger)
    		$this->AddPage($this->CurOrientation);
    }
     
    function NbLines($w,$txt)
    {
    	//Calcule le nombre de lignes qu'occupe un MultiCell de largeur w
    	$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=0;
    	$j=0;
    	$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;
    }
    }
    ?>
    Réponse : Catchable fatal error: Object of class PDOStatement could not be converted to string in D:\xampp\htdocs\evenements\mc_table.php on line 63
    Merci de votre temps, je sais que je suis vraiment mauvais dans ce domaine

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je pense que tu voulais plutôt écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($row = $sql->fetch(PDO::FETCH_ASSOC))
    {
    	$pdf->Row($row);
    Par contre je ne vois pas à quoi sert la boucle for juste avant.

    Au passage, on n'écrit pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0;$i<count($data);$i++)
    Utilise foreach()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour, merci bien ! C'est ce que je cherchais, merci de votre aide.

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

Discussions similaires

  1. Problème de transfert BDD Sql
    Par Invité dans le forum Outils
    Réponses: 4
    Dernier message: 28/10/2005, 09h19
  2. Generer un script pour une BDD "*.sql"+"*.bat
    Par subzero82 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/08/2005, 16h47
  3. Erreur de connexion à une BDD SQL Server 2000 avec BDE
    Par SchpatziBreizh dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2005, 11h22
  4. manipuler une bdd sql server en MFC ou excel ?
    Par roninou dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 18/10/2004, 11h51
  5. Réponses: 4
    Dernier message: 13/04/2004, 19h12

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