Bonjour,
je dois rendre une vue de dossier en PDF mais je n'arrive pas a faire un test simple.
j'ai téléchargé HTML2PDF v4.03
j'ai ajouté le dossier dans ..\app\Vendor
je l'ai renommé en html2pdf (..\app\Vendor\html2pdf)
j'ai renommé le fichier html2pdf.class.php en html2pdf.php
j'ai créé une fonction dans mon Controller
DossiersController.php
public function exportpdf(){
//pour éviter les outputs du debug de cake
Configure::write('debug',0);
//la solution depuis cakephp 2
$this->response->type('pdf');
$this->layout='pdf';
}
j'ai créé un layout dans ..\View\Layout\pdf.ctp
avec juste ça dedans
<?php echo $content_for_layout; ?>
et finalement j'ai créé ma vue pour exporter le pdf
exportpdf.ctp
<?php
App::import('Vendor', 'html2pdf/html2pdf');
header('Content-Disposition: inline');
header('Content-Type: application/pdf');
$content = "Salut";
$pdf = new HTML2PDF('P', 'A4', 'fr');
$pdf->pdf->SetDisplayMode('fullpage');
$pdf->writeHTML($content);
$pdf->Output('fichier.pdf');
?>
et quand je rentre "http://localhost/monprojet/dossiers/exportpdf"
Chrome repère bien que c'est un pdf mais m'affiche :
j'ai regardé les tutos disponible sur la doc de Cakephp mais les sujet me paresse un peu ancien
j'ai également regardé les autres Posts sur ce forum à ce sujet et c'est de là que j'ai pu faire ce que j'ai fait jusqu'à maintenant, mais il n'y a pas de problèmes similaires au mien.
savez-vous la source du problème ?
public function exportpdf() {
Configure::write('debug', 0);
$this->layout = null;
$this->response->type('application/pdf');
}
et vire les headers dans 'exportpdf.ctp'
Bonjour et merci de t'as réponse!
J'ai effectué ce que tu m'a dit, mais je suis tombé sur cette erreur là:
TCPDF ERROR: Some data has already been output, can't send PDF file
j'ai donc effectué des recherches à partir de ça et j'ai réussi à résoudre mon problème ...
Dans Mon Controller
DossiersController.php
public function exportpdf(){
Configure::write('debug', 0);
$this->layout = null; // test sans le layout
$this->response->type('pdf');//fonctionne aussi avec $this->response->type('application/pdf'); mais c'est plus long :)
}
dans ma vu il faut ajouté ob_clean() avant le $pdf->Output('test.pdf');
et mettre ob_get_clean() ou ob_get_contents()
Comme ceci :
Dossiers/exportpdf.ctp
<?php
App::import('Lib', 'html2pdf/html2pdf');
ob_start();
?>
Ceci est un Test
<?php
$content = ob_get_contents(); // récupère tout le contenu depuis ob_start()
// ou $content = ob_get_clean() ça fonctionne également;
$pdf = new HTML2PDF('P', 'A4', 'fr');
$pdf->pdf->SetDisplayMode('fullpage');
$pdf->writeHTML($content);
ob_clean();
$pdf->Output('test.pdf');
?>
Voilà ... j’espère que ça aidera d’autres personnes ;)
Peace and Cake !