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 ?

2 réponses


amethyste
Réponse acceptée
public function exportpdf() {
    Configure::write('debug', 0);
    $this->layout = null;
    $this->response->type('application/pdf');
}

et vire les headers dans 'exportpdf.ctp'

maxime014
Auteur
Réponse acceptée

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 !