{"id":149,"date":"2014-06-04T18:09:13","date_gmt":"2014-06-04T18:09:13","guid":{"rendered":"https:\/\/www.dafap.fr\/blog\/?p=149"},"modified":"2016-05-02T12:35:43","modified_gmt":"2016-05-02T12:35:43","slug":"zf2-et-utilisation-de-tcpdf","status":"publish","type":"post","link":"https:\/\/www.dafap.fr\/blog\/developpement-php\/zf2-et-utilisation-de-tcpdf","title":{"rendered":"ZF2 et utilisation de Tcpdf"},"content":{"rendered":"<p><strong>Pour utiliser Tcpdf sous ZF2, j'ai cr\u00e9\u00e9 un module bas\u00e9 sur le principe suivant :<\/strong><\/p>\n<ul>\n<li><strong>La m\u00e9thode qui souhaitera cr\u00e9er\u00a0un pdf lancera un \u00e9v\u00e9nement contenant tous les param\u00e8tres et toutes les donn\u00e9es permettant de cr\u00e9er le pdf.<\/strong><\/li>\n<li><strong>un \u00e9couteur (listener) sera charg\u00e9 de surveill\u00e9 la pr\u00e9sence de ces \u00e9v\u00e9nements et d\u00e9clenchera la cr\u00e9ation<\/strong><\/li>\n<\/ul>\n<p>Voici le sch\u00e9ma d'organisation de mon module :<\/p>\n<div id=\"attachment_150\" style=\"width: 160px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-150\" class=\"wp-image-150 size-thumbnail colorbox-149\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/06\/DafapTcpdf-150x150.png\" alt=\"DafapTcpdf\" width=\"150\" height=\"150\" \/><p id=\"caption-attachment-150\" class=\"wp-caption-text\">Sch\u00e9ma d'organisation du module<\/p><\/div>\n<p>La configuration de Tcpdf est bas\u00e9e sur des constantes. Elle se fera dans le fichier <em>config\/autoload\/tcpdf-config.global.php<\/em> de l'application.<\/p>\n<p>Voici ci-dessous un exemple d'utilisation de mon module dans un <em>controller<\/em>. Il s'agit de cr\u00e9er un listing \u00e0 partir d'une s\u00e9lection dans une table de tarifs. La s\u00e9lection est d\u00e9finie dans l'action <em>tarifListeAction()<\/em> \u00e0 partir d'un formulaire <em>criteres_form<\/em> et ses param\u00e8tres sont conserv\u00e9s en session.<\/p>\n<pre>\/**\r\n* envoie un evenement contenant les param\u00e8tres de cr\u00e9ation d'un document pdf\r\n* (le listener DafapTcpdf\\Listener\\PdfListener lancera la cr\u00e9ation du pdf)\r\n* Il n'y a pas de vue associ\u00e9e \u00e0 cette action puisque la response html est cr\u00e9\u00e9e par \\TCPDF\r\n*\/\r\npublic function tarifPdfAction()\r\n{\r\n  $currentPage = $this-&gt;params('page', 1);\r\n  $criteres_form = new CriteresForm('tarifs');\r\n  $criteres_obj = new ObjectDataCriteres($criteres_form-&gt;getElementNames());\r\n  $session = new SessionContainer(str_replace('pdf', 'liste', $this-&gt;getSessionNamespace()));\r\n  if (isset($session-&gt;criteres)) {\r\n      $criteres_obj-&gt;exchangeArray($session-&gt;criteres);\r\n  }\r\n  $tableTarifs = $this-&gt;getServiceLocator()-&gt;get('Sbm\\Db\\Table\\Tarifs');\r\n  $data = array();\r\n  foreach ($tableTarifs-&gt;fetchAll($criteres_obj-&gt;getWhere(), 'nom') as $row) {\r\n    $data[] = array(\r\n        $row-&gt;nom,\r\n        $row-&gt;montant,\r\n        $row-&gt;rythme,\r\n        $row-&gt;grille,\r\n        $row-&gt;mode\r\n    );\r\n  }\r\n  $call_pdf = $this-&gt;getServiceLocator()-&gt;get('RenderPdfService');\r\n  $call_pdf-&gt;setData($data)\r\n  -&gt;setHead(array('Nom', 'Montant', 'Rytme', 'Grille', 'Mode'))\r\n  -&gt;setPdfConfig( array(\r\n      'title' =&gt; 'Liste des tarifs',\r\n      'header' =&gt; array(\r\n      'title' =&gt; 'Liste des tarifs',\r\n      'string' =&gt; '\u00e9dit\u00e9e par School Bus Manager le ' . date('d\/m\/Y \u00e0 H:i')\r\n  )))\r\n  -&gt;setTableConfig(array(\r\n      'tbody' =&gt; array(\r\n          'cell' =&gt; array(\r\n              'txt_precision' =&gt; array(0, 2, 0, 0, 0)\r\n      )),\r\n      'column_widths' =&gt; array(64, 30, 30, 20, 36)\r\n  ))\r\n  -&gt;renderPdf();\r\n  $this-&gt;flashMessenger()-&gt;addSuccessMessage(\"Cr\u00e9ation d'un pdf.\");\r\n}\r\n<\/pre>\n<p><a href=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/06\/DafapTcpdf-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-155 colorbox-149\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/06\/DafapTcpdf-2-150x150.png\" alt=\"DafapTcpdf-2\" width=\"150\" height=\"150\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Cliquez sur cette image pour voir le r\u00e9sultat.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Ce module est disponible sur github\/dafap.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour utiliser Tcpdf sous ZF2, j&rsquo;ai cr\u00e9\u00e9 un module bas\u00e9 sur le principe suivant : La m\u00e9thode qui souhaitera cr\u00e9er\u00a0un pdf lancera un \u00e9v\u00e9nement contenant tous les param\u00e8tres et toutes les donn\u00e9es permettant de cr\u00e9er le pdf. un \u00e9couteur (listener) sera charg\u00e9 de surveill\u00e9 la pr\u00e9sence de ces \u00e9v\u00e9nements et d\u00e9clenchera la cr\u00e9ation Voici le [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,15],"tags":[],"class_list":["post-149","post","type-post","status-publish","format-standard","hentry","category-developpement-php","category-zendframework2"],"_links":{"self":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":9,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions"}],"predecessor-version":[{"id":394,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions\/394"}],"wp:attachment":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/media?parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/categories?post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/tags?post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}