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:
Code:
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 !