[PDF et ODBC]

Résolu
Bonjour à tous,

Voilà le souci :
Pour fabriquer mes pdf (à l'aide de la classe FPDF) j'utilise des données tirées de deux bases de données.
Avant je tirais les données d'une base SQL Server et d'une autre base de données : Mysql.

Depuis un petit moment, un souci se pose :
Maintenant pour me connecter à la base SQL Server, j'utilise un odbc (avant je faisait un mssql_connect) mais depuis que je l'utilise (l'odbc) mes pdf me renvoient des caractères bizarres qui ne ressemblent à rien.

Question : Y'a-t-il réellement un conflit entre ODBC et PDF ou ais-je oublié quelque chose ? (En sachant que dans le reste de mon application j'utilise l'odbc pour tirer d'autres valeurs de la base SQL Server et là y' pas de souci -> c'est seulement pour les pdf le souci).

Merci d'avance.
Configuration: Windows XP
Firefox 2.0.0.11

16 réponses

  • Votes
  • Date
  • Date décroissante
  1. C'est bon, j'ai la solution (un peu étrange) :
    De part le require, j'importais un fichier avec des fonctions à l'intérieur.
    Mais là, depuis que je n'iporte plus -> j'écris le code des fonctions (importées) dans le script principal et ça marche.
    Maintenant, j'ai le souci des accents mais je me suis rappelé une fonction qui peut les gérer -> utf8_decode("une chaine avec accents"); et là pas de souci :).

    Un grand merci à toi evan4you.
    Bonne continuation.
    Tchao.
    1. Comment cela se fait-il sachant qu'avant d'utiliser l'odbc j'étais avec mssql_connect et là y'avais aucun souci tant au niveau de l'appli qu'au niveau des pdf ?
      Et donc juste en changeant les fonctions mssql_... par les fonctions odbc_... l'appli tourne bien mais une fois arrivé au pdf ça foire.
      Pourquoi ça ? Merci.
      1. C'est illisile car il manque la police Arial (dans ce cas,
        comme ta ligne $pdf->SetFont('Arial','',9); l'indique)

        Cette police de caractères doit etre copié sur le serveur sur lequel tourne la page php qui utilise FPDF

        Pour installer FPDF, il faut copier le fichier fpdf.php et le dossier font/ à la racine du répertoire

        Il te manque les fonts, donc FPDF ne sait pas comment générér les vecteurs du PDF
        1. Non non, 1000 excuses si je me suis mal exprimé.
          Juste si je pouvais voir mes pdf ça serait d'enfer.
          Avec le bout de code, vois tu pourquoi je n'arrive même pas à voir le mot "oui" ?
          Merci à toi.
          1. donc le problème ne vient pas des caractères accentués ....................................
            ......................

            ....................
            1. le souci est que le $pdf->Cell(10,10,"oui"); me sort un pdf incompréhensible donc avec les 2 autres cellules c'est toujours aussi illisible.
              1. ok :

                AVANT LE $pdf->Output();

                mets tout plein de caractères accentués et
                regarde le resultat dans le PDF

                exemple :

                $pdf->Cell(4,4,"ôh les bô caractères accentués");

                $pdf->Cell(8,8,"aéàéèàéàé");

                etc....

                essayes avec des cellules différentes.

                Ca passe dans le PDF ?????
                1. Petit bout de code pour le pdf :
                  require('./../fpdf/fpdf.php');
                  require_once('./../inc/Connexion.php');
                  cnx();
                  $pdf=new FPDF('L');
                  $pdf->AliasNbPages();
                  $pdf->AddPage();
                  $pdf->SetLeftMargin(1);
                  $pdf->Ln(3);
                  $pdf->SetFont('Arial','',9);
                  $pdf->Cell(10,10,"oui");
                  $pdf->Output();
                  decnx();

                  Partie de code pour la fonction odbc_connect (Connexion.php)
                  $GLOBALS['conn'];
                  function cnx($host = '***', $username = '***', $password = '***', $db = '***') {
                  $connection_string = "DRIVER={SQL SERVER};SERVER=".$host.";DATABASE=".$db.";";
                  $conn = odbc_connect($connection_string, $username, $password);
                  if(!$conn) {
                  echo "Impossible d'établir une connexion au serveur ".$host."<br>";
                  exit;
                  }
                  $GLOBALS['conn']=$conn;
                  }
                  function decnx() {
                  @odbc_close($GLOBALS['conn']);
                  }
                  1. Publie la ligne de code qui appelle FPDF stp (ou quelques lignes autour c mieux)
                    1. arf, 1000 excuses mais je ne vois pas trop la démarche à suivre, puisses tu m'expliciter davantage stp ?
                      1. Autre approche :

                        Juste avant la génération du PDF :

                        Remplace les car. en provenance de la base
                        par une chaine "hard-codée" dans ton code

                        ???

                        Ces car. accentués apparaissent dans le PDF ???
                        1. * essaie de créer une table en spécifiant l'encodage utf8

                          * ajoute des car. accentués

                          * récupère ces meme car. accentués

                          ------------------------------------------------------------------
                          1. Mes recherches sont restées sans succès, saurais tu m'aiguiller pour que je puisse changer la famille de caractères ?
                            1. Pour ODBC, tu dois préciser la famille de caractères en provenance de la base.

                              Ton probleme vient des parametres lorsque tu crees ta connexio ODBC.

                              En effet, ODBC est prévu pour tous les caractères, accentués ou pas, UNICODE, etc...
                              alors faut indiquer au driver quels caractères sont présents en base