CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 28-03-2015 18:24:51

iwn
Pitivier
Lieu: La Rochelle
Date d'inscription: 22-01-2015
Messages: 18
Site web

[RESOLU] - V3 - CakePdf

Salut à tous.
Depuis un moment je tourne en rond avec ce plugin....mad
FriendsOfCake/CakePdf
Si quelqu'un a réussit a le faire tourner je suis preneur de toute info !roll


Passez à la V3 .... que du BONHEUR !!!

Hors ligne

 

#2 30-03-2015 13:37:57

cyberbobjr
Baker
Date d'inscription: 13-07-2010
Messages: 625

Re: [RESOLU] - V3 - CakePdf

Salut,
je n'utilise plus ce plugin pour la V3, j'utilise en direct la libraire TCPDF dans mes vues.
Voilà comment je fait :
je place ma libraire TCPDF dans le répertoire /vendor
Je créé un layout default.ctp dans /src/Template/pdf/default.ctp avec ce contenu :

Code: php

  1. <?php
  2. require_once ROOT . DS . 'vendor' . DS . 'tecnick.com' . DS . 'tcpdf' . DS . 'tcpdf.php';
  3. $pdf = new PDF('L', 'mm', PDF_PAGE_FORMAT, TRUE, 'UTF-8', FALSE);
  4. $pdf->SetCreator(PDF_CREATOR);
  5.  
  6. $pdf->setPrintHeader(FALSE);
  7. $pdf->setPrintFooter(FALSE);
  8.  
  9. $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
  10.  
  11. $pdf->SetMargins(5, 37, PDF_MARGIN_RIGHT);
  12. $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
  13. $pdf->SetFooterMargin(5);
  14.  
  15. $pdf->SetAutoPageBreak(TRUE, 5);
  16.  
  17. if (@file_exists(dirname(__FILE__) . '/lang/eng.php')) {
  18.     require_once(dirname(__FILE__) . '/lang/eng.php');
  19.     $pdf->setLanguageArray($l);
  20. }
  21.  
  22. // ---------------------------------------------------------
  23.  
  24. // je définit mes polices
  25. $pdf->SetFont('times', '', 10);
  26. $pdf->setColor('text', 0, 0, 0);
  27. // j'ajoute une page
  28. $pdf->AddPage();
  29. // récupération de la vue
  30. $pdf->writeHTML($this->fetch('content'), TRUE, FALSE, TRUE, FALSE, '');
  31. $pdf->lastPage();
  32. // le fichier est enregistré sur le disque uniquement !!!
  33. $pdf->Output(APP . 'files' . DS . 'pdf' . DS . $filename . '.pdf', 'F');
  34. ?>

Ensuite je rajoute l'extension dans routes.php :

Code: php

  1. Router::extensions(['html', 'rss', 'pdf']);

Je créé ensuite une vue view.ctp dans le répertoire /src/Template/mensuels (c'est pour l'exemple, à toi d'adapter)
et dans mon controlleur je spécifie la vue à produire :

Code: php

  1. public function generatepdf($id)
  2.         {
  3.             if (!is_null($id)) {
  4.                 $mensuel = $this->Mensuels->get($id, [
  5.                     'contain' => [
  6.                         'Sites',
  7.                         'Users'
  8.                     ]
  9.                 ]);
  10.                 $title = 'Exploitation - Suivi technique';
  11.                 $subtitle = $mensuel->site->libelle;
  12.                 $filename = 'rapport_mensuel_' . $mensuel->site->id . '_' . date_format($mensuel->created, 'Y-m-d-H-i');
  13.                 // récupération des données volumétriques pour la période donnée
  14.                 $rapports = TableRegistry::get('Rapports');
  15.                 $rapports = $rapports->find('dates', [
  16.                     'mois'    => $mensuel->mois,
  17.                     'annee'   => $mensuel->annee,
  18.                     'site_id' => $mensuel->site->id
  19.                 ])
  20.                                      ->toArray();
  21.                 $view = new View();
  22.                 $view->set(compact('id', 'title', 'subtitle', 'rapports', 'filename'));
  23.                 $viewdata = $view->render('Mensuels/pdf/view', 'pdf/default');
  24.                 // on vérifie si le fichier existe bien
  25.                 if (file_exists(APP . 'files' . DS . 'pdf' . DS . $filename . '.pdf')) return $filename . '.pdf';
  26.                 else return NULL;
  27.             } else throw new Exception\ForbiddenException(__('Accès direct non autorisé'));
  28.         }

Attention ! ce bout de code ne sert qu'a produire un fichier sur le serveur, et non pas à l'afficher au client. Pour cela c'est un autre code qui sera utilisé (disponible sur demande wink)

A++


Développeur freelance et disponible, contactez-moi en privé.
Mon blog CakePHP : http://caketuts.key-conseil.fr

Hors ligne

 

#3 30-03-2015 15:04:22

iwn
Pitivier
Lieu: La Rochelle
Date d'inscription: 22-01-2015
Messages: 18
Site web

Re: [RESOLU] - V3 - CakePdf

Merci cyberbobjr ! smile
Je veux bien l'autre bout de code car c'est plus ca que je recherches.


Passez à la V3 .... que du BONHEUR !!!

Hors ligne

 

#4 30-03-2015 15:29:50

cyberbobjr
Baker
Date d'inscription: 13-07-2010
Messages: 625

Re: [RESOLU] - V3 - CakePdf

De mémoire (je n'ai pas le code sous la main), il faut remplacer la ligne :

Code: php

  1. $pdf->Output(APP . 'files' . DS . 'pdf' . DS . $filename . '.pdf', 'F');

par
$pdf->Output(APP . 'files' . DS . 'pdf' . DS . $filename . '.pdf', 'I');
et dans le controlleur, tu peux supprimer ces lignes :

Code: php

  1. $view = new View();
  2.                 $view->set(compact('id', 'title', 'subtitle', 'rapports', 'filename'));
  3.                 $viewdata = $view->render('Mensuels/pdf/view', 'pdf/default');
  4.                 // on vérifie si le fichier existe bien
  5.                 if (file_exists(APP . 'files' . DS . 'pdf' . DS . $filename . '.pdf')) return $filename . '.pdf';
  6.                 else return NULL;

par :

Code: php

  1. $this->set(compact('id', 'title', 'subtitle', 'rapports', 'filename'));

ca devrait afficher directement le PDF sur le client.
A++


Développeur freelance et disponible, contactez-moi en privé.
Mon blog CakePHP : http://caketuts.key-conseil.fr

Hors ligne

 

#5 08-04-2015 17:30:16

iwn
Pitivier
Lieu: La Rochelle
Date d'inscription: 22-01-2015
Messages: 18
Site web

Re: [RESOLU] - V3 - CakePdf

Merci beaucoup Cyberbobjr !

Juste 3 petites remarques.... le nom de la class n'est pas PDF mais TCPDF
et il faut rajouter dans le controller :

Code: php

  1. $this->response->type('application/pdf');

et c'est

Code: php

  1. $pdf->Output($filename . '.pdf', 'I');

pour envoyer directement le pdf au navigateur.
uniquement sinon ca donne un nom a rallonge !!!

En tout cas bien pratique comme class !!! big_smile

Dernière modification par iwn (08-04-2015 18:13:09)


Passez à la V3 .... que du BONHEUR !!!

Hors ligne

 

#6 09-04-2015 09:52:09

cyberbobjr
Baker
Date d'inscription: 13-07-2010
Messages: 625

Re: [RESOLU] - V3 - CakePdf

Bien vu smile résolu dans ce cas, merci pour ton retour !


Développeur freelance et disponible, contactez-moi en privé.
Mon blog CakePHP : http://caketuts.key-conseil.fr

Hors ligne

 

#7 04-05-2015 10:33:19

mister-stitch
Pitivier
Date d'inscription: 08-04-2015
Messages: 12

Re: [RESOLU] - V3 - CakePdf

Rencontrant des problème avec CakePdf, j'ai suivit votre exemple, néanmoins lorsque j'appel ma fonction pour afficher mon document je rencontre le même problème qu'avec CakePdf ... échec du chargement du document pdf. Je vois vraiment plus quoi faire pour le coup hmm, une idée peut être ?

Hors ligne

 

#8 04-05-2015 11:09:39

mister-stitch
Pitivier
Date d'inscription: 08-04-2015
Messages: 12

Re: [RESOLU] - V3 - CakePdf

Du nouveau, j'arrive à obtenir une page blanche, sans aucun contenu, du coup je m'interroge sur ce que je met dans ma vue, je doit utiliser les attributs de TCPDF, comme dans les exemples : http://www.tcpdf.org/examples.php , ou du HTML ? hmm


Edit :  j'arrive à écrire sur le doc c'est bon.

Maintenant j'aimerais savoir si justement je peux utiliser les outils que propose TCPDF ? smile !

En tous cas Merci à vous deux  ! Vos messages m'auront été utile big_smile

Dernière modification par mister-stitch (04-05-2015 11:16:14)

Hors ligne

 

#9 03-02-2017 10:52:38

sceren
Brownie
Date d'inscription: 12-10-2012
Messages: 25

Re: [RESOLU] - V3 - CakePdf

Bonjour,

J'essaye de charger la bibliotheque TCPDF dans mon fichier vu.tcp

Lors du lancement de cette commande

Code: php

  1. <?php
  2. require_once (ROOT . DS . 'vendor' . DS . 'tecnickcom' . DS . 'tcpdf' . DS . 'tcpdf.php');
  3. ?>

j'ai cette erreur - J'utilise Cakephp 3

Error: Uncaught TypeError: Argument 1 passed to Cake\Error\BaseErrorHandler::handleException() must be an instance of Exception, instance of ParseError given in /var/www/html/gldr/vendor/cakephp/cakephp/src/Error/BaseErrorHandler.php:154 Stack trace: #0 [internal function]: Cake\Error\BaseErrorHandler->handleException(Object(ParseError)) #1 {main} thrown
File /var/www/html/gldr/vendor/cakephp/cakephp/src/Error/BaseErrorHandler.php
Line: 154

Quel est le problème ?

D'avance merci

Dernière modification par sceren (03-02-2017 10:53:26)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr