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] Les accents ne passent pas avec FPDF


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut [FPDF] Les accents ne passent pas avec FPDF
    Bonjour tout le monde,

    Je crée un PDF à partir d'une requête, j'obtiens alors un tableau avec le matricule, nom, prénom et cote de l'étudiant.

    Le problème, c'est que les accents ne passent pas, ça me donne par exemple :

    M?lissa, V?ronique,...

    J'ai fait une recherche sur le forum, je suis tombé sur cette discution :

    http://www.developpez.net/forums/d34...rset-cest-doc/

    On dit d'utiliser utf8_decode().

    Je me demandais comment je pouvais utiliser cela dans mon code ? :

    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
    <?php
    session_start();
    define('FPDF_FONTPATH','font/');
    require('mysql_table.php');
     
    class PDF extends PDF_MySQL_Table
    {
    	function Header()
    	{
    		//Titre
    		$this->SetFont('Arial','',10);
     
    		$this->Cell(0,6,'Professeur '.$_SESSION['Prenom'].' '.$_SESSION['Nom']. ' ' .$_GET['cours']. ' ' . $_GET['type'].' '.$_GET['categorie']. ' (Page ' . $this->PageNo().' sur'. $this->AliasNbPages(). ' {nb} )'. '      Date : '. date("d/m/y") .'   Signature : ',0,1,'C');
    		$this->Ln(10);
    		if($_GET['etat'] == "true")
    		{
    			$this->Cell(0,6,'Affichage aux valves autorisé',0,1,'C');
    		}
    		else
    		{
    			$this->Cell(0,6,'Affichage aux valves non autorisé',0,1,'C');
    		}
     
    		//Imprime l'en-tete du tableau si nécessaire
    		parent::Header();
    	}
    }
     
    //Connexion a la base
    mysql_connect('localhost','root','mdp');
    mysql_select_db('pharma');
     
    $pdf=new PDF();
    $pdf->Open();
    $pdf->AddPage();
     
    $sql = "SELECT inscrits_en.MATRICULE_ET, etudiants.NOM_ET, etudiants.PRENOM_ET,inscrits_en.NOTE FROM `inscrits_en` LEFT JOIN `etudiants` ON ( inscrits_en.MATRICULE_ET = etudiants.MATRICULE_ET ) WHERE MNEMONIC = '".$_GET['cours']."' AND TYPE_DE_COURS = '".$_GET['type']."' AND CATEGORIE = '".$_GET['categorie']."' ORDER BY NOM_ET, PRENOM_ET";
     
    //Premier tableau : imprime toutes les colonnes de la requete
    $pdf->Table($sql);
     
    //Sortie vers l'écran
    $pdf->Output(I);
    //***Vue que cela ne fonctionne pas avec IE, je dois ajotuer ce code qui crée un fichier temporaire (voir FAQ fpdf)***
    //Détermination d'un nom de fichier temporaire dans le répertoire courant
    $file = basename(tempnam('.', 'tmp'));
    rename($file, $file.'.pdf');
    $file .= '.pdf';
    //Sauvegarde du PDF dans le fichier
    $pdf->Output($file, 'F');
    //Redirection
    header('Location: '.$file);
    ?>
    J'ai essayé ceci mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = utf8_decode($sql);
    $pdf->Table($sql);
    Merci d'avance.

    beegees

  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
    Par défaut
    Ce n'est pas la requete qu'il faut passer en ANSI c'est les resultats qui sont affichés.

    Il faudrait modifier la fonction table.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ce n'est pas la requete qu'il faut passer en ANSI c'est les resultats qui sont affichés.

    Il faudrait modifier la fonction table.
    Salut Sabotage,

    Merci pour ta réponse.

    Tu me dis que je dois modifier la fonction Table, c'est dans la classe fpdf alors ?

    J'ai trouvé une fonction nommée "Table" dont voici le code :

    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
    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','',11);
    	$this->ColorIndex=0;
    	$this->ProcessingTable=true;
    	while($row=mysql_fetch_array($res))
    		$this->Row($row);
    	$this->ProcessingTable=false;
    	$this->cMargin=$cMargin;
    	$this->aCols=array();
    }
    }
    Vois-tu où je dois changer le code ?

    Merci encore pour ton aide et bon Dimanche.

    beegees

  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
    Par défaut
    Apparemment ca se passe dans la fonction Row() pour l'affichage
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Apparemment ca se passe dans la fonction Row() pour l'affichage
    Merci pour ta réponse.

    J'ai tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->Row(utf8_decode($row));
    Sans succès.

    J'obtiens ceci :

    MATRICULE_ET NOM_ET PRENOM_ET NOTE
    A r r a
    A r r a
    A r r a
    A r r a
    A r
    J'ai aussi trouvé la fonction Row() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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;
    }
    Qu'en penses-tu ?

    Merci encore.

    beegees

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->Cell($col['w'],5,utf8_decode($data[$col['f']]),1,0,$col['a'],$fill);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [PDO] Base de données en Unicode mais les accents ne passent pas
    Par seïna dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 30/12/2008, 16h04
  2. [SQL-Server] Les accents ne passent pas entre MS SQL et PHP ?
    Par stephane9422 dans le forum PHP & Base de données
    Réponses: 34
    Dernier message: 17/11/2008, 15h22
  3. Retirer les accents d'une chaine avec MySQL
    Par orus8 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/02/2006, 16h47
  4. [EasyPHP] Les variables ne passent pas sur EasyPHP
    Par b6i6o6 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 10/02/2006, 12h37
  5. Envoie mail incorrect : les accents ne passe pas !
    Par wappyboy dans le forum Modules
    Réponses: 4
    Dernier message: 05/01/2006, 09h24

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