Archives mensuelles : juin 2014

ZF2 et utilisation de Tcpdf

Pour utiliser Tcpdf sous ZF2, j'ai créé un module basé sur le principe suivant :

  • La méthode qui souhaitera créer un pdf lancera un événement contenant tous les paramètres et toutes les données permettant de créer le pdf.
  • un écouteur (listener) sera chargé de surveillé la présence de ces événements et déclenchera la création

Voici le schéma d'organisation de mon module :

DafapTcpdf

Schéma d'organisation du module

La configuration de Tcpdf est basée sur des constantes. Elle se fera dans le fichier config/autoload/tcpdf-config.global.php de l'application.

Voici ci-dessous un exemple d'utilisation de mon module dans un controller. Il s'agit de créer un listing à partir d'une sélection dans une table de tarifs. La sélection est définie dans l'action tarifListeAction() à partir d'un formulaire criteres_form et ses paramètres sont conservés en session.

/**
* envoie un evenement contenant les paramètres de création d'un document pdf
* (le listener DafapTcpdf\Listener\PdfListener lancera la création du pdf)
* Il n'y a pas de vue associée à cette action puisque la response html est créée par \TCPDF
*/
public function tarifPdfAction()
{
  $currentPage = $this->params('page', 1);
  $criteres_form = new CriteresForm('tarifs');
  $criteres_obj = new ObjectDataCriteres($criteres_form->getElementNames());
  $session = new SessionContainer(str_replace('pdf', 'liste', $this->getSessionNamespace()));
  if (isset($session->criteres)) {
      $criteres_obj->exchangeArray($session->criteres);
  }
  $tableTarifs = $this->getServiceLocator()->get('Sbm\Db\Table\Tarifs');
  $data = array();
  foreach ($tableTarifs->fetchAll($criteres_obj->getWhere(), 'nom') as $row) {
    $data[] = array(
        $row->nom,
        $row->montant,
        $row->rythme,
        $row->grille,
        $row->mode
    );
  }
  $call_pdf = $this->getServiceLocator()->get('RenderPdfService');
  $call_pdf->setData($data)
  ->setHead(array('Nom', 'Montant', 'Rytme', 'Grille', 'Mode'))
  ->setPdfConfig( array(
      'title' => 'Liste des tarifs',
      'header' => array(
      'title' => 'Liste des tarifs',
      'string' => 'éditée par School Bus Manager le ' . date('d/m/Y à H:i')
  )))
  ->setTableConfig(array(
      'tbody' => array(
          'cell' => array(
              'txt_precision' => array(0, 2, 0, 0, 0)
      )),
      'column_widths' => array(64, 30, 30, 20, 36)
  ))
  ->renderPdf();
  $this->flashMessenger()->addSuccessMessage("Création d'un pdf.");
}

DafapTcpdf-2

 

Cliquez sur cette image pour voir le résultat.

 

 

Ce module est disponible sur github/dafap.