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 !