Loading src/UnicaenPdf/Exporter/PdfExporter.php +101 −28 Original line number Diff line number Diff line Loading @@ -2,15 +2,18 @@ namespace UnicaenPdf\Exporter; use Mpdf\Mpdf as mPDF; use Laminas\View\Renderer\PhpRenderer; use Laminas\View\Resolver\TemplatePathStack; use LogicException; use Mpdf\Mpdf as mPDF; use RuntimeException; use Laminas\View\Renderer\PhpRenderer; /** * Classe utilitaire permettant de fabriquer un document PDF à partir * de code HTML. * * NB: bibliothèque mPDF requise (http://www.mpdf1.com/mpdf/). * * @author Unicaen */ class PdfExporter implements ExporterInterface Loading Loading @@ -61,6 +64,14 @@ class PdfExporter implements ExporterInterface * @var array */ private $scriptVars = []; /** * @var array */ private $footerVars = []; /** * @var array */ private $headerVars = []; /** * @var boolean */ Loading Loading @@ -128,6 +139,13 @@ class PdfExporter implements ExporterInterface */ private $logo; /** * Chemin absolu du répertoire contenant les scripts de vue par défaut. * * @var string */ protected $defaultScriptsDirPath = __DIR__ . '/scripts'; /** * Constructeur. * Loading @@ -150,6 +168,9 @@ class PdfExporter implements ExporterInterface $this->orientationPaysage = $orientationPaysage; $this->defaultFontSize = $defaultFontSize; $this->setHeaderScriptToDefault(); $this->setFooterScriptToDefault(); // $this->setLogo(file_get_contents(__DIR__ . "/../../../public/unicaen/app/img/logo-unicaen.png")); } Loading @@ -161,7 +182,7 @@ class PdfExporter implements ExporterInterface * @param string|null $oddOrEven 'O', 'E' ou null * @return self */ public function setHeaderScript(string $script = null, string $oddOrEven = null): self public function setHeaderScript(string $script = null, string $oddOrEven = null, array $scriptVars = []): self { if (!$script) { $this->headerScripts = []; Loading @@ -174,6 +195,36 @@ class PdfExporter implements ExporterInterface $this->headerScripts['O'] = $script; $this->headerScripts['E'] = $script; } if ($scriptVars) { $this->headerVars = $scriptVars; } return $this; } /** * Spécifie qu'aucun script ne soit utilisé pour les entêtes de pages. * Autrement dit, les pages du document PDF n'auront pas d'entête ! * * @return self */ public function setHeaderScriptToNone() { $this->headerScripts = array(); return $this; } /** * Restaure le script de vue par défaut pour les entêtes de pages (pages paires et impaires). * * @return self */ public function setHeaderScriptToDefault() { $this->headerScripts['O'] = 'header-odd.phtml'; $this->headerScripts['E'] = 'header-even.phtml'; return $this; } Loading Loading @@ -225,7 +276,7 @@ class PdfExporter implements ExporterInterface * @param string|null $oddOrEven 'O' (pages impaires seulement), 'E' (pages paires seulement) ou null (pages paires et impaires) * @return self */ public function setFooterScript(string $script = null, string $oddOrEven = null): self public function setFooterScript(string $script = null, string $oddOrEven = null, array $scriptVars =[]): self { if (!$script) { $this->footerScripts = []; Loading @@ -237,6 +288,36 @@ class PdfExporter implements ExporterInterface $this->footerScripts['O'] = $script; $this->footerScripts['E'] = $script; } if ($scriptVars) { $this->footerVars = $scriptVars; } return $this; } /** * Restaure le script de vue par défaut pour les pieds de pages (pages paires et impaires). * * @return self */ public function setFooterScriptToDefault() { $this->footerScripts['O'] = 'footer-odd.phtml'; $this->footerScripts['E'] = 'footer-even.phtml'; return $this; } /** * Spécifie qu'aucun script ne soit utilisé pour les pieds de pages. * Autrement dit, les pages du document PDF n'auront pas de pied de page ! * * @return self */ public function setFooterScriptToNone() { $this->footerScripts = array(); return $this; } Loading @@ -254,9 +335,10 @@ class PdfExporter implements ExporterInterface * PdfExporter::DESTINATION_STRING : * Return the document as a string. filename is ignored. * * @param string $destination Exemple : PdfExporter::self * @param string|null $memoryLimit * @param string $destination Exemple : PdfExporter::DESTINATION_BROWSER * @param string|null $memoryLimit Quantité de mémoire maximum utilisée (memory_limit PHP), ex: '256M' * @return string|null * * @throws \Mpdf\MpdfException */ public function export(string $filename = null, string $destination = PdfExporter::DESTINATION_BROWSER, string $memoryLimit = null) Loading Loading @@ -392,29 +474,22 @@ class PdfExporter implements ExporterInterface { $headerOdd = $headerEven = null; $scriptVars = array( $scriptVars = [ 'headerTitle' => $this->headerTitle, 'headerSubtitle' => $this->headerSubtitle, 'logo' => $this->logo); $scriptVars = array_merge($scriptVars, current($this->scriptVars) ?: []); 'logo' => $this->logo, ]; $scriptVars = array_merge($this->headerVars, $scriptVars); // le logo doit être passé ainsi pour pouvoir être référencé dans la balise <img> sous la forme "var:logo" $this->getMpdf()->imageVars['logo'] = $this->logo; if (isset($this->headerScripts['O'])) { $headerOdd = $this->getRenderer()->render($this->headerScripts['O'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/header-odd.phtml')) { ob_start(); include $filepath; $headerOdd = ob_get_clean(); } if (isset($this->headerScripts['E'])) { $headerEven = $this->getRenderer()->render($this->headerScripts['E'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/header-even.phtml')) { ob_start(); include $filepath; $headerEven = ob_get_clean(); } if ($headerOdd) { Loading Loading @@ -482,24 +557,17 @@ class PdfExporter implements ExporterInterface { $footerOdd = $footerEven = null; $scriptVars = array( 'footerTitle' => $this->footerTitle); $scriptVars = array_merge($scriptVars, current($this->scriptVars) ?: []); $scriptVars = [ 'footerTitle' => $this->footerTitle, ]; $scriptVars = array_merge($this->footerVars, $scriptVars); if (isset($this->footerScripts['O'])) { $footerOdd = $this->getRenderer()->render($this->footerScripts['O'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/footer-odd.phtml')) { ob_start(); include $filepath; $footerOdd = ob_get_clean(); } if (isset($this->footerScripts['E'])) { $footerEven = $this->getRenderer()->render($this->footerScripts['E'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/footer-even.phtml')) { ob_start(); include $filepath; $footerEven = ob_get_clean(); } if ($footerOdd) { Loading @@ -521,6 +589,11 @@ class PdfExporter implements ExporterInterface public function setRenderer(PhpRenderer $renderer): self { $this->renderer = $renderer; $this->renderer->resolver()->attach(new TemplatePathStack(['script_paths' => [ $this->defaultScriptsDirPath, ]])); return $this; } Loading Loading
src/UnicaenPdf/Exporter/PdfExporter.php +101 −28 Original line number Diff line number Diff line Loading @@ -2,15 +2,18 @@ namespace UnicaenPdf\Exporter; use Mpdf\Mpdf as mPDF; use Laminas\View\Renderer\PhpRenderer; use Laminas\View\Resolver\TemplatePathStack; use LogicException; use Mpdf\Mpdf as mPDF; use RuntimeException; use Laminas\View\Renderer\PhpRenderer; /** * Classe utilitaire permettant de fabriquer un document PDF à partir * de code HTML. * * NB: bibliothèque mPDF requise (http://www.mpdf1.com/mpdf/). * * @author Unicaen */ class PdfExporter implements ExporterInterface Loading Loading @@ -61,6 +64,14 @@ class PdfExporter implements ExporterInterface * @var array */ private $scriptVars = []; /** * @var array */ private $footerVars = []; /** * @var array */ private $headerVars = []; /** * @var boolean */ Loading Loading @@ -128,6 +139,13 @@ class PdfExporter implements ExporterInterface */ private $logo; /** * Chemin absolu du répertoire contenant les scripts de vue par défaut. * * @var string */ protected $defaultScriptsDirPath = __DIR__ . '/scripts'; /** * Constructeur. * Loading @@ -150,6 +168,9 @@ class PdfExporter implements ExporterInterface $this->orientationPaysage = $orientationPaysage; $this->defaultFontSize = $defaultFontSize; $this->setHeaderScriptToDefault(); $this->setFooterScriptToDefault(); // $this->setLogo(file_get_contents(__DIR__ . "/../../../public/unicaen/app/img/logo-unicaen.png")); } Loading @@ -161,7 +182,7 @@ class PdfExporter implements ExporterInterface * @param string|null $oddOrEven 'O', 'E' ou null * @return self */ public function setHeaderScript(string $script = null, string $oddOrEven = null): self public function setHeaderScript(string $script = null, string $oddOrEven = null, array $scriptVars = []): self { if (!$script) { $this->headerScripts = []; Loading @@ -174,6 +195,36 @@ class PdfExporter implements ExporterInterface $this->headerScripts['O'] = $script; $this->headerScripts['E'] = $script; } if ($scriptVars) { $this->headerVars = $scriptVars; } return $this; } /** * Spécifie qu'aucun script ne soit utilisé pour les entêtes de pages. * Autrement dit, les pages du document PDF n'auront pas d'entête ! * * @return self */ public function setHeaderScriptToNone() { $this->headerScripts = array(); return $this; } /** * Restaure le script de vue par défaut pour les entêtes de pages (pages paires et impaires). * * @return self */ public function setHeaderScriptToDefault() { $this->headerScripts['O'] = 'header-odd.phtml'; $this->headerScripts['E'] = 'header-even.phtml'; return $this; } Loading Loading @@ -225,7 +276,7 @@ class PdfExporter implements ExporterInterface * @param string|null $oddOrEven 'O' (pages impaires seulement), 'E' (pages paires seulement) ou null (pages paires et impaires) * @return self */ public function setFooterScript(string $script = null, string $oddOrEven = null): self public function setFooterScript(string $script = null, string $oddOrEven = null, array $scriptVars =[]): self { if (!$script) { $this->footerScripts = []; Loading @@ -237,6 +288,36 @@ class PdfExporter implements ExporterInterface $this->footerScripts['O'] = $script; $this->footerScripts['E'] = $script; } if ($scriptVars) { $this->footerVars = $scriptVars; } return $this; } /** * Restaure le script de vue par défaut pour les pieds de pages (pages paires et impaires). * * @return self */ public function setFooterScriptToDefault() { $this->footerScripts['O'] = 'footer-odd.phtml'; $this->footerScripts['E'] = 'footer-even.phtml'; return $this; } /** * Spécifie qu'aucun script ne soit utilisé pour les pieds de pages. * Autrement dit, les pages du document PDF n'auront pas de pied de page ! * * @return self */ public function setFooterScriptToNone() { $this->footerScripts = array(); return $this; } Loading @@ -254,9 +335,10 @@ class PdfExporter implements ExporterInterface * PdfExporter::DESTINATION_STRING : * Return the document as a string. filename is ignored. * * @param string $destination Exemple : PdfExporter::self * @param string|null $memoryLimit * @param string $destination Exemple : PdfExporter::DESTINATION_BROWSER * @param string|null $memoryLimit Quantité de mémoire maximum utilisée (memory_limit PHP), ex: '256M' * @return string|null * * @throws \Mpdf\MpdfException */ public function export(string $filename = null, string $destination = PdfExporter::DESTINATION_BROWSER, string $memoryLimit = null) Loading Loading @@ -392,29 +474,22 @@ class PdfExporter implements ExporterInterface { $headerOdd = $headerEven = null; $scriptVars = array( $scriptVars = [ 'headerTitle' => $this->headerTitle, 'headerSubtitle' => $this->headerSubtitle, 'logo' => $this->logo); $scriptVars = array_merge($scriptVars, current($this->scriptVars) ?: []); 'logo' => $this->logo, ]; $scriptVars = array_merge($this->headerVars, $scriptVars); // le logo doit être passé ainsi pour pouvoir être référencé dans la balise <img> sous la forme "var:logo" $this->getMpdf()->imageVars['logo'] = $this->logo; if (isset($this->headerScripts['O'])) { $headerOdd = $this->getRenderer()->render($this->headerScripts['O'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/header-odd.phtml')) { ob_start(); include $filepath; $headerOdd = ob_get_clean(); } if (isset($this->headerScripts['E'])) { $headerEven = $this->getRenderer()->render($this->headerScripts['E'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/header-even.phtml')) { ob_start(); include $filepath; $headerEven = ob_get_clean(); } if ($headerOdd) { Loading Loading @@ -482,24 +557,17 @@ class PdfExporter implements ExporterInterface { $footerOdd = $footerEven = null; $scriptVars = array( 'footerTitle' => $this->footerTitle); $scriptVars = array_merge($scriptVars, current($this->scriptVars) ?: []); $scriptVars = [ 'footerTitle' => $this->footerTitle, ]; $scriptVars = array_merge($this->footerVars, $scriptVars); if (isset($this->footerScripts['O'])) { $footerOdd = $this->getRenderer()->render($this->footerScripts['O'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/footer-odd.phtml')) { ob_start(); include $filepath; $footerOdd = ob_get_clean(); } if (isset($this->footerScripts['E'])) { $footerEven = $this->getRenderer()->render($this->footerScripts['E'], $scriptVars); } elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/footer-even.phtml')) { ob_start(); include $filepath; $footerEven = ob_get_clean(); } if ($footerOdd) { Loading @@ -521,6 +589,11 @@ class PdfExporter implements ExporterInterface public function setRenderer(PhpRenderer $renderer): self { $this->renderer = $renderer; $this->renderer->resolver()->attach(new TemplatePathStack(['script_paths' => [ $this->defaultScriptsDirPath, ]])); return $this; } Loading