Bonjour à tous !

J'utilises le plugin CakePdf pour afficher créer des PDF pour mon module d'estimation en ligne.
Je rencontre bien évidemment un soucis (sinon je ne serais pas là).

Une fois mon estimation réalisée, j'affiche un élément qui résume la totalité de l'estimation. En bas 2 boutons : 1 pour réaliser une nouvelle estimation et 1 second qui permet d'afficher l'estimation au format PDF. Cela s'affiche bien, les infos de la vue PDF sont également notées. Je peux également récupérer des données de la Base.

Le problème si qu'il m'est impossible d'afficher le résultat que j'obtient dans mon élément. C'est à dire par exemple la variable $prix. Cette dernière est défini dans mon EstimationController et rendu à la vue pour l’élément.

Comment afficher sa valeur dans mon PDF ??

Merci à vous ?

11 réponses


digaburla
Auteur
Réponse acceptée

Salut, me revoilà. Désolé pour ce long silence met j'ai passé des exams et malheureusement j'ai eu également quelques jours de vacances ahaha.
Pour ce qui est de mon PDF, j'ai trouvé une solution de contournement sans toutefois avoir vérifier si c'était le fait que se soit un élément qui posé problème. Voici la solution que j'ai mis en place :
En fait j'ai créé un formulaire avec des <input type="hidden"> que je POST vers la page PDF, du coup, chaque variables est prise en compte et bien envoyé vers ma vue PDF.
Je sais pas si mes explications sont très claires, en tous les cas j'obtiens un résultats souhaité et je n'ai pas encore déniché d 'erreurs.
Si vous souhaitez plus d 'infos, je reste à dispo.

Merci de votre patience

Diga

Coucou,
Normalement tout ce qui s'affiche dans une vue "classic" doit s'afficher dans ton pdf
Tu devrait essayé de l'afficher en html avant de le générer en pdf, ca te permettra de voir d'ou viens le problème
Perso j'utilise ce plugin et j'ai jamais eu de tel soucis

Salut, merci de ta réponse et surtout d'avoir pris de ton temps.
En fait mes résultat s'affichent bien en HTML classique dans mon élément calculDevisFilm.ctp
Mais pas en PDF, je te montre mes bouts de code.

<?php $this->set('title_for_layout','Résultat estimation');?>
    <section class="result_estim" id="result_estim">
        <h1 title="titre_section">3 - Bilan de votre estimation :</h1>
        <?php

                <div class="estimation estimTotale">
                    <h1 title="titre_section">Total Commande</h1>
                    <div>
                    <?php
                        echo "prix numérisation : " . $prix . ' € <br><br>';
                        echo "frais de port : " . $fdp . ' € <br><br>';
                        if ($prixTotal < 32){
                        $prixTotal = 32;
                            echo "Notre minimun de facturation est : " . $prixTotal . ' € <br><br>';
                        }else {
                            echo "Montant total + options : " . $prixTotal . ' € <br><br>';
                        }
                    ?>
                    </div>
                </div>

            </section>  
        </section>  
        <div>
            <?php echo $this->Html->link(
                'imprimer un PDF',
                '/estimations/pdf.pdf',
                array('class' => 'boutonDevis', 'target' => '_blank')
            );?>        
        </div>
        <div>
            <?php echo $this->Html->link(
                'Retour estimation',
                '../Estimations#menu',
                array('class' => 'boutonDevis')
            );?>                
        </div>  

        <?php   }else{

                echo "Attention vous n'avez pas rentré une quantité de bobine";
                echo '</section>';      
                echo '<div>';
                    echo $this->Html->link(
                    'Retour estimation',
                    '../Estimations#menu',
                    array('class' => 'boutonDevis')
                    );              
                echo '</div>';  
        }?>

Dons dans la <div class="estimation estimTotale"> tout s'affiche normalement (tout le système de calcul et dans le controller)

Dan mon PDF, impossible d'afficher $prix, $ fdp ou m^me $prixTotal.

Je sais pas si cela va t'aider, si tu as besoin d'autres infos, je suis là.

Coucou,
Au niveau de ton controller ca donne quoi?

Brr il me fait peur ton avatar...
Oula dans mon controller il y a du monde, cela devrait te faire peur. Dan ma fonction PDF par contre j'ai rien mis du tout (si tu as besoin je colle tout mon code du controller, mais je ne suis pas sur que cela soit utilie)

public function pdf() {

}

J'ai voulu passer ma variable $prix comme je le fais pour les vue "classique" mais ça ne fonctionne pas. Ce qui me pârait tout à fait normal..

public function pdf() {
      $this->set('prix', $prix);  
}

Bin en théorie il faut faire comme une vue classic oui passer tes variable a ta vue
Perso chez moi ca fonctionne en passant mes variables a ma vue

Par contre sans passser tes variables a ta vue, je ne voie pas comment cela pourrait fonctionner en affichant ta vue au format html

Alors j'ai resséré le problèmes grâcà tes remarques. En effet si je passes mes variables comme çà, ca marche

public function pdf() {
      $prix = 12;
      $this->set('prix', $prix);
}

Dans cette exemple j'ai bien 12 qui s'affiche sur mon PDF.
Par contre si j'y intègre mon système de calcul, $prix devient undefined

public function pdf() {
    if (isset ($this->data'estimationChoice'])){
    if (($this->data'estimationChoice']) == 'devistransfert-s8'){   
        $priceLigne1 = $this->Estimation->findAllByTitleAndDescription($title,'15');
        $priceLigne2 = $this->Estimation->findAllByTitleAndDescription($title,'30');
        $priceLigne3 = $this->Estimation->findAllByTitleAndDescription($title,'60');
        $priceLigne4 = $this->Estimation->findAllByTitleAndDescription($title,'90');
            $priceLigne5 = $this->Estimation->findAllByTitleAndDescription($title,'120');
        $priceLigne6 = $this->Estimation->findAllByTitleAndDescription($title,'180');
        $priceLigne7 = $this->Estimation->findAllByTitleAndDescription($title,'220');
        $priceLigne8 = $this->Estimation->findAllByTitleAndDescription($title,'260');

    if(isset($this->request->data'qteLigne1'])){
    $prix = array(
        '15m' => $this->request->data'qteLigne1'] * $priceLigne1[0]'Estimation']'prix'],
        '30m' => $this->request->data'qteLigne2'] * $priceLigne2[0]'Estimation']'prix'],
        '60m' => $this->request->data'qteLigne3'] * $priceLigne3[0]'Estimation']'prix'],
        '90m' => $this->request->data'qteLigne4'] * $priceLigne4[0]'Estimation']'prix'],
        '120m' => $this->request->data'qteLigne5'] * $priceLigne5[0]'Estimation']'prix'],
        '180m' => $this->request->data'qteLigne6'] * $priceLigne6[0]'Estimation']'prix']);
        $prix=array_sum($prix);
        $this->set('prix', $prix);
        }
    }
}
}

Vois tu une solution ?
Ou alors, comment puis-je récupérer la valeur de $prix de la fonction index pour l'attribuer à la fonction PDF ???

Merci encore

en mode html, sans parler de pdf, si tu fait un debug de $prix, il te retourne bien les bonnes informations ?
Si oui dans ta vue (toujours en html) tu arrive a faire le traitement voulu ?

HS: récupérer une variable d'une action dans une autre c'est anti MVC
Donc soit tu stock ta valeur dans une clé en session genre si t'es obligé de passer par l'action index avant de visualisé de pdf
Ou alors tu déplace ta gestion de ta variable dans une methode
genre

__getPrice() {
$price = .....;
return $price;
}

et tu utilise cette methode dans chaqu'une de tes action en faisant $this->__getPrice()

Dans ma vue qui est un élément je te rappele, c'est à dire dans le dossier view -> Elements -> estimation -> calculDevisFilm.ctp, toutes les variables apparaissent correctement à la validation de mon formulaire devis et le compte rendu est ok.

Voilà le debug de prix dans mon élement :

\app\View\Elements\estimation\calculDevisFilm.ctp (line 34)
(float) 222

Dans ta vue pdf.ctp donc tu inclu ton élément c'est bien ca?
T'as essayé de ne pas passer par un element voir ce que ca donne ?

Merci pour vos réponses

Fredix je vais tester de passer par une vue, bien que cela changera l'ensemble du projet au moins on verra si c'est du à l'élément.

Taskone, j ai entendu et vu souvent la class html2pdf sans jamais mis arrêter, peut être est ce le moment.

Je fais ces tests, peut être début de semaine prochaine, car la j 'ai un projet print à terminer et je n'aurais certainement pas le temps cuisiner.

Je vous tiens au courant rapidement

Merci sisi merci