diff --git a/app/Services/PdfMaker/PdfMaker.php b/app/Services/PdfMaker/PdfMaker.php index 6118c6854685..7e0e793fcbcd 100644 --- a/app/Services/PdfMaker/PdfMaker.php +++ b/app/Services/PdfMaker/PdfMaker.php @@ -62,13 +62,13 @@ class PdfMaker $this->updateVariables($this->data['variables']); } + $this->processOptions(); + return $this; } public function getCompiledHTML($final = false) { - $this->processOptions(); - if ($final) { $html = $this->document->saveXML(); diff --git a/app/Services/PdfMaker/PdfMakerUtilities.php b/app/Services/PdfMaker/PdfMakerUtilities.php index f0f16e09a180..dd35daf90b51 100644 --- a/app/Services/PdfMaker/PdfMakerUtilities.php +++ b/app/Services/PdfMaker/PdfMakerUtilities.php @@ -13,6 +13,7 @@ namespace App\Services\PdfMaker; use DOMDocument; +use DOMDomError; use DOMXPath; trait PdfMakerUtilities @@ -155,14 +156,27 @@ trait PdfMakerUtilities public function processOptions() { - if (isset($this->options['print_css']) && $this->options['print_css']) { + if (isset($this->options['repeat_header_and_footer']) && $this->options['repeat_header_and_footer']) { $this->insertPrintCSS(); + $this->wrapIntoTable(); } } public function insertPrintCSS() { - $css = '.page-header,.page-header-space{height:100px}.page-footer,.page-footer-space{height:50px}.page-footer{position:fixed;bottom:0;width:100%;border-top:1px solid #000;background:#ff0}.page-header{position:fixed;top:0;width:100%;border-bottom:1px solid #000;background:#ff0}.page{page-break-after:always}@page{margin:20mm}@media print{thead{display:table-header-group}tfoot{display:table-footer-group}button{display:none}body{margin:0}}'; + $css = <<document->createTextNode($css); @@ -180,4 +194,67 @@ trait PdfMakerUtilities return $head->appendChild($style_node); } } + + public function wrapIntoTable() + { + $markup = << + + + + + + + + + + + + + + + + + + + + + + + EOT; + + $document = new DOMDocument(); + $document->loadHTML($markup); + + $table = $document->getElementById('page-container'); + + $this->document->getElementsByTagName('body') + ->item(0) + ->appendChild($this->document->importNode($table, true)); + + foreach ($this->data['template'] as $element) { + if ($element['id'] == 'header' || $element['id'] == 'footer') { + continue; + } + + $node = $this->document->getElementById($element['id']); + $node->parentNode->removeChild($node); + + $this->document->getElementById('repeat-content')->appendChild($node); + } + + if ($header = $this->document->getElementById('header')) { + $header = $this->document->getElementById('header'); + $header->parentNode->removeChild($header); + + $this->document->getElementById('repeat-header')->appendChild($header); + } + + if ($footer = $this->document->getElementById('footer')) { + $footer = $this->document->getElementById('footer'); + $footer->parentNode->removeChild($footer); + + $this->document->getElementById('repeat-footer')->appendChild($footer); + } + } } diff --git a/tests/Feature/PdfMaker/PdfMakerTest.php b/tests/Feature/PdfMaker/PdfMakerTest.php index 09f30e16ce6f..a0bff13208dc 100644 --- a/tests/Feature/PdfMaker/PdfMakerTest.php +++ b/tests/Feature/PdfMaker/PdfMakerTest.php @@ -361,18 +361,21 @@ class PdfMakerTest extends TestCase { $design = new ExampleDesign(); - $html = $design - ->document() - ->getSectionHTML('product-table'); - $state = [ - 'template' => [], + 'template' => [ + 'product-table' => [ + 'id' => 'product-table', + 'elements' => [ + ['element' => 'p', 'content' => 'Example paragraph'], + ], + ], + ], 'variables' => [ 'labels' => [], 'values' => [], ], 'options' => [ - 'print_css' => true, + 'repeat_header_and_footer' => true, ], ]; @@ -382,8 +385,6 @@ class PdfMakerTest extends TestCase ->design(ExampleDesign::class) ->build(); - exec('echo "" > storage/logs/laravel.log'); - info($maker->getCompiledHTML(true)); } } diff --git a/tests/Feature/PdfMaker/example-design.html b/tests/Feature/PdfMaker/example-design.html index b2c0c81a2b06..305f12a1762f 100644 --- a/tests/Feature/PdfMaker/example-design.html +++ b/tests/Feature/PdfMaker/example-design.html @@ -2,6 +2,7 @@ - +
+ \ No newline at end of file