Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-01-2011 15:21:45

darmamedia
Nouveau membre
Date d'inscription: 18-08-2010
Messages: 5

Probleme affichage PDF dans MVC avec Zend_PDF avec Heplers

Bonjour a tous et bonne année !

Cela fait plusieurs jours que je suis sur un problème,  je cherche a générer une page PDF tout simplement mais en respectant mon architecture MVC avec Extjs.

Pour générer un PDF j'ai créé un helpers comme dans ce tuto (http://wiip.fr/content/zend-framework-u … navigateur) qui est une aide d'action pour envoyer un PDF au navigateur. En suivant le tuto j'ai créé une action dans mon controlleur "pdfAction" qui à pour but de générer un pdf avec l'aide de l'helpers. 

Mon controlleur client qui contient la fonction pdfAction

Code:

class ClientController extends Zend_Controller_Action {
     
  
function indexAction() {
    
}


public function pdfAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout->disableLayout();

$id_client ='test';    

// Création d'un PDF et d'une page A4
$pdf = new Zend_Pdf();        
$pdfPage = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $pdfPage;
$pdfPage->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 20); 
// On dessine quelque chose dans le PDF
$pdfPage->drawText($id_client, 100, 510); 
// On récupère le contenu du PDF
$data = $pdf->render();
// Envoi du PDF au navigateur
$this->_helper->sendPdf($data);

} etc...

Mon Helpers

Code:

<?php

class Zend_Controller_ActionHelpers_SendPdf extends Zend_Controller_Action_Helper_Abstract
{
    public function direct($data, $contentDisposition = 'inline', $filename = null)
    {
        if (!isset($filename)) $filename = uniqid();
 
        $this->getResponse()->setHeader('Content-Type', 'application/x-pdf');
        switch ($contentDisposition) {
            case 'inline':
                $this->getResponse()->setHeader('Content-Disposition', 'inline');
                break;
            case 'attachment':
                $this->getResponse()->setHeader('Content-Disposition', "attachment; filename=\"$filename.pdf\"");
                break;
            default:
                throw new Exception("Unknown Content-Disposition ($contentDisposition)");
        }

        $this->getResponse()->setHeader('Content-Length', strlen($data))
                            ->setHeader('Cache-Control', 'private, max-age=0, must-revalidate')
                            ->setHeader('Pragma', 'public')
                            ->setBody($data);                              

    }
}

Mon problème est que ma fonction ne génère pas de PDF lorsque celle-ci est appelé via une requete AJAX, par contre si  je déplace mon  code pdfAction dans le constructeur, un pdf à l'ouverture de la page est bien généré et affiché. Je pense que c'est un problème de réponse de ma requette AJAX, un problème de format de réponse.. je ne sais pas, je suis perdu...

J'utilise Extjs comme interface cliente, du javascript, sur l'évenement de mon bouton pour générer le pdf, je fais une requête en spécifiant dans l'url 'client/pdf' mon controlleur et l'action a exécuté, mais cela ne me génère pas le PDF, le code du pdf m'est retourné en réponse a ma requête AJAX...

Code:

var menu_exporterpdf= new Ext.Button({
xtype: 'tbbutton',
iconCls:'export', 
text: 'Imprimer',
    menu: [{
    iconCls:'print', 
    text: 'exporter pdf',
    handler:function(){
                rowsSelected = grid.getSelectionModel().getSelections();
                if(grid.selModel.getCount() == 1)
                {                                  
                id_client  = rowsSelected[0].get('id_client');                          
                                
                Ext.Ajax.request({   
                    waitMsg: 'Please wait...',
                          url: 'client/pdf'              
                });

Je suis perdu, je ne sais vraiment pas comment faire, je suis bloqué, avez vous des idées les amis ??

Hors ligne

 

#2 06-01-2011 12:09:56

darmamedia
Nouveau membre
Date d'inscription: 18-08-2010
Messages: 5

Re: Probleme affichage PDF dans MVC avec Zend_PDF avec Heplers

J'ai réussi a résoudre mon problème, en fait une requête Ajax demande forcement en retour une réponse, dans mon cas c'était le problème car je ne voulais pas de réponse en ajax pour que le navigateur puisse générer mon pdf et me le proposer en téléchargement, ma solution est simple, j'appelle maintenant ma fonction Pdfaction dans mon javascript comme ceci : window.location = 'client/pdf?id='.concat(id_client); et cela fonctionne j'arrive a récupérer mon parametre, puis faire ma requete puis générer le PDF.

Je ne sais pas si cette solution est optimale mais elle fonctionne, si vous avez d'autres idées je suis preneur !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages