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 :

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.");
}
Cliquez sur cette image pour voir le résultat.
Ce module est disponible sur github/dafap.
