Erreur: Echec du chargement du document PDF (FPDF)

Fermé
Jeremyb36 - Modifié le 21 août 2018 à 21:48
 Jeremyb36 - 22 août 2018 à 09:14
Bonjour,

Je vous sollicite, afin de comprendre l'erreur qui m'est affiché " Echec du chargement du document PDF (FDPF).

J'utilise pour la première fois FPDF, je voulais donc vous demander de m'aiguiller un peu, je suis en galère depuis 4 jours, j'ai beau cherché sur certains forums et réessayer de comprendre tout le système FPDF, mais rien à faire, je suis perdu.

Pour commencer, j'ai un fichier de requêtes SQL/Zend pour récupérer les données sur PGadmin.

        public function getByDemande($idDemande, $typeTiers) {
 
            $select = $this -> newSelect(true);
            $select -> from(array('d' => 'Demande'));
            $select -> join(array('s' => 'Suivi'), 'd."idDemande" = s."idDemande"');
            $select -> join(array('t' => $typeTiers),'d."idContact" = t."idTiers"');
            $select -> joinLeft(array('tet' => 'TelephoneTiers'), 't."idTiers" = tet."idTiers"');
            $select -> joinLeft(array('mt' => 'MailTiers'), 't."idTiers" = mt."idTiers"');
            $select -> join(array('at' => 'AdresseTiers'), 't."idTiers" = at."idTiers"');
            $select -> where('d."idDemande" = s."idDemande"', $idDemande);
            $select -> where('d."actif"=?', true);
            $select -> order('s.dateHeure DESC');
 
            return $this->fetchAll($select);
        }


Ensuite j'ai mon fichier controller (j'utilise l'architecture MVC), où j'ai une fonction principale qui permet l'impression d'un suivi de la demande en PDF, ainsi que deux autres fonctions (où j'utilise le fameux FPDF) afin de récupérer les données et, de faire mon header et mon tableau de suivi.

public function impressionDemandeAction() {
            if (!$this->_checkDroit(2)) {
                return ErrorManager::droitErrorNew($this);
            }
 
            $debug = $this->_debug;
 
            // On instancie la barre de progression
            $progress = new Default_Model_Progress();
            $this->_progress = $progress;
 
            if ($debug) {
                parent::init();
            } else {
                parent::initNoRender();
                $progress->createTmp();
            }
 
            $data = $this->_getPostData();
            $idDemande = $data['idDemande'];
            $idTypeTiers = $data['idTypeTiers'];
            $typeTiers = 'idTypeTiers';
 
            switch ($idTypeTiers) {
                case TypeTiers::BENEFICIAIRE :
                    $typeTiers = "Beneficiaire";
                    break;
                case TypeTiers::SALARIE :
                    $typeTiers = "Salarie";
                    break;
                case TypeTiers::PROSPECT :
                    $typeTiers = "Prospect";
                    break;
                case TypeTiers::CANDIDAT :
                    $typeTiers = "Candidat";
                    break;
                case TypeTiers::ENTOURAGE :
                    $typeTiers = "Entourage";
                    break;
                case TypeTiers::FINANCEUR :
                    $typeTiers = "Financeur";
                    break;
                case TypeTiers::AUTRE :
                    $typeTiers = "StructureExterne";
                    break;
            }
 
 
            try {
                $debug ? null : $progress->updateTmp(0, "Préparation...");
 
                $gtwDemande = new LogisCom_Model_Gateway_Demande();
                $resultatDemande = $gtwDemande->getByDemande($idDemande, $typeTiers);
                $resultatDemande = $resultatDemande->toArray();
 
                // On crée le document
                $debug ? null : $progress->updateTmp(50, "Finalisation du document...");
                $this->_pdf = new Default_Model_FilePdf('L');
 
                $this-> printHeader();
 
                $this-> tableSuivi();
 
                // On sauvegarde le document
                if ($debug) {
                    $this->view->success = true;
                    $this->view->results = null;
                } else {
                    $pathname = $this->_pdf->generate('documents', 'demande');
                    $progress->closeTmp($pathname['complete'], $pathname['name']);
                }
            } catch (Exception $e) {
                // Prévenir le client de l'erreur
                $debug ? null : $progress->closeTmp($e->getMessage(), $e->getTraceAsString());
            }
        }    
 
        private function printHeader() {
            $lineBreak = 5;
            $data = $this->_getPostData();
            $idDemande = $data['idDemande'];
            $typeTiers = $data['idTypeTiers'];
 
 
            $gtwDemande = new LogisCom_Model_Gateway_Demande();
            $resultatDemande = $gtwDemande->getByDemande($idDemande, $typeTiers);
            $resultatDemande = $resultatDemande->toArray();
 
            $pdf = $this->_pdf;
 
            // Titre du pdf
            $title = $data['idCivilité']. " " .$data['nom']. " ".$data['prenom']. " - " . $data['idTypeTiers'];
            $pdf->addTitle($title);
 
            // Sous-titre
            $subtitle = "Demande n° ". $data['idDemande'];
 
            if ($data['confidentiel'] == TRUE) {
                $subtitle2 = "Cette demande est indiquée comme confidentielle";
            }
 
            $pdf->addSubTitle($subtitle);
            $pdf->addSubTitle($subtitle2);
 
            // Hauteur de ligne.
            $lineSmallHeight = 3;
 
            // Cadre du header
            $pdf->setLineHeight($lineSmallHeight);
            $pdf->drawFrame(4);
 
            foreach ($resultatDemande as $resDemande) {
                $dateNaissance = $resultat['dateNaissance'];
                $adresse = $resultat['idAdresse'];
                $telephone = $resultat['idTelephone'];
                $adresseMail = $resultat['idMail'];
            }
 
            $contactNaiss = "Date de naissance :";
 
            $dateButoir = $data['dateHeureButoir'];
 
            $dateFin = $data['fin'];
 
            $nature = $data['idNatureDemande'];
 
            $columnsWidth = array();
            $columnsWidth[] = 40;
            $columnsWidth[] = 100;
            $columnsWidth[] = 40;
            $columnsWidth[] = 50;
 
            $columnsFontStyle = array();
            $columnsFontStyle[] = null;
            $columnsFontStyle[] = 'B';
            $columnsFontStyle[] = 'U' ; 'red';
            $columnsFontStyle[] = 'B';
 
            $line1 = array();
            $line1[] = $contactNaiss;
            $line1[] = $dateNaissance;
            $line1[] = 'Caractéristiques :';
            $line1[] = null;
 
            $line2 = array();
            $line2[] = 'Adresse :';
            $line2[] = $adresse;
            $line2[] = 'Date butoir :';
            $line2[] = $dateButoir;
 
            $line3 = array();
            $line3[] = 'Telephone :';
            $line3[] = $telephone;
            $line3[] = 'Nature :';
            $line3[] = $nature;
 
            $line4 = array();
            $line4[] = 'Adresse email :' ;
            $line4[] = $adresseMail;
            $line4[] = 'Demande liée :';
            $line4[] = $typeTiers. " " .$data['nom']. " " .$data['prenom'];
 
            $content = array(
                $line1,
                $line2,
                $line3,
                $line4
            );
 
            $pdf->newLine($lineSmallHeight / 2);
            $pdf->drawSimpleTable($columnsWidth, $columnsFontStyle, $content);
        }
 
        private function tableSuivi() {
            $data = $this->_getPostData();
 
            $gtwDemande = new LogisCom_Model_Gateway_Demande();
            $resultatDemande = $gtwDemande->getByDemande($idDemande, $typeTiers);
            $resultatDemande = $resultatDemande->toArray();
 
            $pdf = $this->_pdf;
 
            $typeSuivi = $data['idTypeSuivi'];
 
            $lineSmallHeight = 3;
 
            $pdf->setLineHeight($lineSmallHeight);
            $pdf->drawFrame(4);
            $pdf->setDrawColor($typeSuivi);
            foreach ($resultatDemande as $suivi) {
                $typeSuivi = $suivi['idTypeSuivi'];
                $emetteur = $suivi['expediteur'];
                $date = $suivi['dateEffet'];
                $commentaires = $suivi['contenu'];
            }            
 
            $columnsWidth = array();
            $columnsWidth[] = 15;
            $columnsWidth[] = 25;
            $columnsWidth[] = 30;
            $columnsWidth[] = 20;
            $columnsWidth[] = 100;
 
            $columnsFontStyle = array();
            $columnsFontStyle[] = null;
            $columnsFontStyle[] = 'B';
            $columnsFontStyle[] = 'B';
            $columnsFontStyle[] = null;
            $columnsFontStyle[] = 'I';
 
            $line1 = array();
            $line1[] = 'Type : ';
            $line1[] = $typeSuivi;
            $line1[] = $date;
            $line1[] = 'Commentaires :';
            $line1[] = $commentaires;
 
            $line2 = array();
            $line2[] = 'Emetteur :';
            $line2[] = $emetteur;
 
            $content = array(
                $line1,
                $line2
            );
 
            $pdf->newLine($lineSmallHeight / 2);
            $pdf->drawSimpleTable($columnsWidth, $columnsFontStyle, $content);
        }


Voilà tout ce qui comporte comme code pour l'impression PDF. Je voulais savoir où je me suis planté.

Merci d'avance pour votre aide.

EDIT : Correction des balises de code => Ajout du langage afin d'avoir la coloration syntaxique et la numérotation des lignes.
Explications disponibles ici :https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
21 août 2018 à 21:50
Bonjour

Vérifie que tes fichiers .php sont encodés en UTF8 sans BOM
voir chapitre 1 de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
0
Merci pour ta réponse jordane45, au final, c'était mes index dans la variable $title, ils sont non définis. Comme dans la dernière fonction tableSuivi, plusieurs index sont non définis, je vais juste y remédier et ça fonctionnera ;-)

En ce qui concerne UTF8 sans BOM, je suis sous Aptana et les fichiers sont déclarés par défaut [Default (inherited from container: UTF-8), seulement comme je suis stagiaire en entreprise, et que c'est pour un gros projet de développement web, je n'ai pas à modifier quoi ce soit en paramètres de l'EDI. Je dois juste faire en sorte, que mes codes n'aient aucune erreur PHP, ce qui était le cas.

Merci encore d'avoir pris le temps de lire mon roman codé xD et de plus, je vais aussi changer mes syntaxes, j'ai fait en 2 étapes (header&body/tableau) alors que j'aurai du faire en 3 étapes (header/body/tableauSuivi), ça sera plus lisible pour mes collègues.
0