From 262c940ad5e845aa14196fc32dc8231f5f7dafb4 Mon Sep 17 00:00:00 2001 From: ruff Date: Sun, 1 Oct 2023 11:33:24 +0200 Subject: [PATCH] Added callback method when instanciating the internal PDF-Engine --- src/ZugferdVisualizer.php | 38 ++++++++++++++++++++++++------ tests/testcases/VisualizerText.php | 36 ++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/src/ZugferdVisualizer.php b/src/ZugferdVisualizer.php index cf4b7de..a1499e9 100644 --- a/src/ZugferdVisualizer.php +++ b/src/ZugferdVisualizer.php @@ -83,6 +83,14 @@ class ZugferdVisualizer */ protected $pdfPaperSize = "A4-P"; + /** + * A callbacl which is called when MPDF is instanciated. Here + * is the possibillity to set custom options for MPDF + * + * @var callable|null + */ + protected $mpdfInitCallback = null; + /** * Constructor * @@ -171,6 +179,18 @@ public function setPdfPaperSize(string $pdfPaperSize): void } } + /** + * Set the callback which is called after the internal instance + * of the PDF-Engine is instanciated + * + * @param callable $callback + * @return void + */ + public function setPdfInitCallback(callable $callback): void + { + $this->mpdfInitCallback = $callback; + } + /** * Renders the markup (HTML) * @@ -273,16 +293,20 @@ private function instanciatePdfEngine(): Mpdf $pdf = new Mpdf( [ - 'tempDir' => sys_get_temp_dir() . '/mpdf', - 'fontDir' => array_merge($defaultFontDirs, $this->pdfFontDirectories), - 'fontdata' => $defaultFontData + $this->pdfFontData, - 'default_font' => $this->pdfFontDefault, - 'format' => $this->pdfPaperSize, - 'PDFA' => true, - 'PDFAauto' => true, + 'tempDir' => sys_get_temp_dir() . '/mpdf', + 'fontDir' => array_merge($defaultFontDirs, $this->pdfFontDirectories), + 'fontdata' => $defaultFontData + $this->pdfFontData, + 'default_font' => $this->pdfFontDefault, + 'format' => $this->pdfPaperSize, + 'PDFA' => true, + 'PDFAauto' => true, ] ); + if (is_callable($this->mpdfInitCallback)) { + call_user_func($this->mpdfInitCallback, $pdf, $this); + } + return $pdf; } } diff --git a/tests/testcases/VisualizerText.php b/tests/testcases/VisualizerText.php index 38c98ab..f69af69 100644 --- a/tests/testcases/VisualizerText.php +++ b/tests/testcases/VisualizerText.php @@ -8,6 +8,7 @@ use horstoeko\zugferdvisualizer\renderer\ZugferdVisualizerDefaultRenderer; use horstoeko\zugferdvisualizer\tests\TestCase; use horstoeko\zugferdvisualizer\ZugferdVisualizer; +use Mpdf\Mpdf; class VisualizerText extends TestCase { @@ -316,4 +317,39 @@ public function testRenderPdfFileWithDefaultTemplate(): void $this->assertTrue(file_exists($toFilename)); } + + /** + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::setPdfInitCallback + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::renderMarkup + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::renderPdf + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::renderPdfFile + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::testMustUseDefaultRenderer + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::testTemplateIsSet + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::testTemplateExists + * @covers \horstoeko\zugferdvisualizer\ZugferdVisualizer::instanciatePdfEngine + * @covers \horstoeko\zugferdvisualizer\renderer\ZugferdVisualizerDefaultRenderer::render + */ + public function testPdfInitCallback(): void + { + $oldPdfVersion = ""; + $newPdfVersion = ""; + + $visualizer = new ZugferdVisualizer(static::$document); + $visualizer->setDefaultTemplate(); + $visualizer->setPdfInitCallback(function (Mpdf $mpdf, ZugferdVisualizer $visualizer) use (&$oldPdfVersion, &$newPdfVersion) { + $oldPdfVersion = $mpdf->pdf_version; + $mpdf->pdf_version = "1.7"; + $newPdfVersion = $mpdf->pdf_version; + }); + + $toFilename = dirname(__FILE__) . "/invoice.pdf"; + + $this->registerFileForTestMethodTeardown($toFilename); + + $visualizer->renderPdfFile($toFilename); + + $this->assertTrue(file_exists($toFilename)); + $this->assertEquals("1.4", $oldPdfVersion); + $this->assertEquals("1.7", $newPdfVersion); + } }