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

CodeIgniter PHP Discussion :

Ajouter des classes fpdf et dérivées au framework CodeIgniter


Sujet :

CodeIgniter PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 49
    Points
    49
    Par défaut Ajouter des classes fpdf et dérivées au framework CodeIgniter
    Bonjour à toutes et à tous,

    je but sur l'intégration de classes dans mon framework CI.

    Pour créer des PDF, j'ai choisi fpdf (http://www.fpdf.org/)

    Mais je n'utilise pas la librairie d'origine fpdf, mais tfpdf qui gère l'UTF-8.

    A cette classe (tfpdf), j'ai réussi à ajouter une classe pour avoir de la rotation de texte ou image.
    => http://www.fpdf.org/fr/script/script2.php

    Maintenant, j'ai trouvé une autre classe pour créer des tableaux, et là, ça coince, impossible de faire marcher l'ensemble.
    => http://www.fpdf.org/fr/script/script12.php



    Comment tout ça est installé ?

    Toutes les fichiers de classes sont rangés dans : ci/application/libraries/fpdf

    - TFPDF.php
    - PDF.php
    - PDF_Rotate.php
    - Morepagestable.php

    1) TFPDF.php => Début du code de la classe principale TFPDF :
    class TFPDF {...}

    2) PDF.php => la classe PDF étend la classe PDF_Rotate :
    require('PDF_Rotate.php');
    class PDF extends PDF_Rotate {...}

    ?) Première question, pourquoi require('PDF_Rotate.php'); ?
    Sans ça marche pas, alors que la classe PDF étend la classe PDF_Rotate.
    Et que toutes ces librairies sont appellées par $this->load->library (voir un peu plus bas).

    3) la classe PDF_Rotate étend la classe TFPDF :
    //require('TFPDF.php');
    class PDF_Rotate extends TFPDF

    ?) Là, il m'a fallut mettre le //require('TFPDF.php'); en commentaire pour ne pas avoir d'erreur.



    Maintenant dans mon fichier contrôleur j'ai :

    $this->load->library(array( 'fpdf/TFPDF', 'fpdf/PDF', 'fpdf/PDF_Rotate' )); // Respecter scrupuleusement cet ordre d'énumération des classes.

    /!\ Je me suis aperçu que l'ordre des arguments de $this->load->library a son importance ! (Normal ?)


    Jusqu'ici, tout fonctionne, je peux créer des PDF, et même avec du texte pivoté.



    A tout ça, je voudrais maintenant ajouter la classe Morepagestable pour créer des tableaux.

    4) Morepagestable.php => la classe PDF2 étend la classe PDF :
    require('PDF.php');
    class PDF2 extends PDF {...}

    ?) Ici, que le require('PDF.php'); soit en remarque ou non, ne change que les messages d'erreur.

    Dans mon contrôleur, j'ai modifié l'appel des librairies par :
    $this->load->library(array( 'fpdf/TFPDF', 'fpdf/morepagestable', 'fpdf/PDF', 'fpdf/PDF_Rotate' ));

    Et j'ai modifier le début de la classe avec class PDF2 extends PDF {...} en pensant étendre la classe PDF précédente avec PDF2,
    mais ça, ça marche pas !




    Le code complet est :

    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
    define('FPDF_FONTPATH',$this->config->item('fonts_path'));
    $this->load->library(array( 'fpdf/TFPDF', 'fpdf/morepagestable', 'fpdf/PDF', 'fpdf/PDF_Rotate' )); // Respecter scrupuleusement cet ordre d'énumération des classes.
     
     
    //$this->load->library(array( 'fpdf/TFPDF', 'fpdf/PDF', 'fpdf/PDF_Rotate' )); // Respecter scrupuleusement cet ordre d'énumération des classes.
     
     
    $this->pdf2->Open();
     
     
    $this->pdf2->SetDrawColor(0);
    $this->pdf2->AddFont('DejaVu'        ,''    ,'DejaVuSansCondensed.ttf'        ,true);
    $this->pdf2->AddFont('DejaVuBold'    ,''    ,'DejaVuSansCondensed-Bold.ttf'    ,true);
     
     
    // Ajout de la page Reporting
    $this->pdf2->AddPage('L');
     
     
    $this->pdf2->tablewidths = array(15,20,15,5,65,20,20,20,20,20,30,30,40,20);
     
     
    //require(APPPATH.'libraries/fpdf/Morepagestable.php'); Test infructueux.
     
     
    foreach ( $donnees_factures_reporting as $cle => $valeur)
        {
        $donnees_tableau[] = array(    $valeur['id_ordre_transport'],
                                    $valeur['nom_etablissement_payeur'],
                                    $valeur['date_heure_ordre_transport'],
                                    'x',
                                    $valeur['date_heure_ordre_transport'],
                                    $valeur['enlevement_heure_arrivee'],
                                    $valeur['enlevement_heure_depart'],
                                    $valeur['depot_heure_arrivee'],
                                    $valeur['depot_heure_depart'],
                                    $valeur['lieu_depart'],
                                    $valeur['lieu_arrivee'],
                                    $valeur['observations'],
                                    $valeur['montant_HT']);
        }
        $this->pdf2->morepagestable($donnees_tableau);
     
     
    $this->pdf2->Output(); // A l'écran.



    L'erreur du moment est : Non-existent class: Morepagestable

    Arrivé là, après plusieurs essais, je suis coincé, et je n'ai pas assez de connaissance POO pour comprendre le système des extensions de classes.

    Quelqu'un à une idée ?
    Merci !
    Nils

    Je constate qu'en ré ordonnant l'appel des classes dans $this->load->library(), je peux enlever les require() des fichiers de classe et ça fonctionne toujours, hormis pour la classe Morepagestable.

    => $this->load->library(array( 'fpdf/TFPDF', 'fpdf/PDF_Rotate', 'fpdf/PDF' ));//, 'fpdf/Morepagestable'

    Ce n'est pas non plus un problème de droits/propriétaire sur le fichier.
    C'était root:root, passé à www-data:www-data, les droits étant les mêmes que les autres fichiers.
    pas mieux !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 49
    Points
    49
    Par défaut
    Ca y est, ça marche !

    Le problème était là :

    4) Morepagestable.php => la classe PDF2 étend la classe PDF :
    require('PDF.php');
    class PDF2 extends PDF {...}

    Ici, comme PDF était déjà utilisé, j'ai choisi d'écrire PDF2,
    mais non !!!, il faut écrire le nom du fichier pour la class !

    => Morepagestable.php => class Morepagestable extends PDF {...}

    Ralala.
    Enfin, résolu.

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

Discussions similaires

  1. comment ajouter des classes sous java
    Par oumay dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 04/02/2010, 18h59
  2. ajouter des class à un projet
    Par greg08 dans le forum Langage
    Réponses: 2
    Dernier message: 08/12/2009, 18h04
  3. Ajouter des classes au ClassPath en cours d'exécution
    Par cyrille37 dans le forum Général Java
    Réponses: 1
    Dernier message: 31/10/2007, 19h17
  4. ajouter des classes à une app déployée
    Par barhili04 dans le forum C#
    Réponses: 4
    Dernier message: 25/05/2007, 12h57
  5. [debutant] Comment ajouter des .class ?
    Par Slein dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/04/2004, 14h30

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