From af49888bac2630e72ed8affcf6c811a436d83c1c Mon Sep 17 00:00:00 2001 From: Severin J Date: Tue, 17 May 2022 10:55:48 +0200 Subject: [PATCH 01/27] Add composer phpunit. --- composer.json | 3 +- composer.lock | 176 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 177 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 28de55fe..b2970a08 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,8 @@ "symfony/intl": "^4.4|^5.0|^6.0", "kmukku/php-iso11649": "^1.5", "endroid/qr-code": "^4.4.4", - "symfony/polyfill-intl-icu": "^1.23" + "symfony/polyfill-intl-icu": "^1.23", + "phpoffice/phpword": "^0.18.3" }, "require-dev": { "phpunit/phpunit": "^9.0", diff --git a/composer.lock b/composer.lock index 1579179b..2036e73a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "db4e1c26dc2515a0d07f5bd46544073b", + "content-hash": "acfe11dccb6331a818d4cf4e2581e74f", "packages": [ { "name": "bacon/bacon-qr-code", @@ -227,6 +227,180 @@ }, "time": "2020-04-21T13:01:17+00:00" }, + { + "name": "laminas/laminas-escaper", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "58af67282db37d24e584a837a94ee55b9c7552be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be", + "reference": "58af67282db37d24e584a837a94ee55b9c7552be", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-mbstring": "*", + "php": "^7.4 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-escaper": "*" + }, + "require-dev": { + "infection/infection": "^0.26.6", + "laminas/laminas-coding-standard": "~2.3.0", + "maglnet/composer-require-checker": "^3.8.0", + "phpunit/phpunit": "^9.5.18", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.22.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-03-08T20:15:36+00:00" + }, + { + "name": "phpoffice/phpword", + "version": "0.18.3", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PHPWord.git", + "reference": "be0190cd5d8f95b4be08d5853b107aa4e352759a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/be0190cd5d8f95b4be08d5853b107aa4e352759a", + "reference": "be0190cd5d8f95b4be08d5853b107aa4e352759a", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "laminas/laminas-escaper": "^2.2", + "php": "^5.3.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "dompdf/dompdf": "0.8.* || 1.0.*", + "ext-gd": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^2.2", + "mpdf/mpdf": "5.7.4 || 6.* || 7.* || 8.*", + "php-coveralls/php-coveralls": "1.1.0 || ^2.0", + "phploc/phploc": "2.* || 3.* || 4.* || 5.* || 6.* || 7.*", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.36 || ^7.0", + "squizlabs/php_codesniffer": "^2.9 || ^3.5", + "tecnickcom/tcpdf": "6.*" + }, + "suggest": { + "dompdf/dompdf": "Allows writing PDF", + "ext-gd2": "Allows adding images", + "ext-xmlwriter": "Allows writing OOXML and ODF", + "ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template", + "ext-zip": "Allows writing OOXML and ODF" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.19-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOffice\\PhpWord\\": "src/PhpWord" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Mark Baker" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com", + "homepage": "http://gabrielbull.com/" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net/blog/" + }, + { + "name": "Ivan Lanin", + "homepage": "http://ivan.lanin.org" + }, + { + "name": "Roman Syroeshko", + "homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/" + }, + { + "name": "Antoine de Troostembergh" + } + ], + "description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)", + "homepage": "http://phpoffice.github.io", + "keywords": [ + "ISO IEC 29500", + "OOXML", + "Office Open XML", + "OpenDocument", + "OpenXML", + "PhpOffice", + "PhpWord", + "Rich Text Format", + "WordprocessingML", + "doc", + "docx", + "html", + "odf", + "odt", + "office", + "pdf", + "php", + "reader", + "rtf", + "template", + "template processor", + "word", + "writer" + ], + "support": { + "issues": "https://github.com/PHPOffice/PHPWord/issues", + "source": "https://github.com/PHPOffice/PHPWord/tree/0.18.3" + }, + "time": "2022-02-17T15:40:03+00:00" + }, { "name": "symfony/intl", "version": "v6.0.1", From 003b9835f4d51a691460fb57a474a60c110fdf14 Mon Sep 17 00:00:00 2001 From: Severin J Date: Tue, 17 May 2022 23:31:33 +0200 Subject: [PATCH 02/27] Add php word output with first example for qr-full-set.docx --- example/PhpWordOutput/phpword-example.php | 33 ++ src/Exception/InvalidPhpWordImageFormat.php | 7 + src/PaymentPart/Output/AbstractOutput.php | 5 +- src/PaymentPart/Output/Element/Amount.php | 24 ++ .../Output/PhpWordOutput/PhpWordOutput.php | 320 ++++++++++++++++++ .../Output/PhpWordOutput/Table/Bill.php | 48 +++ .../Output/PhpWordOutput/Table/Payment.php | 71 ++++ .../Output/PhpWordOutput/Table/Receipt.php | 47 +++ .../Table/Receipt/AmountSection.php | 33 ++ .../PhpWordOutput/PhpWordOutputTest.php | 85 +++++ 10 files changed, 671 insertions(+), 2 deletions(-) create mode 100644 example/PhpWordOutput/phpword-example.php create mode 100644 src/Exception/InvalidPhpWordImageFormat.php create mode 100644 src/PaymentPart/Output/Element/Amount.php create mode 100644 src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php create mode 100644 src/PaymentPart/Output/PhpWordOutput/Table/Bill.php create mode 100644 src/PaymentPart/Output/PhpWordOutput/Table/Payment.php create mode 100644 src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php create mode 100644 src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php create mode 100644 tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php diff --git a/example/PhpWordOutput/phpword-example.php b/example/PhpWordOutput/phpword-example.php new file mode 100644 index 00000000..a2782b11 --- /dev/null +++ b/example/PhpWordOutput/phpword-example.php @@ -0,0 +1,33 @@ +addSection([ + 'paperSize' => 'A4', + 'orientation' => 'portrait', + 'marginTop' => Converter::cmToTwip(2.0), + 'marginLeft' => Converter::cmToTwip(2.0), + 'marginBottom' => Converter::cmToTwip(2.0), + 'marginRight' => Converter::cmToTwip(2.0), + 'headerHeight' => Converter::cmToTwip(2.0), + 'footerHeight' => Converter::cmToTwip(2.0), +]); +// 3. Create a full payment part for TcPDF +$output = new QrBill\PaymentPart\Output\PhpWordOutput\PhpWordOutput($qrBill, 'en', $phpword); +$output + ->setPrintable(false) + ->getPaymentPart(); +// 4. For demo purposes, let's save the generated example in a file +$examplePath = __DIR__ . "/phpword_example.docx"; +$phpword->save($examplePath, download: true); + +print "Word example created here : ".$examplePath; diff --git a/src/Exception/InvalidPhpWordImageFormat.php b/src/Exception/InvalidPhpWordImageFormat.php new file mode 100644 index 00000000..4bcc90b9 --- /dev/null +++ b/src/Exception/InvalidPhpWordImageFormat.php @@ -0,0 +1,7 @@ +qrBill->getPaymentAmountInformation()->getCurrency()); + $currencyElements[] = Amount::create($this->qrBill->getPaymentAmountInformation()->getCurrency()); return $currencyElements; } @@ -128,7 +129,7 @@ protected function getAmountElements(): array if (null === $this->qrBill->getPaymentAmountInformation()->getAmount()) { $amountElements[] = Placeholder::create(Placeholder::PLACEHOLDER_TYPE_AMOUNT); } else { - $amountElements[] = Text::create($this->qrBill->getPaymentAmountInformation()->getFormattedAmount()); + $amountElements[] = Amount::create($this->qrBill->getPaymentAmountInformation()->getFormattedAmount()); } return $amountElements; diff --git a/src/PaymentPart/Output/Element/Amount.php b/src/PaymentPart/Output/Element/Amount.php new file mode 100644 index 00000000..1c7e975a --- /dev/null +++ b/src/PaymentPart/Output/Element/Amount.php @@ -0,0 +1,24 @@ +amount = $amount; + + return $element; + } + + public function getText(): string + { + return $this->amount; + } +} diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php new file mode 100644 index 00000000..81f01c6e --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -0,0 +1,320 @@ +phpWord = $phpWord; + $this->defineFontStyles(); + } + + public function getPaymentPart() { + $sections = $this->phpWord->getSections(); + $lastAddedSection = end($sections); + $this->billTable = new Bill($lastAddedSection); + + $this->addInformationContentReceipt(); + $this->addCurrencyContentReceipt(); + $this->addAmountContentReceipt(); + + $this->addSwissQrCodeImage(); + $this->addInformationContent(); + $this->addCurrencyContent(); + $this->addAmountContent(); + $this->addFurtherInformationContent(); + } + + public function setQrCodeImageFormat(string $fileExtension) : AbstractOutput { + if ($fileExtension === 'svg') { + throw new InvalidFpdfImageFormat('SVG images are not allowed by PHPWord.'); + } + + $this->qrCodeImageFormat = $fileExtension; + + return $this; + } + + private function addTitleElement(Cell $cell, Title $element, bool $isReceiptPart) : void { + $text = Translation::get(str_replace("text.", "", $element->getTitle()), $this->language); + $fStyle = $isReceiptPart ? self::FONT_STYLE_HEADING_RECEIPT : self::FONT_STYLE_HEADING_PAYMENT_PART; + $cell->addText($text, $fStyle, $fStyle); + } + + private function addTextElement(Cell $cell, Text $element, bool $isReceiptPart) : void { + $fStyle = $isReceiptPart ? self::FONT_STYLE_VALUE_RECEIPT : self::FONT_STYLE_VALUE_PAYMENT_PART; + $this->addElementTextRun($element->getText(), $cell->addTextRun($fStyle), $fStyle); + } + + private function addAmountElement(Cell $cell, Amount $element, bool $isReceiptPart) : void { + $fStyle = $isReceiptPart ? self::FONT_STYLE_AMOUNT_RECEIPT : self::FONT_STYLE_AMOUNT_PAYMENT_PART; + $cell->addText($element->getText(), $fStyle, $fStyle); + } + + private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $isReceiptPart) : void { + // TODO: implement image placeholders + } + + private function addInformationContentReceipt() : void { + $this->addReceiptTitle(); + + $cell = $this->billTable->getReceipt()->getInformationSection(); + $informationElements = $this->getInformationElementsOfReceipt(); + $lastKey = array_key_last($informationElements); + foreach ($informationElements as $key => $informationElement) { + $this->addContentElement($cell, $informationElement, true); + if($informationElement instanceof Text && $key !== $lastKey) { + $cell->addText('', self::FONT_STYLE_VALUE_RECEIPT, self::FONT_STYLE_VALUE_RECEIPT); + } + } + + $this->addReceiptAcceptancePoint(); + } + + private function addContentElement(Cell $cell, OutputElementInterface $element, bool $isReceiptPart = false) : void { + if ($element instanceof Title) { + $this->addTitleElement($cell, $element, $isReceiptPart); + } + + if ($element instanceof Text) { + $this->addTextElement($cell, $element, $isReceiptPart); + } + + if ($element instanceof Amount) { + $this->addAmountElement($cell, $element, $isReceiptPart); + } + + if ($element instanceof Placeholder) { + $this->addPlaceholderElement($cell, $element, $isReceiptPart); + } + } + + private function addCurrencyContentReceipt() : void { + $cell = $this->billTable->getReceipt()->getAmountSection()->getCurrencyCell(); + foreach ($this->getCurrencyElements() as $informationElement) { + $this->addContentElement($cell, $informationElement, true); + } + } + + private function addAmountContentReceipt() : void { + $cell = $this->billTable->getReceipt()->getAmountSection()->getAmountCell(); + foreach ($this->getAmountElementsReceipt() as $informationElement) { + $this->addContentElement($cell, $informationElement, true); + } + } + + private function addReceiptTitle() : void { + $text = Translation::get('receipt', $this->language); + $this->billTable->getReceipt()->getTitleSection()->addText($text, self::FONT_STYLE_TITLE); + } + + private function addReceiptAcceptancePoint() : void { + $text = Translation::get('acceptancePoint', $this->language); + $this->billTable->getReceipt()->getAcceptancePointSection()->addText($text, self::FONT_STYLE_ACCEPTANCE_POINT, self::FONT_STYLE_ACCEPTANCE_POINT); + } + + private function addSwissQrCodeImage() : void { + $qrCode = $this->getQrCode()->writeDataUri(); + $img = base64_decode(preg_replace('#^data:image/[^;]+;base64,#', '', $qrCode)); + $this->billTable->getPayment()->getQrCodeSection()->addImage($img, [ + 'width' => Converter::cmToPoint(self::QR_CODE_SIZE), + 'height' => Converter::cmToPoint(self::QR_CODE_SIZE), + ]); + } + + private function addInformationContent() : void { + $text = Translation::get('paymentPart', $this->language); + $this->billTable->getPayment()->getTitleSection()->addText($text, self::FONT_STYLE_TITLE); + $cell = $this->billTable->getPayment()->getInformationSection(); + $informationElements = $this->getInformationElements(); + $lastKey = array_key_last($informationElements); + foreach ($this->getInformationElements() as $key => $informationElement) { + $this->addContentElement($cell, $informationElement); + if($informationElement instanceof Text && $key !== $lastKey) { + $cell->addText('', self::FONT_STYLE_VALUE_PAYMENT_PART, self::FONT_STYLE_VALUE_PAYMENT_PART); + } + } + } + + private function addCurrencyContent() : void { + $cell = $this->billTable->getPayment()->getAmountSection()->getCurrencyCell(); + foreach ($this->getCurrencyElements() as $informationElement) { + $this->addContentElement($cell, $informationElement); + } + } + + private function addAmountContent() : void { + $cell = $this->billTable->getPayment()->getAmountSection()->getAmountCell(); + foreach ($this->getAmountElements() as $informationElement) { + $this->addContentElement($cell, $informationElement); + } + } + + private function addFurtherInformationContent() : void { + $cell = $this->billTable->getPayment()->getFurtherInformationSection(); + foreach ($this->getFurtherInformationElements() as $informationElement) { + $this->addContentElement($cell, $informationElement); + } + } + + private function addElementTextRun(string $text, TextRun $textRun, array|string $fStyle = []) : void { + $lines = explode("\n", $text); + foreach ($lines as $key => $line) { + $textRun->addText($line, $fStyle, $fStyle); + if (array_key_last($lines) !== $key) { + $textRun->addTextBreak(); + } + } + } + + private function defineFontStyles() : void { + $this->phpWord->addFontStyle( + self::FONT_STYLE_TITLE, + [ + 'name' => self::FONT_FAMILY, + 'size' => 11, + 'bold' => true, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_HEADING_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 6, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(9), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_VALUE_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + ], + [ + 'spacing' => Converter::pointToTwip(9), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_AMOUNT_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_ACCEPTANCE_POINT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 6, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(8), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + 'alignment' => Jc::END, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_HEADING_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_VALUE_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 10, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_AMOUNT_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 10, + ], + [ + 'spacing' => Converter::pointToTwip(13), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $this->phpWord->addFontStyle( + self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 7, + ], + [ + 'spacing' => Converter::pointToTwip(8), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + } + +} diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php new file mode 100644 index 00000000..7de64feb --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php @@ -0,0 +1,48 @@ +table = $section->addTable([ + 'layout' => Table::LAYOUT_FIXED, + 'width' => Converter::cmToTwip(21), + 'height' => Converter::cmToTwip(10.5), + 'cellMargin' => Converter::cmToTwip(0.5), + 'position' => [ + 'horzAnchor' => TablePosition::HANCHOR_PAGE, + 'vertAnchor' => TablePosition::VANCHOR_PAGE, + 'tblpXSpec' => TablePosition::XALIGN_CENTER, + 'tblpYSpec' => TablePosition::YALIGN_BOTTOM, + 'tblpX' => Converter::cmToTwip(3.5), + 'leftFromText' => 0, + 'rightFromText' => 0, + 'topFromText' => 0, + 'bottomFromText' => 0, + ], + ]); + $row = $this->table->addRow(Converter::cmToTwip(9.5)); + $cell = $row->addCell(Converter::cmToTwip(6.2)); + $this->receipt = new Receipt($cell); + $cell = $row->addCell(Converter::cmToTwip(14.8)); + $this->payment = new Payment($cell); + } + + public function getReceipt() : Receipt { + return $this->receipt; + } + + public function getPayment() : Payment { + return $this->payment; + } + +} diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php new file mode 100644 index 00000000..8667caac --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php @@ -0,0 +1,71 @@ +table = $cell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => 100 * 50, + 'unit' => 'pct', + ]); + $this->table->getStyle()->setLayout(\PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED); + + $row = $this->table->addRow(Converter::cmToTwip(8.5)); + $paymentPartLeftCell = $row->addCell(Converter::cmToTwip(5.6)); + $this->informationSection = $row->addCell(Converter::cmToTwip(9.2)); + + $table = $paymentPartLeftCell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => 100 * 50, + 'unit' => 'pct', + ]); + $row = $table->addRow(Converter::cmToTwip(0.7)); + $this->titleSection = $row->addCell(); + $table->addRow(Converter::cmToTwip(0.5))->addCell()->addText('', ['size' => 8], ['spaceAfter' => 0]); + $row = $table->addRow(Converter::cmToTwip(5.1)); + $this->qrCodeSection = $row->addCell(); + $row = $table->addRow(Converter::cmToTwip(2.2)); + $this->amountSection = new AmountSection($row->addCell(), 1.44, 5.1 - 1.44, 2.2); + + $row = $this->table->addRow(Converter::cmToTwip(1.0)); + $this->furtherInformationSection = $row->addCell(Converter::cmToTwip(5.6), [ + 'gridSpan' => 2, + ]); + } + + public function getTitleSection() : Cell { + return $this->titleSection; + } + + public function getQrCodeSection() : Cell { + return $this->qrCodeSection; + } + + public function getAmountSection() : AmountSection { + return $this->amountSection; + } + + public function getInformationSection() : Cell { + return $this->informationSection; + } + + public function getFurtherInformationSection() : Cell { + return $this->furtherInformationSection; + } + + +} diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php new file mode 100644 index 00000000..7b697642 --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php @@ -0,0 +1,47 @@ +table = $cell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => 100 * 50, + 'unit' => 'pct', + ]); + $this->titleSection = $this->table->addRow(Converter::cmToTwip(0.7))->addCell(); + $this->informationSection = $this->table->addRow(Converter::cmToTwip(5.6))->addCell(); + $this->amountSection = new AmountSection($this->table->addRow(Converter::cmToTwip(1.4))->addCell(), 1.22, 5.2 - 1.22, 1.4); + $this->acceptancePointSection = $this->table->addRow(Converter::cmToTwip(1.8))->addCell(); + } + + public function getTitleSection() : Cell { + return $this->titleSection; + } + + public function getInformationSection() : Cell { + return $this->informationSection; + } + + public function getAmountSection() : AmountSection { + return $this->amountSection; + } + + public function getAcceptancePointSection() : Cell { + return $this->acceptancePointSection; + } + + +} diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php new file mode 100644 index 00000000..cf61d7b2 --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php @@ -0,0 +1,33 @@ +addTable([ + 'layout' => Table::LAYOUT_FIXED, + 'width' => 100 * 50, + 'unit' => 'pct', + ]); + $row = $table->addRow(Converter::cmToTwip($height)); + $this->currencyCell = $row->addCell(Converter::cmToTwip($currencyWidth)); + $this->amountCell = $row->addCell(Converter::cmToTwip($amountWidth)); + } + + public function getCurrencyCell() : Cell { + return $this->currencyCell; + } + + public function getAmountCell() : Cell { + return $this->amountCell; + } + +} diff --git a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php new file mode 100644 index 00000000..5a229b5b --- /dev/null +++ b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php @@ -0,0 +1,85 @@ + false, + 'format' => QrCode::FILE_FORMAT_PNG, + 'file' => dirname(dirname(dirname(__DIR__))) . '/TestData/PhpWordOutput/' . $name . '.docx' + ], + [ + 'printable' => true, + 'format' => QrCode::FILE_FORMAT_PNG, + 'file' => dirname(dirname(dirname(__DIR__))) . '/TestData/PhpWordOutput/' . $name . '.print.docx' + ] + ]; + + foreach ($variations as $variation) { + $file = $variation['file']; + + $phpWord = new \PhpOffice\PhpWord\PhpWord(); + $phpWord->addSection(); + + $output = new PhpWordOutput($qrBill, 'en', $phpWord); + $output + ->setPrintable($variation['printable']) + ->setQrCodeImageFormat($variation['format']) + ->getPaymentPart(); + + if (true || $this->regenerateReferenceFiles) { + $phpWord->save($file); + } + + $tmpFile = tempnam(sys_get_temp_dir(), 'phpWordOutput'); + if(false === $tmpFile) { + throw new \RuntimeException('Could not create temporary file'); + } + $phpWord->save($tmpFile); + + $this->assertSame( + file_get_contents($file), + file_get_contents($tmpFile) + ); + } + } + + public function testItThrowsSvgNotSupportedException(): void + { + $this->expectException(InvalidPhpWordImageFormat::class); + + $qrBill = $this->createQrBill([ + 'header', + 'creditorInformationQrIban', + 'creditor', + 'paymentAmountInformation', + 'paymentReferenceQr' + ]); + + $phpWord = new \PhpOffice\PhpWord\PhpWord(); + $phpWord->addSection(); + + $output = new PhpWordOutput($qrBill, 'en', $phpWord); + $output + ->setQrCodeImageFormat(QrCode::FILE_FORMAT_SVG) + ->getPaymentPart(); + } + +} + From 60383b5d2062d23243b7f5b87648a728c9c35a7f Mon Sep 17 00:00:00 2001 From: Severin J Date: Wed, 18 May 2022 10:54:55 +0200 Subject: [PATCH 03/27] Revert php word output test regenerate reference files not always true. --- tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php index 5a229b5b..6a3cb9df 100644 --- a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php +++ b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php @@ -43,7 +43,7 @@ public function testValidQrBills(string $name, QrBill $qrBill): void ->setQrCodeImageFormat($variation['format']) ->getPaymentPart(); - if (true || $this->regenerateReferenceFiles) { + if ($this->regenerateReferenceFiles) { $phpWord->save($file); } From 9f3a2dcb0855dc7ba27c0fab2eea1b13cd78f3ab Mon Sep 17 00:00:00 2001 From: Severin J Date: Wed, 18 May 2022 10:55:33 +0200 Subject: [PATCH 04/27] Replace svg string with QrCode file format constant. --- src/PaymentPart/Output/FpdfOutput/FpdfOutput.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PaymentPart/Output/FpdfOutput/FpdfOutput.php b/src/PaymentPart/Output/FpdfOutput/FpdfOutput.php index 9801af94..ba56b850 100644 --- a/src/PaymentPart/Output/FpdfOutput/FpdfOutput.php +++ b/src/PaymentPart/Output/FpdfOutput/FpdfOutput.php @@ -83,7 +83,7 @@ public function getPaymentPart(): void public function setQrCodeImageFormat(string $fileExtension): AbstractOutput { - if ($fileExtension === 'svg') { + if ($fileExtension === QrCode::FILE_FORMAT_SVG) { throw new InvalidFpdfImageFormat('SVG images are not allowed by FPDF.'); } From a1dd61e99239b925d0638a790dc0e928f8ad0c7e Mon Sep 17 00:00:00 2001 From: Severin J Date: Wed, 18 May 2022 10:57:01 +0200 Subject: [PATCH 05/27] Replace svg string with QrCode file format constant. Fix invalid image format for PhpWordOutput. --- src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index 81f01c6e..cf16f831 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -8,7 +8,7 @@ use PhpOffice\PhpWord\Shared\Converter; use PhpOffice\PhpWord\SimpleType\Jc; use PhpOffice\PhpWord\SimpleType\LineSpacingRule; -use Sprain\SwissQrBill\Exception\InvalidFpdfImageFormat; +use Sprain\SwissQrBill\Exception\InvalidPhpWordImageFormat; use Sprain\SwissQrBill\PaymentPart\Output\AbstractOutput; use Sprain\SwissQrBill\PaymentPart\Output\Element\Amount; use Sprain\SwissQrBill\PaymentPart\Output\Element\OutputElementInterface; @@ -19,6 +19,7 @@ use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Bill; use Sprain\SwissQrBill\PaymentPart\Translation\Translation; use Sprain\SwissQrBill\QrBill; +use Sprain\SwissQrBill\QrCode\QrCode; final class PhpWordOutput extends AbstractOutput implements OutputInterface { @@ -65,8 +66,8 @@ public function getPaymentPart() { } public function setQrCodeImageFormat(string $fileExtension) : AbstractOutput { - if ($fileExtension === 'svg') { - throw new InvalidFpdfImageFormat('SVG images are not allowed by PHPWord.'); + if ($fileExtension === QrCode::FILE_FORMAT_SVG) { + throw new InvalidPhpWordImageFormat('SVG images are not allowed by PHPWord.'); } $this->qrCodeImageFormat = $fileExtension; From 8642da5b9bc1ce98bbd8fad9aa3c3b8750262133 Mon Sep 17 00:00:00 2001 From: Severin J Date: Wed, 18 May 2022 10:58:25 +0200 Subject: [PATCH 06/27] Update phpword-example with file format png. --- example/PhpWordOutput/phpword-example.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/example/PhpWordOutput/phpword-example.php b/example/PhpWordOutput/phpword-example.php index a2782b11..41fbd944 100644 --- a/example/PhpWordOutput/phpword-example.php +++ b/example/PhpWordOutput/phpword-example.php @@ -4,6 +4,7 @@ use PhpOffice\PhpWord\Shared\Converter; use Sprain\SwissQrBill as QrBill; +use Sprain\SwissQrBill\QrCode\QrCode; require __DIR__ . '/../../vendor/autoload.php'; @@ -22,9 +23,11 @@ 'footerHeight' => Converter::cmToTwip(2.0), ]); // 3. Create a full payment part for TcPDF +/** @noinspection PhpUndefinedVariableInspection */ $output = new QrBill\PaymentPart\Output\PhpWordOutput\PhpWordOutput($qrBill, 'en', $phpword); $output ->setPrintable(false) + ->setQrCodeImageFormat(QrCode::FILE_FORMAT_PNG) ->getPaymentPart(); // 4. For demo purposes, let's save the generated example in a file $examplePath = __DIR__ . "/phpword_example.docx"; From 87b5e716c7da608b207f8e40c975ad8c77ee0826 Mon Sep 17 00:00:00 2001 From: Severin J Date: Wed, 18 May 2022 10:59:22 +0200 Subject: [PATCH 07/27] Exclude phpword and more cache files in gitignore. --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ad7f8e27..d75e1d9f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ /vendor /example/qr.png /example/qr.svg -/.php_cs.cache /example/TcPdfOutput/tcpdf_example.pdf /example/HtmlOutput/html-example.htm /example/FpdfOutput/fpdf_example.pdf +/example/PhpWordOutput/phpword_example.docx +/.php_cs.cache /.php-cs-fixer.cache +/.idea/ +/.phpunit.result.cache From 8c5580a52af21b7074954e832681de55155c41c9 Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 08:54:23 +0200 Subject: [PATCH 08/27] Added consistent timestamp for the PhpWord test file. --- tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php index 6a3cb9df..63c240c7 100644 --- a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php +++ b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php @@ -35,6 +35,8 @@ public function testValidQrBills(string $name, QrBill $qrBill): void $file = $variation['file']; $phpWord = new \PhpOffice\PhpWord\PhpWord(); + $phpWord->getDocInfo()->setCreated(strtotime('2022-05-18 00:00:00')); + $phpWord->getDocInfo()->setModified(strtotime('2022-05-18 00:00:00')); $phpWord->addSection(); $output = new PhpWordOutput($qrBill, 'en', $phpWord); From ea9296ba97d2604d41e5a3085771546dc2a70e63 Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 08:59:48 +0200 Subject: [PATCH 09/27] Assert same for all files in the xyz.docx document. Comparing the unzip files is necessary. Two word documents are only the same if they are generated exactly at the same timestamp. (This might be caused by the zip algorithm or some other word file config that can not be manipulated by the PhpWord library.) Therefore, the unzipped content gets compared. --- .../PhpWordOutput/PhpWordOutputTest.php | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php index 63c240c7..f11aa665 100644 --- a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php +++ b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php @@ -55,10 +55,28 @@ public function testValidQrBills(string $name, QrBill $qrBill): void } $phpWord->save($tmpFile); - $this->assertSame( - file_get_contents($file), - file_get_contents($tmpFile) - ); + $zipArchive = new \ZipArchive(); + $res = $zipArchive->open($file); + $this->assertTrue($res); + + $tmpZipArchive = new \ZipArchive(); + $res = $tmpZipArchive->open($tmpFile); + $this->assertTrue($res); + + $count = $zipArchive->count(); + $this->assertCount(15, $zipArchive); + $tmpZipArchive->count(); + $this->assertCount(15, $tmpZipArchive); + + for($i = 0; $i < $count; $i++) { + $name = $zipArchive->getNameIndex($i); + $content = $zipArchive->getFromName($name); + $tmpContent = $tmpZipArchive->getFromName($name); + $this->assertSame( + chunk_split($content, 150), + chunk_split($tmpContent, 150), + ); + } } } From 0f717950ec548236e8756719d2e62c327cfe6078 Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 09:08:31 +0200 Subject: [PATCH 10/27] Improve readability for test data file directory path. --- tests/PaymentPart/Output/FpdfOutput/FpdfOutputTest.php | 4 ++-- tests/PaymentPart/Output/HtmlOutput/HtmlOutputTest.php | 8 ++++---- .../Output/PhpWordOutput/PhpWordOutputTest.php | 4 ++-- tests/PaymentPart/Output/TcPdfOutput/TcPdfOutputTest.php | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/PaymentPart/Output/FpdfOutput/FpdfOutputTest.php b/tests/PaymentPart/Output/FpdfOutput/FpdfOutputTest.php index c4c2045a..2f4b0d8d 100644 --- a/tests/PaymentPart/Output/FpdfOutput/FpdfOutputTest.php +++ b/tests/PaymentPart/Output/FpdfOutput/FpdfOutputTest.php @@ -23,12 +23,12 @@ public function testValidQrBills(string $name, QrBill $qrBill): void [ 'printable' => false, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => dirname(dirname(dirname(__DIR__))) . '/TestData/FpdfOutput/' . $name . '.pdf' + 'file' => dirname(__DIR__, 3). '/TestData/FpdfOutput/' . $name . '.pdf' ], [ 'printable' => true, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => dirname(dirname(dirname(__DIR__))) . '/TestData/FpdfOutput/' . $name . '.print.pdf' + 'file' => dirname(__DIR__, 3). '/TestData/FpdfOutput/' . $name . '.print.pdf' ] ]; diff --git a/tests/PaymentPart/Output/HtmlOutput/HtmlOutputTest.php b/tests/PaymentPart/Output/HtmlOutput/HtmlOutputTest.php index 7302351c..5597689d 100644 --- a/tests/PaymentPart/Output/HtmlOutput/HtmlOutputTest.php +++ b/tests/PaymentPart/Output/HtmlOutput/HtmlOutputTest.php @@ -21,23 +21,23 @@ public function testValidQrBills(string $name, QrBill $qrBill) [ 'printable' => false, 'format' => QrCode::FILE_FORMAT_SVG, - 'file' => __DIR__ . '/../../../TestData/HtmlOutput/' . $name . '.svg.html' + 'file' => dirname(__DIR__, 3). '/TestData/HtmlOutput/' . $name . '.svg.html' ], [ 'printable' => true, 'format' => QrCode::FILE_FORMAT_SVG, - 'file' => __DIR__ . '/../../../TestData/HtmlOutput/' . $name . '.svg.print.html' + 'file' => dirname(__DIR__, 3). '/TestData/HtmlOutput/' . $name . '.svg.print.html' ], /* PNGs do not create the same output in all environments [ 'printable' => false, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => __DIR__ . '/../../../TestData/HtmlOutput/' . $name . '.png.html' + 'file' => dirname(__DIR__, 3). '/TestData/HtmlOutput/' . $name . '.png.html' ], [ 'printable' => true, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => __DIR__ . '/../../../TestData/HtmlOutput/' . $name . '.png.print.html' + 'file' => dirname(__DIR__, 3). '/TestData/HtmlOutput/' . $name . '.png.print.html' ] */ ]; diff --git a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php index f11aa665..011ebb5d 100644 --- a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php +++ b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php @@ -22,12 +22,12 @@ public function testValidQrBills(string $name, QrBill $qrBill): void [ 'printable' => false, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => dirname(dirname(dirname(__DIR__))) . '/TestData/PhpWordOutput/' . $name . '.docx' + 'file' => dirname(__DIR__, 3) . '/TestData/PhpWordOutput/' . $name . '.docx' ], [ 'printable' => true, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => dirname(dirname(dirname(__DIR__))) . '/TestData/PhpWordOutput/' . $name . '.print.docx' + 'file' => dirname(__DIR__, 3) . '/TestData/PhpWordOutput/' . $name . '.print.docx' ] ]; diff --git a/tests/PaymentPart/Output/TcPdfOutput/TcPdfOutputTest.php b/tests/PaymentPart/Output/TcPdfOutput/TcPdfOutputTest.php index fd81434b..e7c39731 100644 --- a/tests/PaymentPart/Output/TcPdfOutput/TcPdfOutputTest.php +++ b/tests/PaymentPart/Output/TcPdfOutput/TcPdfOutputTest.php @@ -21,23 +21,23 @@ public function testValidQrBills(string $name, QrBill $qrBill): void [ 'printable' => false, 'format' => QrCode::FILE_FORMAT_SVG, - 'file' => __DIR__ . '/../../../TestData/TcPdfOutput/' . $name . '.svg.pdf' + 'file' => dirname(__DIR__, 3). '/TestData/TcPdfOutput/' . $name . '.svg.pdf' ], [ 'printable' => true, 'format' => QrCode::FILE_FORMAT_SVG, - 'file' => __DIR__ . '/../../../TestData/TcPdfOutput/' . $name . '.svg.print.pdf' + 'file' => dirname(__DIR__, 3). '/TestData/TcPdfOutput/' . $name . '.svg.print.pdf' ], /* PNGs do not create the same output in all environments [ 'printable' => false, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => __DIR__ . '/../../../TestData/TcPdfOutput/' . $name . '.png.pdf' + 'file' => dirname(__DIR__, 3). '/TestData/TcPdfOutput/' . $name . '.png.pdf' ], [ 'printable' => true, 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => __DIR__ . '/../../../TestData/TcPdfOutput/' . $name . '.png.print.pdf' + 'file' => dirname(__DIR__, 3). '/TestData/TcPdfOutput/' . $name . '.png.print.pdf' ] */ ]; From b0ac128e9b29414296e2b2b2398c69a944896c53 Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 09:09:37 +0200 Subject: [PATCH 11/27] Add support for php word separator element when bill is not printable. --- .../Output/PhpWordOutput/PhpWordOutput.php | 12 +++++- .../Output/PhpWordOutput/Table/Bill.php | 39 +++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index cf16f831..f134f1a2 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -52,7 +52,9 @@ public function __construct( public function getPaymentPart() { $sections = $this->phpWord->getSections(); $lastAddedSection = end($sections); - $this->billTable = new Bill($lastAddedSection); + $this->billTable = new Bill($lastAddedSection, $this->isPrintable()); + + $this->addSeparatorContentIfNotPrintable(); $this->addInformationContentReceipt(); $this->addCurrencyContentReceipt(); @@ -95,6 +97,14 @@ private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $i // TODO: implement image placeholders } + private function addSeparatorContentIfNotPrintable() : void { + if (!$this->isPrintable()) { + $text = Translation::get('separate', $this->language); + $fStyle = self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART; + $this->billTable->getSeparate()->addText($text, $fStyle); + } + } + private function addInformationContentReceipt() : void { $this->addReceiptTitle(); diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php index 7de64feb..894c0cd2 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php @@ -2,22 +2,24 @@ namespace Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table; +use PhpOffice\PhpWord\Element\Cell; use PhpOffice\PhpWord\Element\Section; use PhpOffice\PhpWord\Shared\Converter; +use PhpOffice\PhpWord\SimpleType\Border; use PhpOffice\PhpWord\Style\Table; use PhpOffice\PhpWord\Style\TablePosition; class Bill { private \PhpOffice\PhpWord\Element\Table $table; + private ?Cell $separate = null; private Receipt $receipt; private Payment $payment; - public function __construct(Section $section) { + public function __construct(Section $section, bool $isPrintable) { $this->table = $section->addTable([ 'layout' => Table::LAYOUT_FIXED, 'width' => Converter::cmToTwip(21), 'height' => Converter::cmToTwip(10.5), - 'cellMargin' => Converter::cmToTwip(0.5), 'position' => [ 'horzAnchor' => TablePosition::HANCHOR_PAGE, 'vertAnchor' => TablePosition::VANCHOR_PAGE, @@ -30,13 +32,44 @@ public function __construct(Section $section) { 'bottomFromText' => 0, ], ]); + $separateCellStyle = []; + if (!$isPrintable) { + $this->separate = $this->table->addRow(Converter::cmToTwip(0.6))->addCell(Converter::cmToTwip(21), [ + 'borderBottomColor' => '000000', + 'borderBottomSize' => 1, + 'borderBottomStyle' => Border::SINGLE, + 'gridSpan' => 2, + 'valign' => \PhpOffice\PhpWord\SimpleType\JcTable::CENTER, + ]); + $separateCellStyle = [ + 'borderRightColor' => '000000', + 'borderRightSize' => 1, + 'borderRightStyle' => Border::SINGLE, + ]; + } $row = $this->table->addRow(Converter::cmToTwip(9.5)); - $cell = $row->addCell(Converter::cmToTwip(6.2)); + $cell = $row->addCell(Converter::cmToTwip(6.2), $separateCellStyle); + $cell = $cell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => 100 * 50, + 'unit' => 'pct', + 'cellMargin' => Converter::cmToTwip(0.5), + ])->addRow()->addCell(); $this->receipt = new Receipt($cell); $cell = $row->addCell(Converter::cmToTwip(14.8)); + $cell = $cell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => 100 * 50, + 'unit' => 'pct', + 'cellMargin' => Converter::cmToTwip(0.5), + ])->addRow()->addCell(); $this->payment = new Payment($cell); } + public function getSeparate() : ?Cell { + return $this->separate; + } + public function getReceipt() : Receipt { return $this->receipt; } From d6fb8da2419ce5e9656f8ae03c8163074b6319a1 Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 09:36:25 +0200 Subject: [PATCH 12/27] Remove element type amount. Replace the element type with the generic text element. Use a static style provider to get the current text style (value, amount, currency, further information). --- src/PaymentPart/Output/AbstractOutput.php | 4 +- src/PaymentPart/Output/Element/Amount.php | 24 --- .../Output/PhpWordOutput/FontStyle.php | 144 ++++++++++++++++ .../Output/PhpWordOutput/PhpWordOutput.php | 163 ++---------------- 4 files changed, 164 insertions(+), 171 deletions(-) delete mode 100644 src/PaymentPart/Output/Element/Amount.php create mode 100644 src/PaymentPart/Output/PhpWordOutput/FontStyle.php diff --git a/src/PaymentPart/Output/AbstractOutput.php b/src/PaymentPart/Output/AbstractOutput.php index 80d9c844..b4d579aa 100644 --- a/src/PaymentPart/Output/AbstractOutput.php +++ b/src/PaymentPart/Output/AbstractOutput.php @@ -115,7 +115,7 @@ protected function getCurrencyElements(): array $currencyElements = []; $currencyElements[] = Title::create('text.currency'); - $currencyElements[] = Amount::create($this->qrBill->getPaymentAmountInformation()->getCurrency()); + $currencyElements[] = Text::create($this->qrBill->getPaymentAmountInformation()->getCurrency()); return $currencyElements; } @@ -129,7 +129,7 @@ protected function getAmountElements(): array if (null === $this->qrBill->getPaymentAmountInformation()->getAmount()) { $amountElements[] = Placeholder::create(Placeholder::PLACEHOLDER_TYPE_AMOUNT); } else { - $amountElements[] = Amount::create($this->qrBill->getPaymentAmountInformation()->getFormattedAmount()); + $amountElements[] = Text::create($this->qrBill->getPaymentAmountInformation()->getFormattedAmount()); } return $amountElements; diff --git a/src/PaymentPart/Output/Element/Amount.php b/src/PaymentPart/Output/Element/Amount.php deleted file mode 100644 index 1c7e975a..00000000 --- a/src/PaymentPart/Output/Element/Amount.php +++ /dev/null @@ -1,24 +0,0 @@ -amount = $amount; - - return $element; - } - - public function getText(): string - { - return $this->amount; - } -} diff --git a/src/PaymentPart/Output/PhpWordOutput/FontStyle.php b/src/PaymentPart/Output/PhpWordOutput/FontStyle.php new file mode 100644 index 00000000..e8675999 --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/FontStyle.php @@ -0,0 +1,144 @@ +addFontStyle( + self::FONT_STYLE_TITLE, + [ + 'name' => self::FONT_FAMILY, + 'size' => 11, + 'bold' => true, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_HEADING_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 6, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(9), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_VALUE_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + ], + [ + 'spacing' => Converter::pointToTwip(9), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_AMOUNT_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_ACCEPTANCE_POINT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 6, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(8), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + 'alignment' => Jc::END, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_HEADING_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_VALUE_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 10, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_AMOUNT_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 10, + ], + [ + 'spacing' => Converter::pointToTwip(13), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 7, + ], + [ + 'spacing' => Converter::pointToTwip(8), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + } + +} diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index f134f1a2..2c20329c 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -6,11 +6,8 @@ use PhpOffice\PhpWord\Element\TextRun; use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\Shared\Converter; -use PhpOffice\PhpWord\SimpleType\Jc; -use PhpOffice\PhpWord\SimpleType\LineSpacingRule; use Sprain\SwissQrBill\Exception\InvalidPhpWordImageFormat; use Sprain\SwissQrBill\PaymentPart\Output\AbstractOutput; -use Sprain\SwissQrBill\PaymentPart\Output\Element\Amount; use Sprain\SwissQrBill\PaymentPart\Output\Element\OutputElementInterface; use Sprain\SwissQrBill\PaymentPart\Output\Element\Placeholder; use Sprain\SwissQrBill\PaymentPart\Output\Element\Text; @@ -23,17 +20,6 @@ final class PhpWordOutput extends AbstractOutput implements OutputInterface { - const FONT_FAMILY = 'Helvetica'; - const FONT_STYLE_TITLE = 'SwissBill Title'; - const FONT_STYLE_HEADING_RECEIPT = 'SwissBill Receipt Heading'; - const FONT_STYLE_VALUE_RECEIPT = 'SwissBill Receipt Value'; - const FONT_STYLE_AMOUNT_RECEIPT = 'SwissBill Receipt Amount'; - const FONT_STYLE_ACCEPTANCE_POINT = 'SwissBill Acceptance point'; - const FONT_STYLE_HEADING_PAYMENT_PART = 'SwissBill Payment part Heading'; - const FONT_STYLE_VALUE_PAYMENT_PART = 'SwissBill Payment part Value'; - const FONT_STYLE_AMOUNT_PAYMENT_PART = 'SwissBill Payment part Amount'; - const FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART = 'SwissBill Payment part Further information'; - const QR_CODE_SIZE = 4.6; private PhpWord $phpWord; @@ -46,7 +32,7 @@ public function __construct( ) { parent::__construct($qrBill, $language); $this->phpWord = $phpWord; - $this->defineFontStyles(); + FontStyle::defineFontStyles($this->phpWord); } public function getPaymentPart() { @@ -79,20 +65,15 @@ public function setQrCodeImageFormat(string $fileExtension) : AbstractOutput { private function addTitleElement(Cell $cell, Title $element, bool $isReceiptPart) : void { $text = Translation::get(str_replace("text.", "", $element->getTitle()), $this->language); - $fStyle = $isReceiptPart ? self::FONT_STYLE_HEADING_RECEIPT : self::FONT_STYLE_HEADING_PAYMENT_PART; + $fStyle = $isReceiptPart ? FontStyle::FONT_STYLE_HEADING_RECEIPT : FontStyle::FONT_STYLE_HEADING_PAYMENT_PART; $cell->addText($text, $fStyle, $fStyle); } - private function addTextElement(Cell $cell, Text $element, bool $isReceiptPart) : void { - $fStyle = $isReceiptPart ? self::FONT_STYLE_VALUE_RECEIPT : self::FONT_STYLE_VALUE_PAYMENT_PART; + private function addTextElement(Cell $cell, Text $element) : void { + $fStyle = FontStyle::getCurrentText(); $this->addElementTextRun($element->getText(), $cell->addTextRun($fStyle), $fStyle); } - private function addAmountElement(Cell $cell, Amount $element, bool $isReceiptPart) : void { - $fStyle = $isReceiptPart ? self::FONT_STYLE_AMOUNT_RECEIPT : self::FONT_STYLE_AMOUNT_PAYMENT_PART; - $cell->addText($element->getText(), $fStyle, $fStyle); - } - private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $isReceiptPart) : void { // TODO: implement image placeholders } @@ -100,7 +81,7 @@ private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $i private function addSeparatorContentIfNotPrintable() : void { if (!$this->isPrintable()) { $text = Translation::get('separate', $this->language); - $fStyle = self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART; + $fStyle = FontStyle::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART; $this->billTable->getSeparate()->addText($text, $fStyle); } } @@ -111,10 +92,11 @@ private function addInformationContentReceipt() : void { $cell = $this->billTable->getReceipt()->getInformationSection(); $informationElements = $this->getInformationElementsOfReceipt(); $lastKey = array_key_last($informationElements); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_RECEIPT); foreach ($informationElements as $key => $informationElement) { $this->addContentElement($cell, $informationElement, true); if($informationElement instanceof Text && $key !== $lastKey) { - $cell->addText('', self::FONT_STYLE_VALUE_RECEIPT, self::FONT_STYLE_VALUE_RECEIPT); + $cell->addText('', FontStyle::FONT_STYLE_VALUE_RECEIPT, FontStyle::FONT_STYLE_VALUE_RECEIPT); } } @@ -127,11 +109,7 @@ private function addContentElement(Cell $cell, OutputElementInterface $element, } if ($element instanceof Text) { - $this->addTextElement($cell, $element, $isReceiptPart); - } - - if ($element instanceof Amount) { - $this->addAmountElement($cell, $element, $isReceiptPart); + $this->addTextElement($cell, $element); } if ($element instanceof Placeholder) { @@ -141,6 +119,7 @@ private function addContentElement(Cell $cell, OutputElementInterface $element, private function addCurrencyContentReceipt() : void { $cell = $this->billTable->getReceipt()->getAmountSection()->getCurrencyCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_RECEIPT); foreach ($this->getCurrencyElements() as $informationElement) { $this->addContentElement($cell, $informationElement, true); } @@ -148,6 +127,7 @@ private function addCurrencyContentReceipt() : void { private function addAmountContentReceipt() : void { $cell = $this->billTable->getReceipt()->getAmountSection()->getAmountCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_RECEIPT); foreach ($this->getAmountElementsReceipt() as $informationElement) { $this->addContentElement($cell, $informationElement, true); } @@ -155,12 +135,12 @@ private function addAmountContentReceipt() : void { private function addReceiptTitle() : void { $text = Translation::get('receipt', $this->language); - $this->billTable->getReceipt()->getTitleSection()->addText($text, self::FONT_STYLE_TITLE); + $this->billTable->getReceipt()->getTitleSection()->addText($text, FontStyle::FONT_STYLE_TITLE); } private function addReceiptAcceptancePoint() : void { $text = Translation::get('acceptancePoint', $this->language); - $this->billTable->getReceipt()->getAcceptancePointSection()->addText($text, self::FONT_STYLE_ACCEPTANCE_POINT, self::FONT_STYLE_ACCEPTANCE_POINT); + $this->billTable->getReceipt()->getAcceptancePointSection()->addText($text, FontStyle::FONT_STYLE_ACCEPTANCE_POINT, FontStyle::FONT_STYLE_ACCEPTANCE_POINT); } private function addSwissQrCodeImage() : void { @@ -174,20 +154,22 @@ private function addSwissQrCodeImage() : void { private function addInformationContent() : void { $text = Translation::get('paymentPart', $this->language); - $this->billTable->getPayment()->getTitleSection()->addText($text, self::FONT_STYLE_TITLE); + $this->billTable->getPayment()->getTitleSection()->addText($text, FontStyle::FONT_STYLE_TITLE); $cell = $this->billTable->getPayment()->getInformationSection(); $informationElements = $this->getInformationElements(); $lastKey = array_key_last($informationElements); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); foreach ($this->getInformationElements() as $key => $informationElement) { $this->addContentElement($cell, $informationElement); if($informationElement instanceof Text && $key !== $lastKey) { - $cell->addText('', self::FONT_STYLE_VALUE_PAYMENT_PART, self::FONT_STYLE_VALUE_PAYMENT_PART); + $cell->addText('', FontStyle::FONT_STYLE_VALUE_PAYMENT_PART, FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); } } } private function addCurrencyContent() : void { $cell = $this->billTable->getPayment()->getAmountSection()->getCurrencyCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_PAYMENT_PART); foreach ($this->getCurrencyElements() as $informationElement) { $this->addContentElement($cell, $informationElement); } @@ -195,6 +177,7 @@ private function addCurrencyContent() : void { private function addAmountContent() : void { $cell = $this->billTable->getPayment()->getAmountSection()->getAmountCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_PAYMENT_PART); foreach ($this->getAmountElements() as $informationElement) { $this->addContentElement($cell, $informationElement); } @@ -202,6 +185,7 @@ private function addAmountContent() : void { private function addFurtherInformationContent() : void { $cell = $this->billTable->getPayment()->getFurtherInformationSection(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART); foreach ($this->getFurtherInformationElements() as $informationElement) { $this->addContentElement($cell, $informationElement); } @@ -217,115 +201,4 @@ private function addElementTextRun(string $text, TextRun $textRun, array|string } } - private function defineFontStyles() : void { - $this->phpWord->addFontStyle( - self::FONT_STYLE_TITLE, - [ - 'name' => self::FONT_FAMILY, - 'size' => 11, - 'bold' => true, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_HEADING_RECEIPT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 6, - 'bold' => true, - ], - [ - 'spacing' => Converter::pointToTwip(9), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_VALUE_RECEIPT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 8, - ], - [ - 'spacing' => Converter::pointToTwip(9), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_AMOUNT_RECEIPT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 8, - ], - [ - 'spacing' => Converter::pointToTwip(11), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_ACCEPTANCE_POINT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 6, - 'bold' => true, - ], - [ - 'spacing' => Converter::pointToTwip(8), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - 'alignment' => Jc::END, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_HEADING_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 8, - 'bold' => true, - ], - [ - 'spacing' => Converter::pointToTwip(11), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_VALUE_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 10, - ], - [ - 'spacing' => Converter::pointToTwip(11), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_AMOUNT_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 10, - ], - [ - 'spacing' => Converter::pointToTwip(13), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $this->phpWord->addFontStyle( - self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 7, - ], - [ - 'spacing' => Converter::pointToTwip(8), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - } - } From 303a2a22ccc0f9ed77cd78ff93df22853840a94d Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 14:03:22 +0200 Subject: [PATCH 13/27] Add php word output with placeholders support. --- .../Output/PhpWordOutput/FontStyle.php | 35 ++++++++----- .../Output/PhpWordOutput/PhpWordOutput.php | 52 ++++++++++++++++--- .../Output/PhpWordOutput/Table/Bill.php | 17 +++--- .../PhpWordOutput/PhpWordOutputTest.php | 10 ++-- 4 files changed, 80 insertions(+), 34 deletions(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/FontStyle.php b/src/PaymentPart/Output/PhpWordOutput/FontStyle.php index e8675999..41f85b77 100644 --- a/src/PaymentPart/Output/PhpWordOutput/FontStyle.php +++ b/src/PaymentPart/Output/PhpWordOutput/FontStyle.php @@ -19,15 +19,16 @@ abstract class FontStyle { const FONT_STYLE_VALUE_PAYMENT_PART = 'SwissBill Payment part Value'; const FONT_STYLE_AMOUNT_PAYMENT_PART = 'SwissBill Payment part Amount'; const FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART = 'SwissBill Payment part Further information'; + const FONT_STYLE_SEPARATOR = 'SwissBill Separator'; private static string $currentText = self::FONT_STYLE_VALUE_RECEIPT; - public static function setCurrentText(string $fStyle) { - self::$currentText = $fStyle; + public static function getCurrentText() : string { + return self::$currentText; } - public static function getCurrentText(): string{ - return self::$currentText; + public static function setCurrentText(string $fStyle) { + self::$currentText = $fStyle; } public static function defineFontStyles(PhpWord $phpWord) : void { @@ -127,17 +128,25 @@ public static function defineFontStyles(PhpWord $phpWord) : void { 'spaceAfter' => 0, ] ); + + $fontStyle = [ + 'name' => self::FONT_FAMILY, + 'size' => 7, + ]; + $paragraphStyle = [ + 'spacing' => Converter::pointToTwip(8), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ]; $phpWord->addFontStyle( self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 7, - ], - [ - 'spacing' => Converter::pointToTwip(8), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] + $fontStyle, + $paragraphStyle + ); + $phpWord->addFontStyle( + self::FONT_STYLE_SEPARATOR, + $fontStyle, + array_merge($paragraphStyle, ['alignment' => Jc::CENTER]), ); } diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index 2c20329c..dbadd818 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -6,6 +6,7 @@ use PhpOffice\PhpWord\Element\TextRun; use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\Shared\Converter; +use PhpOffice\PhpWord\Style\Image; use Sprain\SwissQrBill\Exception\InvalidPhpWordImageFormat; use Sprain\SwissQrBill\PaymentPart\Output\AbstractOutput; use Sprain\SwissQrBill\PaymentPart\Output\Element\OutputElementInterface; @@ -75,14 +76,50 @@ private function addTextElement(Cell $cell, Text $element) : void { } private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $isReceiptPart) : void { - // TODO: implement image placeholders + $type = $element->getType(); + + switch ($type) { + case Placeholder::PLACEHOLDER_TYPE_AMOUNT['type']: + $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ + 'width' => Converter::cmToPoint($element->getWidth() / 10), + 'height' => Converter::cmToPoint($element->getHeight() / 10), + 'positioning' => Image::POSITION_ABSOLUTE, + 'posHorizontal' => Image::POSITION_ABSOLUTE, + 'posVertical' => Image::POSITION_ABSOLUTE, + 'marginLeft' => Converter::cmToPoint(-0.45), + 'marginTop' => Converter::cmToPoint(0.08), + ]); + break; + case Placeholder::PLACEHOLDER_TYPE_AMOUNT_RECEIPT['type']: + $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ + 'width' => Converter::cmToPoint($element->getWidth() / 10), + 'height' => Converter::cmToPoint($element->getHeight() / 10), + 'positioning' => Image::POSITION_ABSOLUTE, + 'posHorizontal' => Image::POSITION_ABSOLUTE, + 'posVertical' => Image::POSITION_ABSOLUTE, + 'marginLeft' => Converter::cmToPoint(0.91), + 'marginTop' => Converter::cmToPoint(-0.25), + ]); + break; + case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY['type']: + case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY_RECEIPT['type']: + default: + $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ + 'width' => Converter::cmToPoint($element->getWidth() / 10), + 'height' => Converter::cmToPoint($element->getHeight() / 10), + 'wrappingStyle' => Image::WRAP_INFRONT, + 'positioning' => Image::POS_RELATIVE, + 'posHorizontalRel' => Image::POS_RELTO_MARGIN, + 'posVerticalRel' => Image::POS_RELTO_LINE, + ]); + } } private function addSeparatorContentIfNotPrintable() : void { if (!$this->isPrintable()) { $text = Translation::get('separate', $this->language); - $fStyle = FontStyle::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART; - $this->billTable->getSeparate()->addText($text, $fStyle); + $fStyle = FontStyle::FONT_STYLE_SEPARATOR; + $this->billTable->getSeparate()->addText($text, $fStyle, $fStyle); } } @@ -95,7 +132,7 @@ private function addInformationContentReceipt() : void { FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_RECEIPT); foreach ($informationElements as $key => $informationElement) { $this->addContentElement($cell, $informationElement, true); - if($informationElement instanceof Text && $key !== $lastKey) { + if ($informationElement instanceof Text && $key !== $lastKey) { $cell->addText('', FontStyle::FONT_STYLE_VALUE_RECEIPT, FontStyle::FONT_STYLE_VALUE_RECEIPT); } } @@ -140,7 +177,10 @@ private function addReceiptTitle() : void { private function addReceiptAcceptancePoint() : void { $text = Translation::get('acceptancePoint', $this->language); - $this->billTable->getReceipt()->getAcceptancePointSection()->addText($text, FontStyle::FONT_STYLE_ACCEPTANCE_POINT, FontStyle::FONT_STYLE_ACCEPTANCE_POINT); + $this->billTable->getReceipt()->getAcceptancePointSection()->addText( + $text, + FontStyle::FONT_STYLE_ACCEPTANCE_POINT, + FontStyle::FONT_STYLE_ACCEPTANCE_POINT); } private function addSwissQrCodeImage() : void { @@ -161,7 +201,7 @@ private function addInformationContent() : void { FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); foreach ($this->getInformationElements() as $key => $informationElement) { $this->addContentElement($cell, $informationElement); - if($informationElement instanceof Text && $key !== $lastKey) { + if ($informationElement instanceof Text && $key !== $lastKey) { $cell->addText('', FontStyle::FONT_STYLE_VALUE_PAYMENT_PART, FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); } } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php index 894c0cd2..8b3d396e 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php @@ -6,6 +6,7 @@ use PhpOffice\PhpWord\Element\Section; use PhpOffice\PhpWord\Shared\Converter; use PhpOffice\PhpWord\SimpleType\Border; +use PhpOffice\PhpWord\SimpleType\JcTable; use PhpOffice\PhpWord\Style\Table; use PhpOffice\PhpWord\Style\TablePosition; @@ -32,25 +33,25 @@ public function __construct(Section $section, bool $isPrintable) { 'bottomFromText' => 0, ], ]); - $separateCellStyle = []; + $verticalLine = []; if (!$isPrintable) { - $this->separate = $this->table->addRow(Converter::cmToTwip(0.6))->addCell(Converter::cmToTwip(21), [ + $this->separate = $this->table->addRow(Converter::cmToTwip(0.5))->addCell(Converter::cmToTwip(21), [ 'borderBottomColor' => '000000', 'borderBottomSize' => 1, 'borderBottomStyle' => Border::SINGLE, - 'gridSpan' => 2, - 'valign' => \PhpOffice\PhpWord\SimpleType\JcTable::CENTER, + 'gridSpan' => 2, + 'valign' => JcTable::CENTER, ]); - $separateCellStyle = [ + $verticalLine = [ 'borderRightColor' => '000000', 'borderRightSize' => 1, 'borderRightStyle' => Border::SINGLE, ]; } $row = $this->table->addRow(Converter::cmToTwip(9.5)); - $cell = $row->addCell(Converter::cmToTwip(6.2), $separateCellStyle); + $cell = $row->addCell(Converter::cmToTwip(6.2), $verticalLine); $cell = $cell->addTable([ - 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'layout' => Table::LAYOUT_FIXED, 'width' => 100 * 50, 'unit' => 'pct', 'cellMargin' => Converter::cmToTwip(0.5), @@ -58,7 +59,7 @@ public function __construct(Section $section, bool $isPrintable) { $this->receipt = new Receipt($cell); $cell = $row->addCell(Converter::cmToTwip(14.8)); $cell = $cell->addTable([ - 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'layout' => Table::LAYOUT_FIXED, 'width' => 100 * 50, 'unit' => 'pct', 'cellMargin' => Converter::cmToTwip(0.5), diff --git a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php index 011ebb5d..1d003219 100644 --- a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php +++ b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php @@ -56,17 +56,13 @@ public function testValidQrBills(string $name, QrBill $qrBill): void $phpWord->save($tmpFile); $zipArchive = new \ZipArchive(); - $res = $zipArchive->open($file); - $this->assertTrue($res); + $this->assertTrue($zipArchive->open($file)); $tmpZipArchive = new \ZipArchive(); - $res = $tmpZipArchive->open($tmpFile); - $this->assertTrue($res); + $this->assertTrue($tmpZipArchive->open($tmpFile)); $count = $zipArchive->count(); - $this->assertCount(15, $zipArchive); - $tmpZipArchive->count(); - $this->assertCount(15, $tmpZipArchive); + $this->assertCount($count,$tmpZipArchive); for($i = 0; $i < $count; $i++) { $name = $zipArchive->getNameIndex($i); From b7ce288483818534b8ea85dea7b41f0fe011aacf Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 14:03:45 +0200 Subject: [PATCH 14/27] Add TestData files for PhpWordOutput. --- .../qr-additional-information.docx | Bin 0 -> 16364 bytes .../qr-additional-information.print.docx | Bin 0 -> 16266 bytes .../PhpWordOutput/qr-alternative-schemes.docx | Bin 0 -> 15986 bytes .../qr-alternative-schemes.print.docx | Bin 0 -> 15882 bytes tests/TestData/PhpWordOutput/qr-full-set.docx | Bin 0 -> 14372 bytes .../PhpWordOutput/qr-full-set.print.docx | Bin 0 -> 14272 bytes .../qr-international-ultimate-debtor.docx | Bin 0 -> 13385 bytes .../qr-international-ultimate-debtor.print.docx | Bin 0 -> 13285 bytes .../PhpWordOutput/qr-minimal-setup.docx | Bin 0 -> 15525 bytes .../PhpWordOutput/qr-minimal-setup.print.docx | Bin 0 -> 15421 bytes ...t-information-without-amount-but-debtor.docx | Bin 0 -> 16205 bytes ...rmation-without-amount-but-debtor.print.docx | Bin 0 -> 16108 bytes .../qr-payment-information-without-amount.docx | Bin 0 -> 18374 bytes ...ayment-information-without-amount.print.docx | Bin 0 -> 18275 bytes .../qr-payment-information-zero-amount.docx | Bin 0 -> 16057 bytes ...r-payment-information-zero-amount.print.docx | Bin 0 -> 15960 bytes .../PhpWordOutput/qr-payment-reference-non.docx | Bin 0 -> 14949 bytes .../qr-payment-reference-non.print.docx | Bin 0 -> 14846 bytes .../qr-payment-reference-scor.docx | Bin 0 -> 15510 bytes .../qr-payment-reference-scor.print.docx | Bin 0 -> 15407 bytes .../PhpWordOutput/qr-ultimate-debtor.docx | Bin 0 -> 13389 bytes .../PhpWordOutput/qr-ultimate-debtor.print.docx | Bin 0 -> 13288 bytes 22 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/TestData/PhpWordOutput/qr-additional-information.docx create mode 100644 tests/TestData/PhpWordOutput/qr-additional-information.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-alternative-schemes.docx create mode 100644 tests/TestData/PhpWordOutput/qr-alternative-schemes.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-full-set.docx create mode 100644 tests/TestData/PhpWordOutput/qr-full-set.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-international-ultimate-debtor.docx create mode 100644 tests/TestData/PhpWordOutput/qr-international-ultimate-debtor.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-minimal-setup.docx create mode 100644 tests/TestData/PhpWordOutput/qr-minimal-setup.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-information-without-amount-but-debtor.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-information-without-amount-but-debtor.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-information-without-amount.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-information-without-amount.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-reference-non.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-reference-non.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-reference-scor.docx create mode 100644 tests/TestData/PhpWordOutput/qr-payment-reference-scor.print.docx create mode 100644 tests/TestData/PhpWordOutput/qr-ultimate-debtor.docx create mode 100644 tests/TestData/PhpWordOutput/qr-ultimate-debtor.print.docx diff --git a/tests/TestData/PhpWordOutput/qr-additional-information.docx b/tests/TestData/PhpWordOutput/qr-additional-information.docx new file mode 100644 index 0000000000000000000000000000000000000000..5536edc78287c1327aa1301cdc21aa0a47f2a1a5 GIT binary patch literal 16364 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 VA0omZG6E97=;L6e6VD&t{vSr?>+b*n literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-additional-information.print.docx b/tests/TestData/PhpWordOutput/qr-additional-information.print.docx new file mode 100644 index 0000000000000000000000000000000000000000..14a067c8013be59f9622bed6d6ad68395bd6fbda GIT binary patch literal 16266 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 literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-alternative-schemes.docx b/tests/TestData/PhpWordOutput/qr-alternative-schemes.docx new file mode 100644 index 0000000000000000000000000000000000000000..f8216dc80df6cb42588739147647c5c30e4011f2 GIT binary patch literal 15986 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 X;-H`H`X9qOcz{u00004&KYslWf1^qs literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-full-set.print.docx b/tests/TestData/PhpWordOutput/qr-full-set.print.docx new file mode 100644 index 0000000000000000000000000000000000000000..3e9890323472d2e7be55e3b69c9c15fa32e407b6 GIT binary patch literal 14272 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 a%)(?PKtIOyKbCdy0OP;_045B7eEWafBVlp? literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-international-ultimate-debtor.print.docx b/tests/TestData/PhpWordOutput/qr-international-ultimate-debtor.print.docx new file mode 100644 index 0000000000000000000000000000000000000000..3454a5e880277bca0d1841acbf3552b9d68cd780 GIT binary patch literal 13285 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 z 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

eFxUvGLnqd z>{3C%?Q7{rOen7pT;%T!0~47MY~ZibmaTvEUUEXsS@t53q*7heOP) z>+17=zjwayu`~^jtgRPD+`;($Vdl(RdfrJ-6Y07D1v{vV|Fmi6?LqLnV@a}jh$kCK z@1(8pXM3P4eH##*iQ%Aoh=Nbsb0?-=k883g?O~a%|Qh3i47=o08J_qeazjn2?HtjRGTv{hQXq?mGTgC%Z>A zrj-*sW)RGDRe6e|&I++k-rgRQJ24)&+I}+SO!Bx&Ms(Uyf?)2w_p!5wQBgY|BiMJ6 z7gbN!uGvXgrBE{&y>XYM`kQoNk7N~X8U{>?n-^ZyIPf1=mb^qMljeV3;@tkAQwVOI z+oiU)*0WSv*)ZO%+P8I|>iE!Ay=-IH5MQ`CM)jTwlywUBtC>;>y^}6pgOwUrLYOPy z)!uOn%J_9k5Gdl!tv~KgH3bniI-~WT^08~w1e>Qy$_Au%)FTpT+`RKlj-@aSLnYBo zomGfeQF_>SN~%N9G5rwbsbFCX{IVTb${dp3}>qo2dU zw5l#XKO60A-tnOFglq|N0u@Keb$KONshSTLs%L8-%WNY>JA*=J?kVCd!DlA7ETFTk zbZ$cHByl)~>2yEhK#v?Q>#7Mv5Y$ZE5yO(O*s^Qc`JQ0=)rY+UMcCF7NYZO4HE^ZF zoY^tWl@&a(EDO%cJKTwRZWQ$KG+E&!z3=kPStl;1*3R#XIqyP>h1=g-Rc|nIirYd5 z?z@?n>Vdt!9(2q@m9W*eUGA6!Wn?^F>LO%dopk!@X(y859a=XmIo}BdD-~XDbw#dR zunD@ExifWf?swe{1oA%SDAp3KnMUb8&m9PAb?`a;HTi`oTtMK<7fxM{9skSK`-HXYiXt`rax^&moz-P`2F+n_7_~a zf7I8Ws=G@s8)R2c=Q@11K#O-R9bMq646Iryg(-Q9R8$pWI zNzR;2GKU6NrL!>INThip9Ui6_#IQa)+QQE%yeQymtBHcyd;REN^oY&Xt5GKmpZj|5 zH#<0;E{pt;CL7!MAq;+PN>x0c>#`oT30bzzghs z|3Njqc>o&#q_G2l5CGJ5z@_(B2t(;9J8M&vscP*r6Kc~ehWtQthLyRkb!=ZUudUC$ z$B<=_WEM6c4OzH}Jjy~X6qBsTms*Y>Q)KH{$reFJn2d#?4(%Uc06Q|Ek@^MxqvZ&;Tm8cZK9gRx10h zchas-_#c{W6|x{&PIga(3z?zU?g~iUtOxpA)<{$%A4kiv?1ZDG*bb1dpcPnce`#8B t6x*%9gZ|z2qb8aDzqZJUmm2qX*X|Q301*4T>E3*LWI>EFH%xzz{1awGZwdea delta 2069 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 LhAe+R41j+CR1fii diff --git a/tests/TestData/PhpWordOutput/qr-payment-information-without-amount-but-debtor.print.docx b/tests/TestData/PhpWordOutput/qr-payment-information-without-amount-but-debtor.print.docx index e78b29c5d6555ba0009edc047e25b1bed92c8c7a..2a3a332caebeac48e484a7ed716d791c06cd9d33 100644 GIT binary patch delta 2008 zcmY+Fdpy(oAIHBgb3%ke7bBavh0NK{CB<+s4Qsi?LP-`8 z4!O%E%3UZTF)6tf!#T|F_j^40{PTLhU+>G~{rT(pC8CT}Y6;@wzg}L32fdTx1~6~| z4>uT+Im8X9-(}fcG`i909aE80C4~SLi_^V;qHEJ z*L^Pg2CIkqcrQqg_)eh~Yh9p)JxS`FwCD3`z2227$)JPnM;H2{Xr2_Jse(yI((7_9>Y#Y+~&)WbCpag3cI(L^Jtv z@$YY9pr*zO#{+$bACB~yBZCV)(5vQ>_ha}OLZ@lh;;h@;Bqo;ZpG?%efze264&5r! zGHvyImPUpdg{6u9Yb!0* z<+D(B38zawvEQTx3G_GW=7axoMSHmFMIi?Lam&JRFgD(vri~|~h_Ex6`5<4Q$~cJL z-ZGXkHtCOOuk+7{$=-S64|gr(crJ)}F99o>E-z+}3Fn@B56{uJ9Bg@vPAXCKT^6z+oBn zwFq8B%7S z{7DV?9K%mUS4_*sx`?R8MNOp(|M_fv*3qYZK-AVDqVfruxc=BUH5I!cbZpfJCQhT= zuxYu%KYBM%oF5qtFVBrI2tx9fr~1CZYYEonoorfIcX6(}&*^;ZdoHNBK_5)4$cs!2 zr|W3IUSFW{ScHW{U+Zoey3<%`QPY}^ke898u2{xulWt4U>;}ETveasj&`^oZaXkHF zAB$dlN{`GItZi`Xf=*zdAg79%;PDGsECu||@8J^qp>5UT+s$C)<_y}4;Zc^8kDWy& znr6MqzsbibGVG`rzp!k`Hp0EVvf*GJj8eIz*c0~r{eu-BL`|h8?;PvH++!YNkWC9*E|EV`D~`wb zjg|IToU+mnGXuS3TiT)lqA~@b`RFY#56DmSi#9P>ITHU>+)|Va7Z03_pu$-0d zAbY8X*xN8?yE{vAgH0qnV@>1}IsC}he?+17%sRrzG`>gYX@4+FvFhvmcp1yTpv#k8 z4eLW?AIpyE7u6DMbQ?D7odJeiLpAfxJFQF?_}u%7>K@pLeAoEi$&~#{u_%5pb}JO< zlRdc>*DU7TBV8^ck9zb`iat|x@CRg--0nv|{E>6+XNOkrAoRoxgcsQFsfKX5b|ZRT z>IbDqzjF9+09j?Q?VWp(B}lzE=;do~xg26rl|*h@?SNPdNi0`#i|%Roq>y6h`aK{j zxmu%XRH-XeGp)2{i?1LuYam=x1j+dt_hK#&%+~L#L zcvGP#6+C$4^PKl+$}_{xz_Sehp|II#UD|TJ@aR8H$biN3S1*+j3Q*n{Xc=aDU`qNB zj5756WD;3$B=v5zRG(8X*4?O9QTTQhm1GcfdVfzFwwv?8t}drHd!cpdb+Rkd&woSuinr>i+RMt$WP;9GVj|}9dE*Q(1=x1zEzcn9@JDSgJeUOmG3%aI z6Z*93%&|voNy88II{pS#(|1fF*0IImGmbP5hldL*U(iPrT_1ctwNaeBk^pf=P2l(1AkNp(Zc4i zRP&gbxPlpTXVqEUh8aF@qiUGA&H8g&4sXuKFA4Ah`+!}_xTvV@!6iwxjhD+1A`HIg z#H+vOI#e&jB)4L%iQ8*QL+S|ZI@IpdRIa+~Vz|oGMRE1Lt}a()&}gnYq4(+x^dF+X z;)(hljd0nuyh=N=03HCi#k)tW9cXc1MP#P(fBEI+=d+8ipk039&3SmSeEipWX)W&E$T~*l0eO=UH4yq C-it2) delta 2183 zcmY+Fc{~&TAICS#C^wVjnA=t(lbo|;--t!7LcXr=_D$}D9ARH)jOJK~4vIEc2+d8Q z#AxQ2N@$~;DQDxx>8$f!~0H>TWH8o zf!tzLR*GAYm*wWU#)N$QF9Wa8!8PEDu0X=>u!C7qxgZq`0CXS$05Jdn5Egh9e+(ap z3-$jyAVf3V-|w@FGr34tG=@=C_^K8d)LH4}d;AXG{)EfZ6Sd|mb*i|xB?m=S6O8Y> zLsL3GNaJve26y{XZz4*YN5*~DM>_&1$6sdFndo$?NYhQ2`2DKDJPsb6(;l-$z)kns zz4Xvd6tfs`a(i$#CTy8L_UNSQDfyxVi@T;-TLKf(+Bw^0`MiomPf7+vwI$f>vY>R} zVB=xT_VIJ(z!dveU-y~ce(c~n<_+@C@ z$6F%VuXxR~A12dHvJhR~7wl7S*b%1gd0OG0_==_Kmvw6lq2E&=nvDjW5`3LXNWPtT zA!4dM24*x0iDhA8{N)U209O#V_-cA+$RlhTv>L!a{4N5=?>dP$2E*n0RO@sOKUwB zmvJT6iY>d}vLz^NM-R#VatFeTGx+c`adz8WGkqqX7yx8k)9C*yNL~6)y{n~|mf3(u zJ-7c?$jbmS@AT|4!nZ%4P@Z_9Aap^wV>M%>Q={`K#IatE?@f+pUgFP=1(bNImm~kB z3NQ35<-aVKwp%-;lbei!v zD2W{q)XCrPw8N~ki)64L-TY2+)RU?i-=3!|59i{OfBy6dr`Zww1+0SqoDn5xsGLbn zFS8XadC8Qa5pDWsE~V5i>dBrSloA5F8 zQ17>+rI8h4`V@{2Sd0E+`W;5fIV!ZGJnO=Ca^V@?BXJ|eXyRLIk9y(+AFwCF^nqmo z`+&8+vl(r6p_(8W6>m#QqEFs$bJ?b+Q{d9iR#il1le&IPX8(B(l-2eGy!7eE_`(%< zTS5Y~bx^V?O@T5CcXppSV_L6eE$}+4vXeS3+|cpp=xr}8i-E21er6VWPPog=43V4$$1kW{)yunxoevC$} z^s!9?`zAG3zqnU5f3v5yZW}CO>m5re_gFrET_l3gK5Q?=vk@HkiuF-webkuu$=kS; zBPyzdlgwLRw3b`MuY06W5o@kkZ-s)q8a+FwMJ4wz$)d!Yr_Tw_$*L;@8PVf*tOGQ} z!2BnhNvHww4eZ%I(u3ez8cp_Dp0>y}wu-XtYte$tOxqu;FcrvTX2SCl-vk(tUD(|I zKjb5yu`IuAz=*Up1<{7t zLW4Di+9@Q2Si$}Tqa1;FM;5%_=}r0f44Y9;)OitOlYc0_#JO2YX#{1i=~=X38lA0X zDecJ1NqT|doZ?Gtg@xe;C#J6Ds?~3VCS}L04~!bV&l_f!y_;vn4OE7_8U%_&6FxN?&03ajPE&g*O)IM3Zbx|s60D2wkOq5`TO{Irr2G^}gW1>OeEPj7=bR@R3+Hh< zjd|9e&%cd@J(iQXfq5$DATRA6ct!p|O>+wBz~Iu%iy2&(I?p)ZkmbS$@6*@q9WPd? zzfa##EjISC^%jjFL6;=B${|;&{2aeWSySlJ!y1C{DRA zot9m8%VCeiCRKy<+9Tr;~y60Td*Ion=%~>>I>+{gHzhNHP z0iX09%6AWiYwG33*_bI_BCJ$8HehTi!9vt%KBtSS_Xu&EP=Av7=Aj|P5y*=XlOY6l z$I8Xy4n=YWpmHFY5L!57Q?|lFe07&HdAH?AT{cGD{62Evk0`KPGVzB^m?3csTnBY3( z8Z9>WCkJWzD>8Om54`7)B@M}3EjL7Sb=E)Sl$^rez@g#vc%I$+lXmYH-$nHAM~lU3ka>+2V0$5~ zKYO5NH;}Z;@;#3Keze$V&Hqw8n4E4b#ofqHWTn^aCP2GeA-|KmN{e+vlAmiGB diff --git a/tests/TestData/PhpWordOutput/qr-payment-information-without-amount.docx b/tests/TestData/PhpWordOutput/qr-payment-information-without-amount.docx index e24b2299d1efb3f4bfdb4c72889c96e5e83adb1c..c1d35b1fbb876cc2e5c56532e1f8d6c456cbfed4 100644 GIT binary patch delta 2038 zcmZ9Nc_0&vAI5E?kb5%kHg|Kq&SK25wAcvc&O)uo8zNWfn9UJIOxbvmlw*z*!erCj zFG5jPyslmpA-T`6pLc$Lz2ASH@ALUS-@l)>6u@pWprS|^1iD^b^;}p)mbWmKivYaE z`v`=$P$LmDJm9YyyAKxBnt6bs?gtRtdv=Lgm%H`g03Tnj9#udu+V0LlS6V z51Sh+>LCm5P5f?0urtF8snzVdB8o`mOAWsl^IkU) zOIz>Egc%x=LYEim6dgM+l~+ALXo~J?&(qx>wXAe&_(5YIeI^HTkovp}rG~gGCJ}9FG?xae2aAaV1 zr%xT}^TOEWSKNKPc(Pak*wYAi%m8QUO9nR)Q;#gHc%hlC0$@1v+!n2n(tei zyMAvh!N+U3scQngI<)lMb3#B?E${-gl8{UKrl&>Pl`?R6?Y+Uin2U5y8Wal+uT487 z#)(0FPR8k#nOmd~l7vs!?x-g|CNH@Piqgc>yMi_G6qrTOVhlYLWt0~trKPrs100jE zSTb2t6Uin&n$UO5AS_gD+G%gB=YY9R>rG+z)fIOCJPtpqfv2e`e2gOH+9akCoZ;tZ zCQs2~xZ~$2qhOPq4yobLxuldj0~h7D9x-5io_hbrCIcRLw%w_(Z}uT&BGp0(Qzp#S z&Hyi22c1S>g$g}YyIar5^D$V9_+ri_UoygWmMlxNnMa*ZtxUH-6`9pZudjznrb;c5 zu+*>Gq9^Bag0(7q^4vY5rv4n?ZKTs{XjONF+R^H9hf*c<5nHYR`)Z}=XG+laLlXG> zkhTzt;?%Q;xq3|`uu08OKtM|tp`;l90vr%jWEjiA{#5!frT)X#jj1bspPjYP;WqM+ zthXH%rkpfoka%UF7i*0T?I)HzI~PSS?YEG1jjzF#I~wLMnro~q5WU5>M2Vl=#l0tb z8@DYHwcnLa+`2-G zxm9XI{Z*SF@WKLf?rc{?7AfUa;K*DLKr`nuk;ip&5J8HY>}{<>=CW4#4rKFSW<{N8J< z7}f)1vdTtg*Dg$-(l>~y(Iz)a1vKYBJFpnRcUWw>Kog_0+HD=T6>9#6aNq_1m4hRN zX>B?2Orwgm)vok!D_QGZJx&B<-x>OEgN66w=e}08ZrE#bh6o|yzATE%SbxrR=hlcB zcX6|5}?r^YUEt@X{dwwgoKzLzu4UD@{?@MGL-0Qt%I~^ zzT5(9iFL94*TpkO?Fi?u#J2fk`h#n(BX!r`FOB8NLJg({E99 zB%#P=gy5M*TD3i2KVe`<%}r)*E-zv_Xx1}OzIdczhxuWp6=siksl7H3H7#~^HjX3V z1rZ&Tk@Rp~lw(cWl1D0I<5f)^zPiI3uJ!*|nQ+9ob(h$0XWql5-cR#=T`>Cf;wJR_ zWW0@hQ0hz-lKqEsblAMv`wW~xTn*DLS2~~VHMV)K5iG5A{c_ts*t)p;Zod#^txS!anA15SBT%$ObJ(QxU`}q zZM^Y2$BARCKEIo!tzh)-#^P^jq?*`{rxeb>qnyRyk8@>d7Lh9x@YBl6*^wIj4lQM~ z(h4DN@P!_i4ziFWGi?95)lA}B&1AAjdx*;Chjm=_;dJ)Ac&oHbP4C| zml+d?7)A$EczONBi-PP%%O1ur$WFBPs@y?B_8acxgt&WTl}P<_WDyGwdK!4VJbu%6 z+5ZKRWSC_k@8EH1XS>_GHNz7|ab^zcb)l79JuZeEfgb)slVQ2^GFRx&u$ywVuePRQ zO1S_BTM)lAACOOw@8819*Vo$bxsONNfxJ4)Hq_lG?~$WCLM=y)@h(&o%zk9REat$! zgz9y2l&5G*G*8KvNS@YOn(}nb(u}8uR{QrGR=EE*WtWvcFT%Bg0pIIU;aCNpMPp&W z9et_?R*q-y?Adk$Y6e!3XY2OtrXh9U|KY7YJ7`R;N6ApNaU#5g84d=lM^W*({Rbir R1^`hraOwvZPVnu`{{RLpyAJ>W delta 2458 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 cQp_6(*hY>-$6hkBoG@XKwPBDwU2C#k%h*CU zyD7^s9Aq7iEE9>NLAsir=bq=ezklBEUB2gget*5W$!zo#w%RgYb}9e*`U+nDbF867 zx{QrAxXFmJ22!}}I!o}Di~c2S%fDj@jS60Dr%#qK$aZ2s|1Xp!Mx&ZFWRlq2;X?!7Veb{y$O6(UUb1 zp$GwKFqp?Y1}H++%Q9TW;Ge=r8uaqgI93%YXx@CcUSW9QfIK#exi2jq3m>R0go@qz z_XxjpFi7)!kd{J-*tkqA&nX0D%Ax-foA@&?^m@(jpslW^oE!!_^ zY390atJ}AZNPd5@b8Y=kaDmBO)A?Tt);22qpvzLl;-zkL*@aaq(JvsO-|0RkKq;3d zS|-7@LBn6lq30~V*JXhd)?N3&vc|k&^Syq+r$|4!x#Gq2NXqXaC>dGLj~^rCE) zpx&!pK2YuK2mhH}Uz+-bNs|=6X}edQYxjgGJ&Al#xKTm8uL6PQF?KLL=8yHD%0WK4 zDLGBtW%EDe}I#M1?u@4l-`h+E9ASaBfJzr{YY9CM<_s-90gE()#ME$D)Y z?_aE`QgUzKYqX_%T^|tq{++gav2hOE`uUH~`p4L7#0@k37?Rh1gi7gD4Fd*AE zs%PGcKNHQXG{nt6FjX6>M|ht1|HUGttb5vLEw8Md$1mKSI1Y2Zb?WB#Z6 zAr(`R@0yC*Twhyo&S`_RG6}VD&=18Y&x7yKG@d#+&KOwYJ z*dTL=DDfUK(nbl)?NnG|Xf?sd)+$a1nn-acrC)7O4H6o0GV^r(z<`Mse z@@5y=b`YHN4*w8OoQDr9mZ@PQa0NB`x*VNbZDIWzuuZJr2bA18^+7C-8WjOb~aUQvoO6Gyi)nWIjic@Te`Mn z`D+`!y1V;bD}%sk*|c<-C-(rt<^c;e1~?c7w%qbMvbjo;eAJ#sfX_BJy1UT$7L^r z4+734V6{mwM_+bjjuu1SUd}!YKe;{SYKErHaA2EgScYxg02kb)9fXWi&9u#g47TED zD%TJEoIXD%YsM@{zmBfHq1BfZZ;iY8lpLfZfC5u0?qJaYb)6F>7o4j)9Lp!(>{d7a zC=S_!*jTXha)(H4}DjfQZzEiUXlnNJ^%XEPCUFdg_txo63W1Q9qCU E7mBV4{r~^~ diff --git a/tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.docx b/tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.docx index 17d1b0211ab410415dd24353dfb97687a9ba12bf..042d713c27c22e884993ed4fc4b123ab0789fe4e 100644 GIT binary patch delta 2061 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 UNqY{c-6_(d?nw?q?LTw>0LGjflK=n! diff --git a/tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.print.docx b/tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.print.docx index ea9b5438f9f06f436d73c431a3f0c2d36118e3b3..37285b1c1d133fdba0841b7ed1131997461b0a3d 100644 GIT binary patch delta 1933 zcmY+Fc_0%EAIIlDa#NTwV@i%`8rv9QA~!h_p_(2yFLPfba>he@+zhXY+>~gJO0E!d zJkK0CdR(QpS25{vy;|=-?_b~F=kxph{{GI!w#Kx0a&d5lJ$vfKrFfP#WC3f~SOXFy z$r^}uvRf>nFPHR7^n?3YB3<5%jd1$xAf;_!D!>f@oWKA8Q2+oC5ftL7;TePr3%C~; z3X2Tzr@Oe~OHdN=%O0;=G`fU^kT{%64bf_WK28oeZ?-_UH|3u5=D()Mr#s%ftO)Bx z47LV;>3w^`JzH*BONXjnt?xe=vxU7-GTdXTjd6LtRp zoz!*ixk$Vp)D#Alwqj?jB38` z>#tncM9n;0;t#3MH8)VNlHcBnG$eW4ly0wfl5r;73tN2r+jDc28%a z`Tn!@(hU(KH$|ud;ojITV|xVP`J<+7YWTU>tHCKHpI@S4d-gWL^8xQ#qxBlS=CZlr z3?KK2XNZ`$+`Q}WIDBK&0~PpVioz2oaKqjWOV=-&szjFPL+Z+!dp&3_b z#c&UKDZT{XFPXgXS>A84E8oE#+j%8d$n(3&Yr7YOAQrY0_U%Vj*OV2PeItrutFQhr z`P3D~k?=l^te$84W25iPwO1M1Rri%c*Cj9c5gsNQQ=OO;t|<76swc+5q`af4dNE%y z1Mqge>};L$!Gmp}9KNlPTrudDNrvc$h34%(9TbR+;A7QKhv9)7+!zPJ6+Ol*vP_>|Mb34NEX2SZp0 zI>fB{A`2Panq^8VU;UbPr}mjTFAqW-%fo2nwgDjh?-x}tcuR3lQsG8Y=WwAqY-~0h z^3-zSJoo?&ZKzJYh3 zb(Q?T<3Y^i54$KG@G*YrC~b?ctheJ$U4g-Tya(?aP`UxbV(RbzXnM=83UnVe#QhUn z755^(rspKK+Km)MZmu{s7N8aP&%1|fv zc`f_+@?hyZy`3n!)FcxWp_Uqug=8@KK*LkWDnG}*Bm?#y!!sjFrp8-4VBDfOtqn7( z8Bl}U{0P0DoxK@qL(!u#C@^a0)x@MMeFdheT5?_8ar+LxxtaTNIWp7txVzCPektR& zw5`@qU~nyh>;OZU7M0$BUWhlqIr>>%9^g7HuVCGetFbi7YCt*jsS8OdfI3)n= z0A9e)4jNTf`&B*vTpVI&HB7&n#xJv{zQi&_+NBSyO&8pVCE5^3?w^9FqeEmRRY#wd zqPp6wG}qN-WtuLAl|#C}_PiKVq5tnLq8kRzI?2Vzut^ddG4d>;o{|ai3r3Dbf_gG+ zBE*Y&5EfaTk`d8I@7LwSQ&J?>>M62zD)e0~4` delta 2271 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�YwD4aeM ze!C_0Y@2LmX7tO=2k(C1!5A4&k(YU8e>C`NRs^jjgBJx;ry_;`GJB#q_5Rdy?$PXG zujxK0ETJG{g(mge>fxf8E`q-E_slUd9Htlj>%mO_)tTsiMuufjym2U&fO_Sp*(INR zk)stm-k4H17$((LV(2<_NuJO_}WswKdIr9mVvNz~cljjNNfOJk4Up3$R*dM%iU| znQ%u4t}{vP=1u7Lj@UE^l9_&6j1%lms04?~jI4|1CRr)6o=?W?iiXnI{^G5cCVK9K zhi4jS8;dq$fjQ@iean3G?}{4C@#)Zsn)e8rX0_X0<)PubA+rR79)AY>&7(m^%#x~1 zU31{2^0<0oU zm~7HD+aAhyV;u+F+s#s*w2r;Nao8zU>P6b&Rdf_;xR$U;UIk!vp1PM%1K$9eC>uJK*34X=y9UgfuD zFJY3Dl_j)}g>|mm*oQI#IFlI^q2ZTxh9^O9B>hm{}G!!J3QK#vp6Zccz z>bv2PuR!R%0ywe}l`jOArs*gxuE=1f>c{~mQ*aiQt|?EkILwiZ-_7X{50+Pb-bhc)DP0&QmRu{XWUW zLHys$rM8>spWCx8SM}xt5CFKzw~ygn67$aUxIV-`P`*eZ?J+rQ56Uih2%i=I&xh2w zTOSeE&fAUp>>^y^XLeVg$E{OcF-ppNE8y?bZt(4{NZ6f|`qxY+H5H@6o57PNnbo`f zgxw#(-f!UNc^>yS^$q3-?=@dB3Xl&}F{~Odaq`9IQ!=}W^TPjsYa{g}R^`avW(;ds eyFmZ|x)lIG=I52W`aBNMqo!ju1Q*bI?*9PP^81GX diff --git a/tests/TestData/PhpWordOutput/qr-payment-reference-non.print.docx b/tests/TestData/PhpWordOutput/qr-payment-reference-non.print.docx index 8704972164710f3f0b6634a0e549f517b07d8214..893c76887e60fc1da24eb71d48a8c6ccf65a83fb 100644 GIT binary patch delta 2054 zcmZuyc{tQ-8y+*(Y>_>?iIHUz22p8FWI2`wQ>l|(1~X)6GR0t+kS&w7u@99lMwTHO zgz%~4*q7_FWIG>?T`0>p#_2j=-}Sw}KknzcpZk8^_x=6x-uu{*pbAee5O+v*)g3Nn z5q6Ov@tlKQz@#ME1=(JDflZv3As!K}CtKJ=tn42g1eV#cwp7ikh6@0=1OWg<0000k zAjlKy8Q>9u_QC{f-$(m1WkxX5uoZ@j(hDe)Sk#*C-MUKroNEww&@lqPR?8EYs++1;wu968NIdv^`)3aC-Ka=;3Ufk zxhRVmpJ-9@)na29HKXPTapAn{@#-h{?p15lIf{Z{G8KYPgzMjU_jtC|Ac$j zJYt4YbSe;d_RMLI7B4d`w3T4QT{BNYrDdFDw&Q(=M*doheDyjNn`7n<5eV~e9} z^Y|wzg&xbUrZ(;uJS0Vsp~zHfY>$!j_x=OyxLR|Ap0llQ0q^h^F?UpFVOHZSH^lh9 z7`Qjtqb{$iEz|eXSnhPz$_sDVIfFhV(Xe^Gq#F1Md79bI3L|sYFieg>9MF5J zj_l!ns-fqRmECGSBYy>}*dzgnw=8mOjY;Y)Q4tVC))YtF*JrMLevEDY_hQ0 zMGHQaj~DQB%HQm+L<$Bl)QC&+x0#JiSAu6vLc`U0jNoxNa z`Lt0;@FwYmMH0NMv|02qAIvTwFqZF{(K_&a)7n{I>zDU>x>gw_zJ%FY85^se1nY!g zj22%y`JT>uJn&g!kOWDSD1eq8@*$B-k+1b7M(v0JkbebYcQT#_r0?%mPQd)fmSxJB zhUP=)ErHL>2c)J#Q1sdoM@^F$PKS8Q`_|Mtr%0p=dDDg@_%Iofi-p~iWT@hJVB*uq zyhN|YC#(4irEfS9uKCnxKhm8xh)4JrK!EwXVMQ|hG^{9a5S*g(rJ{b_W`9UwYx3NW zN4>^bj!}DUBK~{dLrb=*)#Dsx4dwD)37b=v!y_|<^Uo=q8121rwj$%UDN?JQVp(WC zm;WM1P0AkZ=R~_{|22ijT-<8S@dt0|E3ha~;I9E&e$Pk} z^5aABOiagtt8Z(Hm=%pz-7_{KLb@%3w^xGyX}2aw7l%MKwsgO_^lV1rj)ezwF*Hl*KI>se#Z=LhpKXJ^j8saB~^}h*5}}~j}z$+pbOS7 zorMS5rydY+SKYEaf>IW9Hkf4t<@ytU)YUB8&JCCEiKd+qE6&uo{F}hPqxE#I3C5Jw ztaMR{{*gDiqr$ro5#UbAuAzN2wnaTRx+gym=kC@MAZD zqH=e8I=iJzFiqWGJPWVp5{`P948G_hm?Vxs8COFE@`j7OHHcFT00i&?4xf9!imqG$2LKQQ1OTeS!3sxt zk$Ka!L{4Y&^(@}xeQjrU*|*jNjLv2g`v%tmbk z6E>m^j{4;WSA>2|95TpIhaE!yeX7F{`nl+lO)7s!l1BjgFp;o_kz{Yp0lWzM=TfGM zLRvYj3%Rho!auz%q(?4+|F&a;L;bz}pIOdPsy~?sWc?BnYl7%6?m9JckD;RC;i0Y3 zQ$3X|0g3x4CV%SakqZ#=aU%t`h&O&PxsufZv8IXrRIrd9`9XthXQa#)+0`yMiL)lT p^8N32G)?joqoeH%$A-1)S*hH95&#hYWzvQ=`A;J??kT-P_CEm~eHQ=# delta 2041 zcmY+Fdpy%?9LMLfHB+0gEw@~jT$<#zO^B?`Wp3qC?T9+tDz_<%q4KjL=B^>+(B+lN zawjc}h%Sm`6;a445}o5xSadY!pY#0l`F=j1@AEu=z6T;!SXFee9OguA?J=<4M(L1- zx+xvgRQfVD++3@|gJy6#@eF8-qX_K_C!2Jc4dY z52reM~8(@sXxgW#Ld00R2rh3uG%w2F;{r0@KQA&w0o=jTkqEFM#<&FrFHVPLMRV20(f)&Do_pZSMuk=k0j~(wY(b- z@oZNMNsU@`&}IpsSCKR3D7&w$ zyiyy(pDXUmO_y}zao_>wSz2For?>eY0H`N=hBts6<3_Z{fXWT)7_)uwLWL>YI3twW z#JGQVknb|N)=lC@B2$aBTx0aezFe9S!2mgGVIDireVCAUO}C;H-@=%bnC!QsTb^}7 zWQFYvwgfXlJ!YD2iZOOSJFY>iAzJ!h+3X_*1{$SAbDIbNxvQ=fm!Z5iV$_YCTGyZ_#4y9=k% z-d8z}+~JDt9T=OPXz?<_zZ4&7eR1A6%%NGCTnAU3v?wJxR$vt6qhtqJKhc=mW`)Fv z{KEjpYV+O~h+i0vD3jy}xl+5A*6dgL6qH_?l%!@~7m3`H`#LkjeBHhnQ_IL)@3)Vg zIP4vl8n8R+rX*KG7ArLLzAgB#?2WkStt!YSYQOHMDlgMLvt|of`yQt9dYbWqXUGc{ z&DASjbfCc|Y%r)Y4lWT*-4M+c-C+n~lL2_?K<7+?aXPJsta8wqeWvTA*EnJKVaSi{ zb3~k*D+ggDq!hy)K1Aut5QBsXk;ST*a1$+da56K&_lkovUEnzyEZ$ z(CWJdcMh&8AFH$!z#d0T=V|#3s0=}WW#BgW5T4&4a~CI?3(Fgs$BVM=IEoZjghKC_$uoK1A?qje4ex--&?;e^teJT~?>U`$8ko!+j6H$;>>M_~k)^lD1b_S%@@1D?Ce6g(@j znf#)$Rwj@n)Nk-a&(cp_gIwtIelSg;=U%|ehQ>lb*aI!4IO{A)vQXJFnv;6PsXP4a!V z720T2-9&^ByE3EF@PwIWkSB67Kr|dia!LHl6E{NT;#FjaTft-JXvSp8u22etty6XO zY;&mBjfFY6Jnd@E<#tU&Pw`wSMxb7nF&2z%=nBqh8_<)Wgs;{cq;cy<>rniPPTQ1& zTO~-6Nv}&ZpJM%o%dnb4@Tn4nIzN10;If<-MNVE7BnyIqek1J}2D?Tw$(Bd5Qebr$ zn64#14Btx=UjMdHY14#tTw9Sb#Y284JR2*XRC}#*wLT`ium3G0tTki{OnFMCXp|QPyvpU@ Q-);o`DGvf&u=?%(1p|Vef&c&j diff --git a/tests/TestData/PhpWordOutput/qr-payment-reference-scor.docx b/tests/TestData/PhpWordOutput/qr-payment-reference-scor.docx index 5dcd9b3ef65dd7fcbe64d10e1e20b772ac21cee9..c8c07048ba24bf6f86634877924e8898744639e3 100644 GIT binary patch delta 1991 zcmY+Fc_0%EAIE2o$mVz)oAW6-Mve!=*qUpx#a!{^$~n1mpEDXc9*>k`TF#g|lOy-D z2PNt)xfNO^kuxib@D5MUdjEO<`u;wj-|zSLmr7*CwGeo@d1Kn!{CO3{IKwSy9T#Un zNJBUS#X)ABBaCHJe~KZw0glL$zsyDc@$86lAKJw70RWAf0Dvd}0Ei2VBxn)Bd}BiV zLZda~L#}SRx<$Q4h+mucT-fUSgch0qjjyYkQcKw!t=288X1+~Y=XXo4?X1c3)BY$;6Mw$tqww1wHu5708up37C_+Fod2VWmdn8<-{_CzoByM^c$+3- zxDpU9n*xI4>e6bII=VH;daI>W%oS!q;gG#y=;-c(WF-7V++dy$ybeVum2!U33<$~GK4SPrS;UgR@ zOyvt1esi>a%cE^e*q8ZMNRGE!;sCQDu(X!fOZ zvi7F~8Z&dS*uH$YxkIZ|R>ogF4mG*`-PHRzh1Ru|vZ3G0+;1_|^VR-z%XYBOhpq6e zyLRfA_y(@cIbq1kxMvl1rbPyQvn&C>EXzEwZKLQy>+CB}>H64*I@7@xP^T1q z|7QD`s;x6p(Z@Saq~gIoFP&|Dedh<+W;|)DXdLkmZtFq>f>&-hirLT+5~H>>h4xXr zaep~@`U)AyycsFM15eE#8An&~N^`lG8aUS%@p;-8EbMMK+sb<0*)oAuJ&5v zxkG{CUSj347tRxI{`m_u%EZf`@SY(fxIHdaSWI5)xjdp<#u{5i;G+xZy8*OAY6VmV z2BPU6CefwodMSATixGBo7PRq@DDY*Y>x9eOB(d#tcTU>$FN&PxCidrs{cR{PG~M-= zyjWO!;8Ezew|{eaT{FwS)ksT>+T@ycZx{)q8e0d%%G3?shJAQkgK~`%kIWS|qGVh4kt72eXmP=&`38`%(0d>0PcDJY?8g z1nao>v;Nx`Hh1rvGUL`QF0zwp#HNzp?dDf3gFsu4%&C9 zIj~jOL3biJ`nK=n(~b6nMzDBrLrd1^<5D8PBJzb^wqtwj_3Ek9m0nqU*W$7A11`13 zE143~6ih6Z8Nze^@ZxoaVOD~r#rY(9mzYG+U6Qg@yg9cMU2x-lF)8VGkY{`tEz&31 zap6rTf3r&DFZGU)(v`(dZqq3;-Dop>ZyE%grc(TuSibUlPSpWD2JTjiABD?Yvm)Cm zbyRi^kv;8@wpeP~>w}Q9T)tzw@_4MqV`B9wigqA{yy?3lVSE4JtsZ9C<+%JJ{gEnH zF*Eq2@vW_Mo=QidI-0eG!HV|t_pZ+gWv?b=od|VkBo$am=m;UQx&-r4kISV^MU_E#rBexY<b&SqcB?B@wu z$AIr&Ly1RFI4NX^=A^BmJ|{B`k(_*Dh~gx#(a*hwk)_c8Hy@?MNSkvqW+cPqNZBwt z#UUZ23@}xNauzAaL8~8#SEGoY6{jR3K^%4Cha#V))FXf8;PW5orAb*qDsT{llHtNo dV5rj^vPQ`O|J0`7bs&^vln7s}!H=>9`~#aqkm~>d delta 2356 zcmZuzc{tSV8XjW^`D~44gfx_W{pMqY29ZG;$C72TWM8wEB^p~Y2$>p*24Tofg)Ea@ zD8^38zAq;`$JRH-*SW6Fb>4sO=enQgzMuE^`{#cD?T-&EwWp&M@_PH$iB9+&wTS1* zrJ)vZUT$iEGd#aUB@lcOr$h^XBbA5|u%y9I#Kw15vYOWD0RSsG0Dv6;0Qh_Q*vr^^ z+THVTxa%h!;NiZC*7F@zU?c6CdiCo)U>pC@+y(EdYLEL9SJwAV)j^OWN%kTm3xh5m z6T%G=!0YblOP)uRRNMQrea*hyg#!n3+1KBc{$?9REah{7LiELAeXk4M z2CwbBa!)gYZLu(ch3AB-qsen4$Rudemv(#95T*-FH}<|)+%Og!DlOfBr-u=+)>n~B z=?ETd%PPae5|`IE9%bO|hFvF?iXkB4o$wyDadVcm=`;O(gst5oHH;~Ln{03sS-82@;V_L$V|?bj1qPm)dj2nqy_-_mbmxINxeRKM}E0y7gzGn+!m+2jC%<$Ga!KRmOHx9Y7!WBX1 znV!}vp!naxt*hHjG_IRB)et`P+iY>U(}h2K$0^rDOf7B8?zLEF2yWKbJeR3ox9>KC zCJMUGT-ElyHCKxRE0;)bAE~Bas#*+0T+&*{3uAo}e4E*FF@*wX|K#L-(lq({y+&Lk zRGVG&l2cW^d-#Lod!B{NvH`-kd|(k`62b+-cu+QIn{R1*m{c7nA;pB)|~ z6^u4Wq4%9S4Od8^dJ^vyto*z^v<=c@UuxGz$dq`$aqa)>W>NxDKJ&v&S#JcXPe1%| z?SmiJ1Nm#ZF?Bgcm?G7u15Y*FQp0zIq%?Pj9qEcK9vfKh277WZ58<;S2M2y2&ap&| zwaowUiqz?1-SO&Na~~LzYQm2#)*RgQF%m7zF&VQH?rr@}JLL*YHSy!rdKWokWOOwX z!V56JX}aK62?T!a z#6+T4<=z$b$jN#85K~(^Ll8`q6que%g7dUOpWcb)6DYh4Fj9;^<-F-3lHpJ<*1KGhJksF(L!2{Z=2)Y$)wA>9?x4uF+YqK8 zwc&VS`O<*j%>sujt{I+mcfP7<%ziB{>mln~zE|z5*siY#8DB%ukO2~tX+p>rn;PhW zsOKM#ir9+&S`gGPc1JJEeP{ZJh($UXYUX#wNfba*?+3NP_)O*k2Y8lm+z&br3|l%w z7zG{GNxU63*`dACh{=jR!;pJL;0rrOxi-oFlg?*ch(@${7aQ>+ug_;L3+pl=aKdI? z$Me`*DpuU9{s(G(mbt8A1(6OLRgFr)nXGDw_~I`8E-PRn>U_miTVGg`El5T4a6LFf&k^4H(R6ovIv()d{n;h(0DIg7crMPi5eXl zxo@>5Shjs>PM&4UZ@}NONkIkE37R?nsf1*{$;iwX z>y3*khvmG+4>M8=a|3LY9Os)ibae@ZH&ko(e}E022H4D zR&sziZLwofZyG*R{uR2XF5gi`z~Oz+y5u*9by(Ce)YXb$uF4`dt0$X~l_Vo>JCL0B zdhq#kmm?R~BE24T7bzugFu1u`>iEy84Qm5ES`Zij1TX+jlJ?GJ$_5- zo8|Y2#%(IeQB&Kkw1WVk0RSEWPg9!`+|*MMc6j-p47c<2IEirIlMFY|qX8ml|N9-r zYJx0MuP9P$O5(Hr(o(P@OhWV@xvyWKyTktz^BME>Cqw`#%cCd`9KWfzaUZW-6g;`J zp2sA)oYIe?JS|S16~9hJn22PO@&)P)L(E`8Ii*2M@dE!EpkPH9gA5L#483q-gsNOJ s;iMSZF#hkd62AYo<(EtDd diff --git a/tests/TestData/PhpWordOutput/qr-payment-reference-scor.print.docx b/tests/TestData/PhpWordOutput/qr-payment-reference-scor.print.docx index 13cd9edb9e7844a4a2ef13594cd017b68362e3ff..336317bd88bfc0d883f46b29cc284e7606d920ec 100644 GIT binary patch delta 2060 zcmZ8idpy%?9RAH*bIS}78Rl+8lWWIZR*EFogd`kJh+0~Nxs4qxmob+#my}z`Fv+ol z7)Kn_hJ~|r-K|WVIiNmNAxIkaf#GJ-XO7^$1bXZoVSa70B}c#^g&S>*Oa%?IXpsYoCPrB%Wq@POW}4`%G1JjMo^Mmq2=4bG9L9L(r@pB43aRq1q- z&_V(;q{LI^LEVf_xx`-#@Yl7WvAgs-q2H;3s>r9{m}LC7)s4Is7Oc#dGHZVsrX<

WF*%Yf(Hk>s1!8x*w%_>6M?1q#G_`lw3~m$LNo<){EcK zfhkw!zO%w7VA6S+cGhx(Y;Q3VXH#80D@y+9*HpEaF0!1*5`h;#X+z(ir8575R~0%JHhRqf{OdmoepT+Kb7CiOoiPCch#E*qqfrN}92l3(3{R&o7`-x>^ zQV!V}l`d8uRZmyVf(=wVRa$@lyXK>zK@ONb;QLUn2^ae)eWc@Hy=F;UMc&-4TmJ5) zB&odWvxi-xzg+km;$=rKhA4f5oh*w{Gw946IA2~E&eQ2w={0}u;xC<_<`u;BeW{KY zs50(u0igjSVi!Cp6Qi}Wqthn?if<%lo%hs^cdhWYYPis`Q1XYkb>Y)}p+Ut=5mC#B z<-y8L#R5J!$LzVyO+D=Ekgp@ewV($}ACMDGI<(kBP_ zGxk=T_{0~r5mR+|#p|oQ`1mMFl~mX%Wmy5YF~1F>v`nzyw6ti)6~F8V7g4EvJH3(x zt%>w~Wq_-ra*Ytbw58dHcVanRZ?b-csG^lN!LB1rIImn^@bZf)w7~rhepz8!lK(}9 zUkc7&B33ZupPC75l=m93j>p9Kq6@x09V5Zq9KkPQ z|3m1~P-T>`Fl!sy%I4+?8$BoIRheR`ZmRBnySVw0*g1C-cj1oZ>4K%0>dWn$$Ls%n z?N;DzB=eG}!p={rk0JE;6|sQvReabLT#pqa`i3uqexxAa<$`871SLHHPe>IcOFmcg z5{1x|@8>!Q^jtyIt~UlvKKj%;vN7O^Xs$DyTL+&R!!953aB7Qr7S{HlPP9kceh@R& zl<_I7JhR`sY`=5V4kDRu$QDG`9efe5mZ9q6mdHeW$r4&%CH!NP zB5#n6`cTm0j7WCVCG@lQnd3OwA>3Q`^PGEk&70Y{fw>B@n*5>&hmW;neAHrlG5TXG zTbTcAzPgJACU9*sveUUH7Auq$Il8^b?zd1yVQziy62~{K%Jwffeq|;sm@XPHyi`24 zJe8AHI?}I@Z%)&CUIolZ7Iu_AymW-_?up2>y=ZjKvh@wYHfEhwb_+Li-t9Hjeqw1H zEg=go9mD=1JcJD$iiqz;#A_VH*>J+pwyw=~EJS8VgLqpIxvegZc4`Z)o%|bWMKp4L zVVmI8%9dZe)__5ZS`}6vE7ftIg|?^OpVe)zS1{yQpol$TJ$c(8M>{Yt6yN~_f!z)W ze$-C^KmdT}X{=RK+N+RZ^M}`DobZ>@+INE`DEWqD?et?~k$g}hF z1FmN07|_bCg3Qlo^a0S1@%ngSuk?-Z6vzV6=@O#hEE{ yMQ2(#u2MTj7lnS_Hm6G})q`sP9M5>-1>(t0IWrCdfYcAJ8YGap2EUZiF8M#DQH8ev delta 2175 zcmZ8ic{tQ-8~%kETa9fw* zs%-HdUV%EepI6Ww<>q*VnSA0;;-x|hk4RH=+XLA(J6-Q;X-WkHfIgDGa!8rfkjrhB zjA*Pr)mPYg4hBkl7+6=FK=aRgq$&a>bgZwSp=urnJ$#Jq$I6flc+Rx_QfvxwdkSG& zBg|3rU3X;-IAB$xdnB1+EFvlH#k?S<42r^rbcKe#&7(bCo7&19VjuQgM5)yGUNd*M zlA4hhcCbixXjjSMIQoHJk?w^xMJ0m_)_Xg3cT5o*dfg)0Gdgx9w+_gdyH}{Uz9D)S zSR1CsTY0}ZZ6qFgx(&>KkiOB^^O^AdF?`_?O^XWFfOj@6g<7OPy~l_s1m{0U?)1r% zq-zt}?b3}#B&o%psoKsNMHw0(KRvi@)TVvJ8#wb((jK+c^$a6r(vzhi)mOT&r+t=E z{`!6SEjf}aQ&D z5$7s|4KuziO;`&mrd1iy5q5zkTGm_5#oNgi`M`#=rfT}mLtIQRqepShKF`-Oou>~V zUrBJs2O*f}?lMB_8?5sd&&FOia>4N3_-q1PZgTHD$M$-lPw*T`FxfAS=7Gc;eWTf*>$$0Mbm0SAvCrs zJK$1*uOKrpseGzp2Jjp;ZCK46TfW}hSL#Mfhmy|P7v!w0-147*_*uSmtF zq+073;z|LXoyts9i|dyr+JPzjrYI$T4-aM~L`h;Gd%=X66*TP^F0Wz2blbdIw9OdL zkVT!kTeTHedN3Vx@2*}3(_&I+f90CXY;(n@Kk=Rqf?Fch#3$#`r(gluJAO-TdHog{ z$|Uw;gy8M+g-&{(PMa3NDW6IEGHZ8n0?a_h0Ev)*(OmdB3d8+)Lh&$2t3)7~W`13Y z@8s#X!R~8HuElHG`%z^}4Tp%n46OGIKT%F&Rj!}r^@7~)g*zQ4KK=r`Oc}A1IXo{= zJN>!fe&Rep zboZYVx$>^lnp`I}>nej9Ufu4ki5=QUt2675VPvd`pDc$x`6zQf0f)RQST7qE-OvLW zT^qfqPoGD8>)LXQ{xmuDF#bW~FlgR(EmxlnkM0g#5$6hcw#TMuX2h*oNx712B4fL+ zoS8wLz=Jyg|7$mGlyo0@g^nT-MNd*yU3MxoGpT7`!yWcP^nBGtwsrvyq!!&JJS$ z6Rp(z?~74*Jw?w^h-O!yp_JuWYWgt5AXlOPe&C{4$bTCA&jG!;`uD%m7QOK0s%*_0 zwPThONDrHOP6^O{QoEjM&oy{o0Qf`)&r{87&lu~6U*L>L(}L7PNl@|kh%{_Rs^Hiw zzX%SeGt}(Z07Al4>66(M_fr~Fp?gIx;Mg_>Z|$JS)vr|9>1dFcKio2YLDbY6g`xIf z8}EoUYQ|bUFqTULB3Ga1dvG)&E z6)Y(Hp;-j`Y)4*>CJB%AYR`uDyu2QgIW-sPs=H3^_BryBzgsUxqd;uqv}F3QQLCJ* zc>+wJ{)9+7sKe=7ZJa(j=VoEk>WXh?Nf)X$3m2~_>Iv}%hPybLl-E^fFkAn?Ikgoz^fFUV2Ghab~TWfLUWGyqNT7A41Yc|&#&)D({ zKmk5L2-wZ3r|Q~2qYbIi!N*ImbvW`Tqop;wkTWvGu>hF~?ZX{YPE~R(2HtdjKGb4*(>9e_k#5raAyb z28a3}y@Lq^-^<})h$uqP8QVR4X8iv@!|6B-qLaUC_1N`_{o@8|$!&Bc6GhmM6|w_a ziF~^&l6Q5Izi6nMbPp5Qp&ue!0;l)st{{0gyMO&h6TQF$#yh9kM2_zsf<9`Z%$tj? tn{$@lwcv&SJvRwShoOJYMSXau^9%$4?Q#Gh{mb$$x(E6&xbEl=@^8j6%E|x$ diff --git a/tests/TestData/PhpWordOutput/qr-ultimate-debtor.docx b/tests/TestData/PhpWordOutput/qr-ultimate-debtor.docx index b2fe5425ce6b7282c315e95eb22c11e2c1598dc0..4e709ff122d9874b8e7d94ba4444cb9c1c004d11 100644 GIT binary patch delta 2111 zcmZvdc{tQ-8^?b$W6v7uq=aEIVKAXXWUa{{4Mqsbnr$qhY{wW3k<6H}9x1dqLRqGv zsL7HMSwiPf*%@SsjwNgFGTj225P@02+z)7nQpL&9c}1~GzgAQVmG`21XI8v=axHph2Tz81 zkZ(SS)udF6Z*7?IRiG{WE2w=MOOPxwZMe?cF7n%`YH|Y@nT9@roYQCr;6kR?d)J%4 zPJNgf!uJDCFEta8=(o-GaskoW-^RClM9^dyT+-0k^eKZJpDx<>``N>%;DoJIOh#M7 z0at#Bs&dv7bTeXWfsh;L=-5|A~p4X45%o3Bv#DQ%NVir+CLG3-O5z% z*AHKzoa272gQ6DN_ZV6qc5O5FM%#H`QCGqfRBpSur8iI3!v=XBTSu%P$|q|T!Cd7$ z6%22+*W6jY#Qm1ODp~-xD(_E9IMGR=aE;NxRQR)=T2o)XQJOE6@XgoJ{aPQ`TO}jv;}h4tJ8M4=kXSidIaLuIDJ_i1OdLL{ zji=pHUHnv2md&G)6ptdQyir|=^YP1nz80G?9D@o$p*PbTb*#xAQ#+%&PevGyDRIeS zrtL;$(d&#D9hfos6y(mBD4wYopHj)4s+jo1>wWVpqIV_z@ZzJ?8}n z`mD$N3ayZg>KbHjI&nXTX7ad+4EqImBii8E3z>T55h~5&bO2StgUYxvASG9r- zRhovlh+^}~SCPKDvBktIVt6hEs^f8SrzXi;W)*S%=@?z%7fsqGgEPZUJDMxmECct1r0xO3w{xZ8c zz?=}ToD-b$U^=vnb;-=7&m^#05SdHJC&%J=mw6Y0GB(GuR`W{q@T8Iqx#(vnr1=@# zU5O(D0XE0J@Zi=IbggF#r{>zqq?yw6t}+)-<@c8QPiQ`QvKNlre!N#mRpY^ngGtP| z8>et$b>hyB3_p{#rvs8wT7BM0jJgz>hb7u5EsEu!dpFbJ^nPFZO%M8{eOLO$*A~21 zph=VfCa&&!DX6iN3tvi~mL0%J`-R?UX`FH-vWUu>ut$iEaP`Y0EBWH<_k>&M|E%Oa zvz1^J`rP&{H}?XsqYn}17US&d+~d!H9K?zr4x7t#a=H1v4&Z;j^M%~9Cg5l8N1xIW> z#L5yoU@n_CPAe|D!&o;)wHI}vNqf`Y@q4L31&68Fm)fLk5!AaG3E_zxr;oK2#Uzvc zts>A?DcLf`SK6mP_YLIZ*3Ef*8jzOnVkv`-O#WMUMFseBNU-6#&zKWJOT?<#y7j8 zqaB8~VYa@BHj*uIQS3aq11S`&u@} z{)%F~U+t$OiVZ@)Y<{WH&_%-I08_hZcviT|6*>4!+pqd@T%g zZO~3KElf|1Vst7q7qxN76?MITx>KW4)p&C4fNjLl4$4@ZyPUa}V~EQ!->hs($I98Y ze_eipPW5>im0j2nWtm_OQ_jh&?K%X7A&x_JQykr;4cvIQ<%ZH6_jiXHscy>ASL*s4 zQ3C4yP=g(R{k9bIEgumzi3rk~v>m$X3 z*~1grFYNs(T>+)aXvoTbU)mfu+FiwNNaXo-!!dcPi-rv6rv#0I;HD$gV8wkZzpi+$ v=98@?JAaA)*CEA<)R7-Uv_JGCp0PpRau5I{f7)d3C{ delta 2119 zcmY+GdpHw(8^>o385N@tInKE`E{(`BHpgZPD`GD>&m2RKY#!&yp~ljjn?v*vLl!kT zuJkNVCx?VgQI?RDQ@on%eXr~J{qw!QpZmVA`_J#MGmss00OiOpa0mbd2m@3jTAB}> z1oQ7|ivzfpk5_z`kmeQSgNNpMVDnJQ9!Qqz;Q>2o7e2!7&e?qx0gQYh0HDzT00093 zfH-`Vzn(wdFBW$xJVrMj7q)N#gC92*Pnz;k4l1W@hL@^1zgPfjp;RZnes!~QY_&Zr z0V2_7wl>sa$3ha3bn@%$4^~pPQ2}dg<>#n`&9COpRf1I}J!7Yb4?9zQr8vTuR$069xWi1&9!;cEoPK!j=-|^<8m*4mH%Rw1Gd|ou-v7d3 ziyn;L*|Ks~4WHZkDXZ}kEgbT;qk1iOR)&fHBm|c=ziewf_etT&JZ-t`b0`VN?I6^0 zso0aVG*C#!k*;6X+~Tfd5*=Sd@6*+>GNG~+z6{PFYl?VS*K-_h^HV>>^r`gVAB^JW zyU=R}a13x3h2rF7l$U3LcHV(yTt4KFOIIz}=;keANLVg&W{mo|IQ-R5yb+dkq&K)f zo}}{qz(+yx2&kpu^|nlfntE2|qXa*~Cx!f!?9vmk#Ah;^PC;e37Qfzr?-Mly%o;-3pn+ z!$nc_{rK+CQ4wZx6>;X{R0-2(gL{UecB^C2kr`ej(M~w?Ez$WV;o5Uq#;u?5d(-H| z9D}JEd-&2xzRaFE|Em`)L6a#31tn^|fT5?}b3{jY#S<$^_ewLBrgqg`>`@vFnV_3s z2jHgre;c7)*x*n$J=_vx-GZ&xVq(pOyM%`1yQ4>?`d6K+-x4v@@Xq1)@`K4Yl4rOM zg%d^8y9v*`smWNvXzqVH8u4Gt9%$f&tk$K z;Xd8xoL@M);xzePN=$$>*Xbhp9WjCvv-u%KF~~1i-m1MA$;h;xWN9px#JiRz==q8d5WiM5DHK%fXM*>& zc1S_Bl#C8)O3DLY*b>qD8DL+_+kBj$e=Hy#6hg$~R1K#O5G!aa4MS=e2P9g(_OV&Y%2U9xT<5RYV@x8- znsP5w^IS}uu0l1ll?zesSL@hrYYk^9q`$W zU9ta7?CSmGcqKB*P@Z=z!cY!q4I$?kD)DU7u8mP8vket_c5&C9(;!c&ONpTz`G6Mu h|Nj$^4PbIW6HT%UY;Q4g*CuI`b72}nq58j%{TH}%%w7Nh diff --git a/tests/TestData/PhpWordOutput/qr-ultimate-debtor.print.docx b/tests/TestData/PhpWordOutput/qr-ultimate-debtor.print.docx index 0f65123cd5f8db417fbcb8f00acc8e18ed35b0b3..ca6ded49ebc4e3b803d3847cb9724384d4368aff 100644 GIT binary patch delta 1821 zcmY+Fc|6pK8^^yhjxpW2BZMVsQ)y} z7%PbF>BAEWH6YROS@Do);K@Q)L|_M+v=3Oyy&_YEDjoj@YjB z$hk2~D(Wz@7c@8|u1?g?Mca!D*(1`E{oaaC3Jutn&!;<<50H?J)mU_*0{xsL-O#wE z&^9q$uOvvJyhm|daK#$1Q-W&qUpSuoR8Lklr7Ed)kyD*HrfI6B5#+wU3DgGtx`F?w z)i?js{3Y!gI00g%C6?u$C}nWZ#;G=Sm|3ogo4fnFDI`5yIzozA#=e2EgZgJE7jAPd z$l>&6uMZi!L1lyhfJl9rVP&nqX{ehDq`CPm6nym&e1y!B15vfD+Te8Qc?YFc^kT`$ z-tS+DHvIVF)E$-N0ZYiGSKRw)c6?p-ogY%PwZ6iNMHTda0};0u1o=yH<}L0_?!3K* zVKs~MHls}?LM)#&U(ZLya(3%@)6_8?W%-_rZa_LfmoAAwj77)pIy-;+RB91c726xB zY2>|I)?G{=4!@;Prm2x&X9%J;lcntH_-7CW<~_>ygH!xLXzuGjFs`Ua4wkh_J*-3l z+ZOw5u+ip2zid@&Cd-v;%oGptocuxvUl53uH(KbF5V+^R$@n>9o<$d01*g|=t_)oJ zG6C-y02Q(7>;f;c+F%X_Volvh3%P6PLDd)Qjkl1;(J?yeIoXw4@v6P-4Ivo&^$^5r z5hRdb`c*m?_vTRsaI)@%RuV(@WxC1oG3)37Q&_3@@sF(?w4VYmG7qd)U%J~4af#&0DmZ*_Gr9h8Ry|ZJzQt67W6ln+ zS#M}Zsgk-o<8sZ4Xmi*t1hqP7>jRP+)^hNE@=4U#E6Lw&OE)i9J|R_Xbd6Dzy=)`W zr@WTOzbC*t>sRi&1XY|ckN>1MkV8g_6B;X%?-O*oKZ?46X{Y$nQ;+`>h%W(5QY7R(j~jRw!hdrfrbSG z2MV;Orn9)OU~sa5nwqfN{U+tXh%RSR{NCd(jK`-AVkK=eb4&JcQ?X_qi8#Y?Q;Nx> z)eewH`a_I()kK2F&gWWhh)YL_sZONECZ|r<=BZi$B6Fh5l>l7~BusL@XS+v->i32- zvl?edOR{t}-xoygylo(g3t!5%QQ)<0I_mQeKFFN1~ zDLfSXVz^%hnwtG!(a&GeM(-22?yQLLgnIL$WFBd`zoK_|RpS4IcMxMQQaXkr(hAH` zk^YG>5vdB+RHSa${k#xsC;RU@;jLk@q7^M140M)fhSL-|It~U-*5D=J)J3*rFFeKT zz-fux%wCwJ!`sGbh%6ir1NretcpZ`R#>2q&NZvXU%FD(d5TVjNl!@YX;gOQD=)Lj+ F{sHm&AJ_l@ delta 2080 zcmZ9Ndpy&98^?bpg~wrIrlOolm~Grda@aJYr{oy9X;I`bGAg%eOb*Q{_edmJ&N<8+ zrjg^Yq{H0Y#5$qm&|xUW!mW8d&+F;={`2`>pX>9zzSn>67w2XIq@5f^w?P3AAP#7T zH!!5lA)=ew-~cHX5njH?DGD!C8R(qQ5I_^QjCfeL(7-Al6CrKBab>HC$?I(g0J0$f zKmY)^6c*uc=pW`66?zsQ3BMc~@^SYVo_ByB+kxgGr;tZ|8SiEOo&gdS;r8M}XH z9y7&3-R8u_0=lnra%Nw${=sC$=q%eTf~=hprY-hTZs|C5iOeNdU_@tjKlL+LU-7Tl zSo=Dq%55T{i-=d9^QUN*oW%7{lg-Tyfwog9HjAs7^dO}y0tF!-F7xb>c%kh(&njS&( z;gP}DWu*rc4pXOG7p<4n)v5y-XJZ-t{UwJ{q?cMf#*Vxwqmjh%l;S*NyBi}{&t+%s zEJwm6SC%n{Se@cFJH+-w|CIvQuO139>j(EM1}-Kq`*KY*KVr`-+$&XeR#f~e7e5u*{TOBE7b_8xl3|@!fg}q;|5y4l2jjJSH z{|Q;aQsi`_j-D_d?sA^Sa;L{LEO8{%5!==mO`@aX`p>@6-jCP1%o?)bE?N)ncUOQ7 zx?vb^U*6!ij3gtEIOdAAB7p_OX+^+NWtPY8mPyXZmCpva%G0XLaAM4f%Ng_0GzBzI z#^gSZ!nrF5dbO`@YH_^p_t9JPqUr1;;T&aG>6#>=jGJ_-ToLQUP&AEv<0iox5c#M3% z!gkxSi}rb^NFB}Pb9v{yo_`ci-Gg1TETNGjX)LZ(1gDIpoo=SQ;vfyqqH#gKT;-Pz zjbuD`6emZ-oWCYm>X2+F-4YBO&nO;4NHu}InA&SrTr$}Di5JzTCHm4g^MX{mM9v+b zkCMJ+Dd9h|OX!Z(69=;yl=^d?GrEPZ9R8Xj zO$1+#nYSK@IK*CF<2DgTrQD8G(S2AdxPcfLVB zGW9%y)4qOm*ceMXqVg`ZtFAfjl&HA_Rp~wR(@lI$`zUNEukmI+bE40OQ)}23Y%|Kg zEtVFm?fZw_c94d6EM0oF?O=_-Z5d?Ry;0n&<5)Onou+n$cqeSCc3yDXsrnI}*%Q|X zS}GkeB|<2I-sVSD>FzIlVe_9?hwmj*3|-uHn|OPz?sG^=`B^6yjngUHkkx;;uLv>^ z&i1`Yb~;rHE?Do;m}SgG*V;dMXs-!rjAw+KC0{f3a=y@tQ^yd|i}94Fkdx7BelbSy znYcl6MKQ+)ZN@5RS)W&UM#^*Bfz`Z0kh`q+rpS_0FuCs-_%#{F+NWi9rC8>rYRWlf z23A(nL!RVNJe1-eNVc8y36nR zdIlK%b9OxE;z(+z@1fcVHbHl1=HS~u%$q#U?trOQF&HF;deH%m+>GFCfx9Lz%fbON z_9XQgC&g}r`Yfn>N^gKYN5fy^?;2ar4oC?0{zCcy59?j{QhxQ2r`DpBrVWs(wR~pNM zb9Wb#XvD$B119v%s_B7qi(q6T-SIdbf_1!Cxjh09rRWtU-yI9PltNV&|av+ zhL%EAK$r;i7~-H%(-0Oy9YAdLrI2p%Ln2jvTK~V^CI^Lw8UL2bK&q<#%vh_+ z7~I}m-*=Oevi}KeDl=YQmAZi3Bm4`3QWAMdH9)Bes}m?CkgO&Zk5Unq*EdVPHZ@Kg zrsw1+0u&>{u^eM$hJ@JnXbeyX97 K&i3typYA`70INy> From b96a7492c49adbec0ddac11b3d41962fbb193146 Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 14:44:46 +0200 Subject: [PATCH 26/27] Type cast to int is needed. --- src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php index 2b991894..5c98fb56 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php @@ -8,12 +8,12 @@ abstract class PhpWordHelper { public static function mmToTwip(int|float $mm) : int { - return round(Converter::cmToTwip($mm / 10)); + return (int) round(Converter::cmToTwip($mm / 10)); } public static function mmToPoint(int|float $mm) : int { - return round(Converter::cmToPoint($mm / 10)); + return (int) round(Converter::cmToPoint($mm / 10)); } /** From 0928a93685cc5862e895241790a6625e68e276cc Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 14:46:10 +0200 Subject: [PATCH 27/27] PhpWordOutput placeholder parameter isReceiptPart is not any longer needed. The placeholder is already hardcoded by a switch for the different payment parts. --- src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index 61189307..263ab18d 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -156,7 +156,7 @@ private function addContentElement(Cell $cell, OutputElementInterface $element, } if ($element instanceof Placeholder) { - $this->addPlaceholderElement($cell, $element, $isReceiptPart); + $this->addPlaceholderElement($cell, $element); } }

%Qtwp@!r89>e8rh|TC_lmaMm<2v*C!?t=!^%X^0Fn=3=b!mNrBH|X_QqO=~XP& zmz-qbGK*~T?}~o^98Ij6u2MY85UIl|A7xTiB@Z7Xb_5CHkQwHui)tSNx!1DA93qe> zqlIMVJHe_N>)^1nqJP#>%u&hTIE;%^6K{+(VkjrwkpJ&ZlO|k=T6r`91E6Beqy|*bu~;)qaVJXNhx&IbXvI`Bf{K+1LYUU zwu7NlZB0k-__PTDa)l{jVg%`070`y0(l;O*jOPCAI}kj8{Q*CZcNd#8eWyeKv8#ZA?a?VHW2 zd`X>Ly;SX8u+P2alB*)M>=S_X&z5z^pWgw7Z50GY(OK-Nv{cS~#XRB508rCqDMlSK zEh!J;4Qkr*pOZ)2+dV3X5Hp9mYk3xkHp;?X^RJVLE|fslI0!cmPW)IKiRCyoo~py6 zFa2(;*cD|`EF@-1X8CGJdg3^r2v8WfdB8806r@IpPwe*KW=}H0sq%4 z0iR8M*3f5HFBo_&UY=8yh{BM|%r|C>$v4E{W_{|#Ot`V0K8 z0sb@o^8oud9){$<5C2E2{~7*yJop=aPWBi4)3ET_!sq7uZwoWze_8lfEB+b(x$pWL fk4E(u{&N>5F9rHBuKz*S!2?VHf6O)vfBgD?$h0ab(mw!Yl^?tAyX9>4chjXG!4A9Gdh zb=F>ctvUCWmjVVs0RRGk06^yXrmSKoVT}(8000340Dubs0N`flXiRToVr*eR?_^@+ zY++}sXJKPtX2M8kZ)Y?>b%+ktRjU2Cce%!5 zz`TRosRh^Vpl96Kt$lF{1NjaD3kl%QMzNq7`HA5;gb z+O4@=N|54FxDTEzJ)Qf(_kjB#XCZrmNUCD2bTSJHfC7FV#0oI&5eV_Um*n60YFmP5FAWV@Ou@7^y&OG0W?J6==x)F zIol&LNR8{nyK@HQU%+J&H6vJMbnPTmrpN_yMAYaAsF;Ar6vKfcViFZ4aaV~Rx`44~ z78xYh2-I8T=*!R|!W=>%EWn7ip`l0`=;D`r;3o#&Syp^Kj5Ko0JQG}$A*dL!o41I; zk^Rdslyq}o=;+Q{^!!W48f^lzN6yRfu3RjI@uog}_!IUlLkbvz>9iG~%t@A$bW9-e zlvwq)BN>v58w@3^TD}Q1wt~}AjTIX9$gUXK0bCPY7;O+q{YbKQYzZEF3113H6yq$@ zF~(BrJQGbVOcPyEk7uq)q3TGtE+3mIBq41yRVb~z8!>IB5p^P^tCtWIRG>0BSI`!M z{R8rfF%@K_(11}XmqkE;`d2+Qk{cVJE-^TuwpZjFVTR|gd7v$`1y zr|QT?u2R0q;|;NmIslD9+P))E$YMZhUS{Y^ploO43v}pc1Vo4Znior;;8cJxmzd~| zV2pG+^`<}w!_d^0-3D!F_C!RifO1#Q9TIkcW3vOl%#4#jY zC-tNhbM~UZa1wkClR())@##==CQK0&eaa(aTY=Oci~SW?6rQ$IfC&?daB{~*X|_5f z@320gq$@Wr0}6AArWTt)oi}epH!JQ%-3d#i$z!*6#y>S&|!togpNkBR5LaxaBOF3?-@< z0c&8!_Wc$Yz}ABdMH^$HinH?rd$04^3;knmD+^z{m=@%${>dlXTX-HSjL2wRRf7?)?Y;&FL1R#O_MBt;CxV z(LI0n(;Y|xjse)^eP4O7^RyeiuQ6Ht-oAPV-P89hd|v!|<<0am&e75*r#5Hc0v9^d z@z`0{{OS(K&dAP%{`b3d*76}-_NckIhx~~XuuV^ZY3m=4)cm)~r{_l+DU0o=&?e>! zgFE7}E!KFDfz7yIPns{P&(rq0a2xN|FxoBkI2mXjvd{DwY28TL@7|q=^;a(V?K-9w zZnlY^TYl)+x%qx?DLq(}hpW!GQ!^}K74{3`&U=j9c9nE8oUZEq;K=#Q|ddI{C_elfqjE=W_z^z2rK|VKI;EJvoigW zS(DYhlog+rOI8-=6b`g-ORp1{tz=wPS=La-5zHs&j-X^^BKE3dINc#f^E@!z*^ zY`k>*e0g=fLm%$zIq6*h1n}Q16o<5_9i7hxe4GOM{f5M zwZ)$h5kO!uRUF>ewXJa}kIzq|iQfAT-GqO6AT?F~OwVO+5$<&Xe*NQHXou$2QgSe_ zf@<(&hqc!LnOD|5eKwnx+cbHEcK&|K_pfO?gNI}cp4etx>8qPYjs8bppNG)B;VStn zu6;g2mEo$uyzB091vrBt9wi9HukL5(k6EJV?4n}Xa~jycE+OT0z_CQFHHD18oJ-F7 zBrkkPe-D|aeU#_)PJ1Dmgk~uy8`u58W{@(;c5W#B)KKen|)*9AMss)bt2lY1A# zW>F({DXzn@f1SqtBaF6b_BP)Tfd=Sjcn(^dUAeGVQ6Qc-P2c)gsqKc!$5dl|cYN9- zM*zt8%Tfv3jdIopxqQ2Wu45G~5<1}$=OZ_0{EHe4_8D^(^H<9D4jrng&=nWejY4=` z2E(n^J-NX3v$L+i*UbF5$vfQBcZr(2 zm5HRc+G^(2&b-X;F)c|pyT#kp090#NFIV#3cA2tFR-z~X=SB-a69*An>6OrV-K!z0OA*scQ~G3>PcJLdhsl|9eSuTm0#r4yuPrp^uTs~0?Xhsmv;3VWy{h_& zwb=`fty;8*dvh@sw6|AU5iZ9MHbrnPn}myyKqGKjy3?V`xvVav{m$Ae4y$Qp0H^g zIBe-6s0EBU6UiM+6$?oZ9#i>9@}zNHSK0C65IYnnPZD?v%~ViSa9-c$V0dDbtUCuK z_DEpOipUZ>3At!43lUsRZl9L!uMUAT-tYA&VR&D+udztSCp*6*3}9DvJ(d|-x{Zi5 zXzO{WFr+Nxr@Eto*=Vk(*zu^L zEc-=Oa46r|@?}VpxWwYC?ne zAhNW(<<3Do98FQEqznb>cg#Wkt*t71FdXI&H|YWdk_fWyM4+9+AFr9m`Rk8mwsscG zf=P?BdzRP}N&;jRiAIb|Plyt8J?qSw#X+Z!@G~o>wXwbsrWvPSpIK0q`%DwLZu+mH z-xvbPsPme2OA@Q;Dlt1n2_98#=yhP!OhIDz={zS>c+ON!T?V4_ipz~vfD+lH&4cxX zTvENG!qDG1#u~!A##KeWw83h2n&H3<^@k-=0m(FrM%VDZHkOL8NV&RR+B}42Cw?jB zkx{AO5j2}pwY_ZcB+vBIccZ6PLu1>p%uCun(Y(pKYML!Yys`cYj1JP6281NFe8fHR zXquWl%Nc2X3z({?tULb7-`S615S=-ID$#C9g%rt~D<4Xsf`f>$H5#wde(C_RK}G2& zwKG26;~%sYjb%r=mOe0${2j6j$4c_nfj)e-$x=$lZa=Ysjj?D$kZT5+ss zlkkC9#M-fY$()nf8L_2iQYJ$@n+K3pVgpT&BpyxLm* z6SUb-osDFLb1X7No0a?XHm4=Q4CM&lCXnPYG+#!Zvj&K`k84pQ&--aXxo9e#fFwg- zy>~^(3fVAY2(uG4qF>E!;PUh9MV@k?j{7LS2!=h~M8-}B(lByj4(gn{o3@00!JtLD z^<(SDKA%fAXx-m7zBTi2qpI#Q2LEUX({K@9qI--8xtB;Z=LGy12(L~(NdunaKZHe?wuh#TTZ7-(>&5um-TUMp1{1rxCUk%H{2cJ zDKGK-P1F6WM;n}(cVe3OxMqyLDjSp}2fZ(xmaxKoLZqnZmGVH78=n5$`zQ{SMX|(+ zw{W!EdE2e7$-0fjK3PzpXa^iS4GLP8%Qru)H9^)NG7ktOR*CkR7mzZ%d-cg|sSOyQ5V;jNcnw3m1_aN;oKw#m>nyv z=H7}iKh)ZIaFg?ec6QH8!X@nedJheq%(iKr*eDAJ%8Y`0Y@i6(gaY-#%)9SqD0=tH zouJnG`+SSesvY)(v%1(4eB>2tayU}svd57PJJ`;K+{_n88Q3C3 z5$(gs=#qoyD`@NfnI4^3?q+`+bIQlU+>}JxIpr4o7?1oS8ogaK4UT{*4pE*@uc8WH zHLw*4GZ!j5G+|RJyzDzpY>iWEn$c>B+Z@h#f@Gi{G{8r+AfIlQ%jAJu7KyWuwY|7g zo;{$z5Zqx1BptgHvH=?MtjrV7mS^D-1A-OP)-!E*8o#DMM9UAx*@dKdV$NIWNQOn_ zUMmq<+q%)Pk33iY-n?3Z#Nwpe|73}6rpYbwlQz|M*t*SsFiDcbgvU(FmFb`c;K9P1 zXfG<*?Br!VZmE~%S`21j#J^QnN`u|mZLkd1O*OyX7Kh#O{K}?fc7IAyjN+J2Lur!+ zTzCu7^S0Sv^n1fytHk(gN>y1N6FW>ww3H)HMUUdI15yX zIao5$d;*a3`ZBa$zv=?%wk``4r##N0;o3e~R73=hgV1k`iJU zv+Vm7@~vj}hhu~?l|84|EqjcS2Ps!6bKFy5?$mFrEJ;ngVsE8h=sobQG+E3Xgm0+= zddTAo_63tXD~pK|230PmT-w4sqZ&7Vlm}>^H)ec)ffeaWr8=5Oz&MQ3tBy4)z#{jt zavjTAuFl#QbmF=7=NH3p#9K1&I7zVCPIZnsMP*HV0NcNSLbe(f$!G*aO3(Lsba^xK z%VW^4Dy{0C6?bYSkLhYUg&|#3QLmIWWrgDSf_EO0fTyVj%7kC7vQq{XQInNeTLnG- zk_Ci2n{MXgc!Fz{&M2Z26VAA#FyW3U;)D0@+GT5-<2Y}R_1FV^$efS#mGNWybv_bN zLPmPU->d)*FHZ+Sx)?*B0sbNeytw5O2f3l+OwIpJkykgNsGf(A&g~L+(SGFDX!9|< z9g|s^eGsCmz$&`b+QfLp+qlG0KESN5xW;n7YVaNY zn;Q6OIs)%xh_0Tk+Uu%NnPd4SQ54-)*(ecw810G%dAv@)X{tkwF7K_8BFn39c4$y> zhBQ=7qZn(4{_A;_G+(b3eFUfxm)Tj6aWXr;nhJ$+TS<6HyuZ*LxnR<{OIRNij;bZQ z#z7~pbN5meQGpK@Wm6$hN$@$>((vL;=C!cJ)phT$C>Sa0;Tnb6>wO0gBsZ2yN&2F>fZ@^3!V} z!|3{gsj7@xOB#cSgsyBY3>ZBc%H54wk>KoIEPzEg#C4&V1$f4O7`_YbO!lc8isAy@ z?8_eAc(5j^o?NfO+G925dZ*Pedj;4%fO#AtNZ-FVd+U6O5MtT`I7E%oMK@Rqz-+`%^aWAKFVc3-bn z=luZx?g9T`*AAVlzC42f0O)-7f&V{tjrmV@P3>Rono6KRH^5db1eYvf{Nd@3o5dj* z8mT2(=Wwlzdd&z%d$;{_*O|3+1JmU-ASeonEpS2+L*c+$5x=J}$b8izH2fZXqW&}% z5dwrHBpVcjVys9{v-WnBpg=zuGHIrUhn$z}i!86n?+2zWtaJ3)Ocwhj0NqLMI#r1N zUgSXX!DLaT30qBDUvJF{R2EJFHY@MfD|$2IT>%DbrxK~xlEcYS=EtAvOiRLQ;~M-Q zXu?ovs+y5fCE}xOgO+aa@4rRW1TT^K0g+ZwSWKV%S~4DJdoF6LQAuWHtB=!=m!}Yn zX-%Wttq&9vkm%QupP(I|m%(CV{}Zt1R)W?@j6C5zfX-&EE`O3ORl0sewkG=vFw zB^VYMhtAngO_3MIq~xh?Iq_>o(#Tq31T8yw32mVX1>)wZgP#6bnj6?dBZUwtkH8+K zhZ8p>5;|*3ITh2eU%_V0(PdV@gHtx$#x~7lOlw#JRkM#WI2;THtq#-!KhPwvMAcq3 zGn*D`LHSEPi8#zczItb1lcw~7v*viFyjn^vqX4f2$>2R{YGod7OY<5o_8AE`4G?y? zQS%a2xlO69s@HJ}QWK=B47Wwbl4AkZC?DfA#f^EQt-0xXIy;oC;Vo*= z&~LqJMiPc4zQmb?>%(3RQ$Hh?aINKIo>Slkq8i&+B+aKA9#N>@#fYS-M2^faCa8A_ z^4N|!O7L$8MKM+ygY2hSu*cdcCg!(yh{E<}w%KBx_2cbz1lvfzAbiVa$ZVd#`ASP& zS-JSN&sCTjH$l=CW5Kv4WlrXdqt)jWU`@B@m05tD=D`m?FCk(%Fd8PG7YD5csFn;* zR}cBJZBiX=+Eptk^@S%}*%r!B-ZFC?m>ZnwHV5-Vmq#^`=Je_6aVWgh%9Q5WvdnYF zin;9^qgk&t`9#!^p%u$uZ3^1j<*)6 z0LV^@`hLph@Xlpxb^2ca%;fgEC`54AK;pkRqd7hK*#A;ww~_*{JEWpNo9E;R1fUg~ z6B!z!IeS-1bc=*zTanv!RU5fP{Z$Wd<6(}vJ(F2{<2zD*f7jlgR3&gGcq%}h`3VO= z+9EH2bamRQqBwu#!PHOU+47!p^jzI@-j;`j3)E!U4Bw@xAD8K|vbVKd9#t=| z)@=_t9y;N(FQsdko$JACpYOK|eR9tSxZwWD;mw86Q21M7064zy`3!Z4vR!)4A@DXO zb!KMp9R&Al;S*N_`IBq7FZ}6u_Cwz`KFWYfH=yvJ3OsmEPrbOA?aONp=GQh{ZAv{u z;m5f;jNYfA`Cl#kmQ{7gxH~KEUV-NZznZnxFxK78#f-3;bxNJ@{NNY3T7F(^k6hsS zVE;R5{z05g_!Gr?00IE~0s{a*{*)xNgzapdO>CX@ls)WCoOI~iZLFJ;$838U5JVr| zB8FF}7@ZYVPyEkX7kr{=UhFGWL^Ia( zM7L!1eBE)BjJR4;xpBHF%F_?=q-#NG!{RuMM}rBW+q6JOTz7P z-DG9kf8M7?=Xj6r1OK;YUhB>Bx;{O^{TasypLb(BBY8(VdnbAWd;32EI6L--Wgi1d z@B?4)bk6Vuf@GYDq|~tDWn6PZT#ZeDOKqHO^xM4( zC@|=mU=ltTv>gd=Q2sP>E0sU-CX4=vI!JqfD|>s$|kbw3uBi7AaLnORWneIjv(S_0~1-9QC85ks@QcDJ)rAf zzDH$dStH7bmG5YkrAKxMc{mo@OiT%DDfT_aBn!-Pbe6IbAj4qVzzQ>SCG;p>PS2d$ z%ws~x<_BV-aAk-<@>(HUpViy6XI8+w_8&Z zE?-u4AQ;fTjMCCCvtcYv?H;1|7RbjN#D}!mnhf@a<7t_2xp>yq8DJzA)BV!`d`L`d zi-%e8EDS@a{Onul)^{D#tly95-AtP%rn zbTar8j>$Hcl{1?r@i-F*GUtRVMS+u3< z^@GLZ=BEtRCjd>&Y}(IUPj5s-qGZ9qnG%A~y6G=9h3?}~3P{7L8v|;LaTd!{54eKa zwT@#tVN!Y~UPmPsI5?x#7^}gj&6QV7j@D!iqi+q3)T-GX={XX-cntmYgP^2U2wXv+)kZ|_5yOl>F*lzyiLQ%iMsOe8;u5B~5v0i^fgPz~nSeO? zvd~UPb=9MN$tiI%EWvB#xE49dFl?w{jv7_y^XpKVy~R04-GGQY7XkTZi^IcDm2T0a z(24A%dOWRCZSJ=pKeeTmLA{Qlt{K4ri| z;~HV?%tOPJpJw+^oQChWAn_5gc{}@DSKS%^HC6xg?>{|zrX}UH!iLcKpk_ZO<%J+| zDMRKu=s+%GmX#irU2;YV93K}1DPb@0rT+D#o#2Z^)LkCQSj_UHKs-oY`yzPVMxgK8 zKA%(*q*h!5Dj%*9&m;tBRkFPttTs{ z>vZNNPld!SGnSKTeSVxU5gX1-+8qA`#CmWo*0mO`It1>_R(30~u2vCUhl(VH+FbrB#`xU()pasU;WV|=Y(0}_6xJ_m%xYLLx%FCBmD`Cy_thD6W2@UMrF=FV%nP|NB@{F^F_IMR6_NNze~h)UPlJIFC76Te^d+%o zs3B1UNd|htHSxM?Ei?hE!PESFh(B1aF~YZ8gELr~;nzzx^aHL@x7_iZCT-M_@FBEB zjD-8vL0D9wus|ZiuRjok8ZopC@hrwpi5YSJ1AEWqv@B5=v77a1qkIcy-5P8 z33r(bJ^~)M0ee8DDl-oXz zA1ZQ|QKtT!$TW3>#8A&$ekA@B8YIRwj?qwb~c2 z^-@chriMpvWA#--dbD*4>6+GE!@2irNmZQX)EINTn_3MYjv9bc!FZ{O9&VIgyP_Rp z6dr;ELdgQE2DB#%?v6|CaTSGESOPMRz#P+q`UNMUO} zyR8Y<*4guz$9R!;^#n%);)U?3)wqSHn>|-ua>Ic5h>pM`$U3fS?0$W$UuPU*ioJ)V ztl*JP6LqJ6(6jWJh>_=`xu=rDtoClDTe*M>D0z{^S5yTZn_CL@>d223h-)sV*Phe> zjElu~-5#0^7;umBU@xQiX%vq+!9i!qJEhI`CAwxHvWN1Ds2(7%)>vc&e8emKdkXqe5x`@2*cLn=`I`X+JWC^+0k65&?w10HIr~wUple4K z#=h_NeDAB5pvk`V$o=>+jV;7KHp>l9uqRaH4>LVCJ%$B4Z2+S_KC-AnN=3qJ4vxke zG=DzGsuOu-{1n%ceY5QyNVAXLKhCt0e~LG#Pv4GjO8?O?C2m6+E?S*Aon1v9fE>6= z0J;-sMCG}{hlw}Fq@@4yO!cnJnmr9p!(R`^9?IwMWb#na_`_Sd_++mECUtKX;}@C+ zz)khB!*H6q2aZgCJ&&qSAr-XV6GY3+CD|E}4s>PB+_ zK5LKQzslG@*G3~dn?H&Ur$5W5cp2F~287^;ETU^Zhf$#XG7EN8a(`fqAqyHF=9D3c z!!w5r{Gd4b{?Yo}jfedM_jiy~Sh70Os)2k8QB!#(qbtqGmW9+;4PzWswo$|k%~hDl zo1-lb)eHa_u}LJr?^p?o1BcX<8g5`H=)16F---dKN~~HX<+lnSJgz-a&)Qws)_09G z_`*Sjn+}0hp^3mNff<_|>Xql3RWtY0aSi0ot-r^emu6gqGhw7!66{WT>RMdtX(F|w zGQH0C1K7T?Kl571$Qx;bw{n^nO+5-MGn6ij(b)D2e>d_+Hgr0r+%ntOgrtbX2J^e{ z8>3UaXKLg=ZjWby_IL*RZ+8h0z|m%Zx=Qb}$cLJ}aVcKzoI0`i6u*!LwYhe5^Wto1=Q{1go@ADa zxJxk%C&NgzAS1w&C?Tds#*O0*qO0`_OPPoSCmZPSIFssYVA7?i?Ei|hY& z9B@G#NtnN=fK~KjS0gP{4L#ATcEf3AU#Xtq-{?yZ@!Sb0Snb6&s7*}SP`zxdMTu-t zh(XY1h^(+HMUiTJI2wu49?U5dJV3+ZRsu6d@qtBcF|7ql!89q%#FPcKz3ooozzi1Q z8kA)#08`ohQ*jGFl(rl~g1#)Swlxxx3LO>f+R!z($5$h^OQ*PtJyhF)eYK{^Nk~Z; zJ>;09l8nlHvWI3ge4`-F`{ymvcf15LdEU05NV9|8w_6(5r*zPUmn$ zE9nKi+?A#xSB>E>MO_1NxNO`8ciAXxR(@x%bek^A8p+SO_|WsToW3~Z;`Z~1SumwGFY?=E z-#x{{T_MIAzSzi3ja?#F{W#p8?&k}Bx3iw+%G}(UTf~SOGI3aQYU%q_ZeV!_(vPao z@Ka%}X7?>ttpJCZTxV!r}?PW+J1Xh!;X zB-^^!7@9a**qZ${^KJVGK4(5}@WA@uQ9(r&$C3!Apcg=(L)7Sa9^lHvnbdY}MTN44 z4xu~qMyAJUZ0=@#k9}QG(;{l|FpQ-ojjq+zyX&N$C|W_U7^jd@WG3XcyZdr1>b*T< z)^UAMw>+%Gnc;16lAs%yGQ}{qw4oFXRSC5oDaHGtPYq;8#Jyp5H2afw3ccZ=Jgw)T zrP!`Mt5P1@x)znCR^@~@4Q|JPn*K0+Wbnglf#|Thy=8G@N}g) zpHu12TWWMzC3hakEeUq%V~){cx7gZJBX`=wgIiN?}D@PT#gNtA4EnF zQsd~WHUw&Su`TDv3l2@7@6<$B#Aj^F*;51=GI5uA&rR@<2fJX-q0C^ythN&(iyGK! zoA|DODNZktxGftFMmeuz%!*nmg^fU;@Vqt>6A!U{Xh05*x)Duf!gH!<#P+wtP_=5? z6Y;oWRpNwVTXH5wa*M!m!w-VO!aRlWS*0(W0vDditsP5a#)_Os5XaYQX_o&Ix0r@Tk6N%Zvpue<_%kh_{5!ziObnI&5#!O5J)ayN%;1$*F45sS*NQ<>ToHqqp8guJd&~@m z;mDWc)w3fjbNco>3cjnI4g4Al8((=ACfLh*t9(Hy9#Jm%OBXKNhp94;jMvd1;Mam) zgVoz&>c_Wm(>sOCh&WfKZo?Gr0~VUJj&ly;c^gxS^4*QB{aA)P2m~OhlE%VBb!}o#sPkw`VMGxQ3s=o_omq2cy_s#V-?iT zNvsd~kF;m{$+asR7+U|y+YKZu*kv*x40Sn;_T!JQeaBI1vVQ&M1|EM-FMXoQeaNK{1vkls|H!%X7`{|x-y@s zMrympEH>JR2vlojwl;<=8dLQn(Xz2t)l7r}pix1!;TtF>3q9`eEcxD>kz0(k>4V(# zutu>CmZXi1062K+9*;13i8mV;V;;mGB8PbOO2)Ki4_&||HY5AXm zw=t#@E5X6JBfr{FGfxrN$^E*9Sf@TE*{6wp{Bf;-$A52W5`l+7jFm?YbUVEGWW)q9 zNP2cX!m_WfK0QkT4?*Y{J+t121!@U-S!+7vqG{4I4`p@IGaWVMn#4w&tYeTgnHjM( zi;WY{Epp2+j!heLWRDXpg2&5|V(ZPNr|rK(@b}EYh}pl68aF005sGo&U8G zIGdZ;n9%=uW&C6LJkyYgofX4)rzYO$aWD)$jqqn%0?|}gKLewRLH06)=e}2GPSkO% z+*B`DRMEVXFIx93TP6yagMMROQEXD)roV04S={M2ZK!L^OAy}1 ze~(&`G1C^)w~G=i7qN&txT;<8N#k5d=P->00A4(Ptaz_c0T?Mz_BJu%H;my9=jm|` z>G?R;ZH70RFw8z~^AeG*Sf>)!Ms_-DbgT>~*vjr6{V9C);C_?<9rTVS)$aQ`qdUiP zEKA?-R6jQCvF?!sXQwm?t#3Vf%?hQ>Q9-|pc(Q8LiyzCB(qAv=4299_NX z#o+UBbbdIYo>9ekXWwtX(7*fMQa+!IxY6VJstCt%Z9U}jy__x3Tg6F=^L;#D;mhIk zf9&7z`?;$JZy>o>?TE9GAgvLIo5zNRJE2kyt7j!JK{3ozYQ@t#1R*P;dglcqy$-@K zYlEJ~I}+GIo5LgzQ_r@O7Crzosx(4*&_YNJ<4$VCMp_Ql6dyOLOA~jAb)_A5^G3l_ z&p)Ip@}>>SuQV!}^AnINxnUaPzmO0?kv=>E5~_4?C#7t+3+wcd=2AF^7T}f42VhQr zt1#6mCL}Qru~O8Fn3}Yi+o@9QVdJC`Hb~c3rA(?*WU1XO?=@(e=P>5Fs=ZLC2D^bY% z%AWu({|)2JQN;$FzBb($2C_%NXWve#K=%8#odSOuUCQpHGR?DRxo{|pr%Jmi%JZF; z`N9-#uHVZcuhpE^<)Pt8$f!ZofBPWPUW9^@f(mM(G6Jh?LH3t)_3 zY;wh=3E4_2#XgcOl34ZSt-fT>oAcy|Tq3}bWvJK9lj>1gI<%yC=bTCt65>gPm5#fT z%P*YoC46J$(+3@zx#a^WzrcD&yg(|~#>bQBO#7t@awXJ_55}2EfluRUR8*VjRjt+* zU1Z_1OY92oN}hj>B-c#UC>>^r)?-zUFsZ4LM~)IZgM@I(3<=Q1v=4&ZYujTE63CO$ zLNfCoW7Ujya5~t~zi2DvsTQsuBqXSRX^J*sC@pTeW@l2^5}N&n>|nMdtm3CR8>2e( zEO*9`$}CNWyj_uzZkV>Vqa@nzyNR36m>Izfld^I{byF53F5$$8P^WuV1u*7Apanm6 z;ZyGtsDZOtCGK(ym9{f`vKr=Gv}E=R<0GT9adHa%;Nw(Ev9s=njmHrp%sn_zVUcV* z7&_JFRP45Yn=l}Egfb>Zh`vn`Z6qmuBeKy*{;%GBp?%n&@N;;dd-103lnEe~RMJby zzcgeNm!1nL{&H~qYQpn@n<(5XHbP`ePRJl1*OE+wMrqIKU^=p=QjkYqug_ zRxj5e_3bXy|K57hU5Q%u3BdMO>zeZ~KY$^7MZpnt7Dp;=)zbiRZ}As>61y`NBHtmfI$4f|NFS$XU6~Y)g180?awyge;pqD zr>Xzze9XTL0RS`yXnw9I|I5^$r)Bi^ni^|vYAPbKVsnfi0n)jv)BUz-p9HkF9+ ze{Mzi-N5gf_}>P2vHnXT{~h?dWc)W!?Q?DYkDB+Ffc!i9cMbM$w8*E9_8;`W71`h6 z6TgXvf5S&V_pSX6|BsaTyMf<@yT1*@;{Ejq{)deByQSYHs=qB=;QwXm^Z)!u3j7`Z zJB#->9Gd(u_&+(l-{HTrT7Sd2DE@-~&2jw>{+&qp8w^7I7x=$uh2QbNx7B~+*=YX# zOG;SNFSmt$wO| z*IT=G)${BvBMuCL1ONm84uHs6qo8OlYJvL&000~c000{R0KnPW&Vbg^(7;re*4|Lx z!PMGH+tgCm*pQya#>)6i$=m`-5vh~2f{&_%$V|q80mR>T$@Ns`cero_;s6SIV!TpW1pZOX+%KAt zKb#xe#Cgdc`TJl=Qd2n|ybd@HvKBHI2*k_AiYGH50mxwILCgVD9)WN^Y}L`dtQKYT zw-=B)_Dx@%#v3mnQXLb?0Y;B^P5kHKy!hal2LOqwgRsyA!R{4hQ>SxNzN5hNN7f#b zN?RR~K&W2F-<{JT{sJx$tsKE9p=l$cFhb0eCZI%xLq-QgBpdb<5E3mbin)q+)dGw@ zGfgA9hNIjfMP2?Xz|YDD!UPO&6&#G9iYk1`4R)gIkzvl=Lr*2m$T`7I9)ye*y?F~C z7~a1OMNTsZii+y6Ma#2fpxXL<_Q+v5)`^`dKi0^T8+XEnX-F20He$3s)_aWPnT${klQQLc2Gky5#f4IWG5)BLN+h^^cmfB z`BT*-BUec^GB`uuMs0z{AgtaI$fVF9)GpI>M3J`Ba=*80s`^HT{F)bvBV&^VHxZra z4x=Vb-rKgpZde)EKLl3Ia=y zc%9gdT*$$l49%YRHAEC?2g$Qt*#SR^SMVu^zk<+|oji1?V7QYzc5>s@ zAsO5C0eLOyadB7uI3#|~3w_y&;l{ZbTejX^6{Qsl2u3$gs3HFGzCrX*KDe9jFnTzL zPPTL?#sZU;q;F*MkrvzFO-NxmFx0dWaSXB2*nnY9qK~5VxEi5U5@X7jLyo32!^P<_ z>{dw;y%N+`g}J^c-?lZi2*HlZ(<)2J4I=2Zf1 z&4}QhkIU%}1Rm=E^zy!!4Cr~vjkbSO29JlA_CfdbJrlP(k9KJzt)xSw#L21U8QAv= z&FNUojB6ehTSNy$hkT#=T^b9SAa)z%Z0tjx_zCESC%}~Tk4H+LTZPl}Bh{qEw$rbM zCJTc*!qH6@I1qk~*#0Mt7eCHZ_PVg^@7B=T%(U6)s2(!UwCSmxiQ4Yo?Fn^OE_kfl zrxtFu37?xfG_9SzTAGRv7G+?5q}?eSmJWE{SrjxdwCRsk`oHX6a3uRRJ~d`B7Q_4m zuynp@^otFh;K2OV)pbYS^R5i5NDblDc=(k34l47X%!+4Ir;y$j=`sQh0FaCP|Ie%p ze`MA~6?X->r{$uR#W~pnb?oBnI7V|xCncseq;WWt$+;s)Dao+CA5m;B5F;`&GQ-ap zJX}MZjB}gF?DAV=K&c@R1WpuOZ2ARIIdCz#3|c;La4ooL4V^rb>>Eua_iFAJ#%DbD zZ5tae?LS{$o$gSF`+81#7XSf#HuHsHvVZ`TvRvFNJ%4@}oP8P6|2TUS7oOY%@QER{ z{)yb=gAWhzeKA=W*2}52ekq6BTeX4K;||r3XL%qwS>{aJac>dkbpdw$qb9gr?P@78 zkV{r6aI)RPeSpM0GGG7jkCb zMSU}^6uK1FWZl0`;phmVZkWBz)q|q~`Wc#q(rR7G?_S`C<3ZK8?k~PwSN@o6pyPr| zePjm!@qSq>YPC_y{2-lceb9BRs7^$~U*vG){1x}25{+fXMA77xyscf6Vk&sWQE4L| zR*Oz=t9eh_Z~g47%kMQkH)iq<`}AEjD>Ye{0?E#uJ(lgv{|ohc=TX=^{rXmQghi>0 zKdAzN#8zwNyz-g5$vwIm(Pp=Bn=*h>)#~L+&f6|ShT%#C8Q|P#-k116_$F(75Y!X0 z7g7jBw{3oiN=E^N0erZf*+K;B6^{Ij8~CI5a#(Y-uR??VYT`QugcGE5)_+A3MF z6D!rcz&OuYIY8)Y9KDqk0Q>H zX)G8_i2}$4v^hhu9dt!gF;`9_nQ+pCaV;mQ@xmZ$Bzrd^STeQbFUVkAUX6jUgh&~8 zw(>0Dz-ndTMb@Iyk?f`d*lHY}P2K*sels5LwMZd2{@d3W#N(5lEpP*v6>V>q$0TZe60IHXyxw!s1UXzAP~+!zf~+1l!e%L__xCEi=S% zOw8@RvMBjya%0!ll3z=E!|B_)F=$>~4oaqh%kXyex8gv9a6|(*fWw^8nJhXOjhUPmdU3^_!M-!k^`1bHb_> zB}i|=hIVDK>iVKA88dwHW-krNG>hL1;ZdzEykyyp0nz{6$T;oVz+L50V(cnn4BU~E zvW*u}!o_UoAQpzIAXrS247mk;P-kna!UhzJ@xxgn4~{5|q&psH=dj~7{Wy31vBb*S zl#w@KadyuPb3*<*Nm;x;{n8V>=v>b_V|ro0=_BmSicwXx7r0T{ssA$*vO=FxJo`=m zRpc9;9|>hnqgGM;51MlHPC>j!B}-aOC}ks%=zSWu$t2D*B_qdy$ehAb14W?tZxSYf z+I)`59uXm^Z>(c=pQjIa#Fvja zCLWEF6KC1NEp7pmxiy?fK0DlXC3!~RrABnOazpn)@)5<^dj5ptWEIeCll_o-z?@G=HaiGvrJNa?%uOwf z5os7Y5Di~7b}yE7GCL!*)JV*rhhzBwvP!6{=9<7s48GY0P&k}_*x`v#em0Y0c)YF` z#6Cft3E5dsl0U~JS+H5YKW}+j6i8PJS2KYigQoT}@|-b1z;RrK9Dd$U{e_*X+#X0Q z_|;=qfF%DLdK7+UylUjD@eNFFZmqym7UXdsnFw#l(@l8vv>z2c8~UK;xrCVL{ikp(IT8udWC%;>A>&NYf9x z$r8=zx6Vx(v!#^FZCnaFIx?*kwR<#}A>zN_yQH3+vs}8oKDNYvaO?!BGy~m(zkD3L z+fXoPuZ|$3;{%Jvp1Iyg)9K+jcc z=$tgZoGtE$x#tpVBl3U=ZF{touMV7dJ%D|u2m39n)3IS5;i}8xI6CM1yzRIudJG55 z9sVg7;rva*{i|y$jIl?2itxBvl#bFjNHJDgFBo-x+55O~LBT79fd*$Bow@f>EJ)Kr z(G?H=Nayp`TP?$NOVfRl06)QY7#1odlnlojZ;Ulw<_^gRI3n|SoAe6^Nv^%x#Ba%> zIA+bN+h@~SWxdAC_g535sV4(?vY8w%`~V0takl8ls(Aw}?zD5;Zfy!D@^xEpWSSLk z55$S{sF~&G4T8I)6&;G(vQIw>9Shtn!?usBo}N_sC~cxEFhYoVyn+>~0Bf*r5`B%2 zI4jM6D-K28fP=OVwZ$t?PF{& z?v!Q@$kGM2>j6nbF9mIU33^uGjQy5l>KFxr5!Ko=t#=x`CQCrg1IpHgAa`QIm2XFa zLE%y*8eY}BQMZpcSNh(#T7 zvgjN%iC``s$a!rE$}^K+X2(cM*W>uzGW>e>*}03yd{!=5OaJJSwZTuJyV#scpHpId z%tEGp?|kmn^!`w^V1|w2<;!y`gs_n zp5{(tS<62%_Id3&Z+&=#(Cl!QOxjQ4EVq*#qE3;S;~zlxFCY=khXvB=K@n1OJs%z4 z^u2TFG%AWKx@U#$n@OX(8cv~z7Zp{?rHq&%Sw(QpgW_=1l)o_G{!rX0fefq6h_9;n zI{uOYggu*T>}hv`ZJtUmpcxfPza%^10x#f+^X}ATWtC+&Z-epJ1ANGsi{MZHvHdz9 z4lgPxvEpN#2ZNKN2`5pArb7pN5d~J*bcuyn*M6q#b0^286<1KpiBIEviM?nu@@us5 zn8ljGxWpy^Ug`TPs`%Q-0;Ta3Td41z5v3#+QNf!{MZy@8%#-uD=us}ftd_9qa=%jG z9qyYl*l8*p*JO~Eww3bhDqo3R=_Nq~%~r`M0c;5MiYjTWX1`IgZKW31t-c)7t5;@l zKw+8$WM#b&bGy##d4&XbuQ_el7kzf)vjBrc7F=aTGK1El(4tr$zB^LhgmcG`K1eJj zGZxi@PHcznr3!*PPYm*ge1f9DbM~d-#hLVLe$%V#-d_=#nqGvB(4fM;zc^#qPJI>3 z3r}Io;YbX)%@e(aN%c*ng#l$G*RNlYf+&3P6*zgc*xa2b$hsuvIoGclt7;oY+6a5T zFSQg(6&xa-Z=&{qN51J9e*e(LA$QnUKr85VouRkuL6dWGudre5V0N)ts<%Cykku-yv_O*N`1$%E>94FQ7Ezs zrjjJ(dT&(1^aPKfNxCJF6DE_-Xf{3RV8FB&MFrSrwh_$xsI0XJWCY#<;&9FLqu~5) z*Hl;L+|OL^*~<4&Wm(vip*k5tj)sd&A~?BNWMtpRp{J?VLQ9FdHr`4*3(c3uhpF7R0rRo|juK_`liEe@63+VCtRS9@Mg+Syg6`yPf3;&!XWRaVm9$>MoiyAbOa?ca0z9h0SWx(shyVgS%L%DRW%78AqUR} zsfP_aDEw>2mO?VRUcap6nw{gUPCJ`as-;zm;h6fcDzaK1d0;3g6iW3MS6n~CoFXL~ zrSwc{j0FXeS|VYng!~b|QhK-0bwCJk!9-E8 zB(7ZqcmuRNK_Fjp;Z1tyZXJe9Ok(!Gk%L3hQUG~FC!jN*c| z#mi|mW+%$C!52YaZUC~MV#*S2DHosH)-DL$o8D@Lan_Hs*B)po@d8(qNtfO@f#pw4 zSzf;A-{-_ni5(|qg|=W&nKUPP#@g(83b3Zt^UC<0h3df@HzzJ^*)I|*mkSG}38;z$ zM@t*=vUO4gW!gzSAo+zeQ^5*SPsS{L9hd`*;Wi8XLyJ=>p6c}J>TxKv*xZQf*{sBE z#+1yl@sO(KbZPSI9u9Niul2}n3}D1&eim=aDkjCmFBfH)p3~`Ep=PP?ppEk zYSH?T<*FGv`%=7y-nkyQ_W69f&>?kufC=oM9Nt_A4u-uY1c2dg$)&4?m+I1X2!gdN zsx~%;ZO6M`3!S(c$emone&I>Ivl*({_$UD?-hjk?%5&v9J$2_`v?;ATm|xp)vMhEB zh8<^b*MFb>%JXXKy{x23!qHiF_X<2W=x^LwNnd?87d66c+$ny()4}uoYWaDwEqsCV zgXQm}`3G?};X@GZ3J3u33lsnV@l%pe=eM?UFtl>eR&cd3wAZ9@v9xGN9JA`BgA;ss z3maacpm&f}MD`WL9YZO-1&-i?Pkl7QH8dStbq|gaLgc!Uz)#pT7ozShfEUhaB1iFfFi` zold2+Vu5OVdSQEq0gm$-aloa7r^i92 zU!~O^$3MQZHV1FBJ`Nj*W^ynA;SxL4VH4-w9er0^$0{tCmHH7$N)Lx&aa{5IwB1IS7>&g;TC zD;qP9nE!pJUcXW_gV71OK;YUTckWx;{O^@fpW(pH~BGeHlAz8+%$^8=F4@I5WD#td9;U z@PRvUI%{|WPAtYyOng}GGN!RErqa^au`0$Y^6g%cd@-{v6Zer-xIsLn3|;O%Aku~N zR~}IPE+h`!dNFOR`N6(~cx*TBV5KNg@1X{)q)Z^jz(=pr!W|S_VeHZu1SS=sVg}OA4n!DbU?L+u!u)HM5@t17&zE(P zmWcEW3wTMP(jE1Z)bMsbSG#=6i79?{xxUA!#P74LoyE*}h*0R3(EN<-aXoUE(=(@* z^XTAGxqcW(>}diJT;}i=XO%dIDPIk#uS_<}ZUv%_{p0hiP18zJ9p$vW`FNCRt=HuF zOP7^w@dh+5Bh+P$mu)U zJ6K!(8FiC2kiDN#x3yLbzO17#2Q)RaX)|*@y%83UlmP`}gbzaPth3Y*ypKcvT>?hM08n*|tx$$?zzNj4 zc^usyo!l+{IwC&L)&Zr`Kp8e=uC#1&v@&BDb!%v(O4<5I+Yax=b?B!T?2`Q1ZyBZD z%TJ!pmRa~b$!Ab+Nqjs#8VK0LI*i#Ox|ckz{@3?m1Y zL4zi>D(FIM9=#`Ux`q#}Rfm&pBCQzBPB7Mk5r}FH&k(>4-kYEeY8itP1@aGF`K1y0iR>M9u{MrHfF+ZAVTvCfeNB+S z-`$pnhN1zb4uO~^I1rZyiQ>DHgV-V>=ApjJ;sAimaow;4dY`#0(HMo^KitD64Y;aa z!;PJ}sv7Z7?H&qKasL)1_pd^Yx7or)SU9)U8*(A$e_7!L=u!;Uko` z&5;Nu=brc=k;PT6WkCw%S?0x&$<$*XEL_MWc$j*`p0S2Db*dDJWO0n#U?1P5w{bEK zDkwyt9&lOYW$}gw6jz{SJiI^Oo>QHoClU#YF=$QQtS2aSu%PmEWc8Cv3$alb03wA^ z;P4;Fj50JyhyvRw0x_13USmsmbBb;R_gh(?ZcNw6B-2SHNJV~ZE*W(k`Zy|&VpXAyYw;O=W$S}bF z@zW)}yNzB=(yS7EaT`eQD5+TfE}=>F=8?Zz;SIa{CeCGz(5dM0c4Pqs07LRa*SsBe+ zu*ieR*wfQVcvjW;N%lJ|72{K*NDvlZBN1>J8Sl>fi?dnp1`Dy|q&q}EDso*io-|Tx z(b?88EZ44p)YSc3KIy6*xoai*Ms0$p(R>J*eT1mfI=_7;reOL;<6Ty5k4$497wPTz z)V)8zOV&W=S{nm4O3o>o=$7RsCR!bov&F*(e0-^!N_x`GrE2=hxx9h_RF+vE$)1sfYAbofSW z;B6kJUU1z$tr@`Hc6XOEnt@{c;QWQ=ykvA;KW^fa6L{uB?2)mwI^C6B@)mu%W?Mla zWO7J1c3J!C0_j%1D${JpZZJ{<9SckttZ3d26y?_sc#0v2M5nJ^nHXJ2M8zng@`n{( zYbApo{$#2^`GdC1M8sGij+K`;3mhtYhviV5fnr}igye_u<~~Z<-$|$v`_S5aj|fh` zRI-zF$aOLV-N9qHcP= zIHsk}T}vcxUUb8`gJRDZ;uf%@0r98WOpQ@z(4dFPASB$*djv9hN4TZTA~f~}wANk1 zfC>yN0dX7}fsqdGl`$ll?~vRc#X-lid!%Lqu$lNpb}UG&{;`L+y5~WF!Pny(LJPCU ztsH>Bccn$+l}!^;aDtyOoV0xJ=hYXgGYkAsEg(&e>K1_39gEnzc0_Zkj9e}o?&;8$W(tEh+6qDRzJ8)0GjsdBDwLDYcPt{UueHM14wDck?%N`phCr_-Qy1eKxNf)&~ETg~H9p=J=&5E~IbFjZ%57^B@2LS;{i! z`*U1a%e-<1`25>x#dX7M*~^&O(;D}bgYq4|;e55k#y6K>j%NUnBRqQ)yK^8PkHs2f z9voOI5`KbKUO~s9AX!fM0*ljb$oX8VRs`Chq5kkiP@m2ic){ohRQ~n^i4&RS5LDS} z7mhu_Vjwiwnq52ghIs=HpqPOUTW_RV-_h9I9fSi<_z^b(VZhk6yhn!&7rZPFB~+X! zD(61_HH0n1>o}#e&SG&qa$8p#GhD~$UC)Em z@zrE`$ruaV*C9ICs}aq(ltAtbizO(2##AqxR(nyBEq^muO7jNuzM}o_TH3sNGz;Lf zCJ6kiy!>;`(zmw!qZqLNv#g1gl__ZtlSveKoLVHj{#>$M4H@#S3FpR{i`f`aXzy_NU}q#`|gzWZ{^g-WT3u zG;;S0^&H1-u}oiGpMn0{UElFws53uZrTtlo!~VO3vUhN`F#OY5XUdw^%b&IQMpekG z7J^D3#hgryVn~MtGWA;Bfkp`FP@@Mn*~^`MCkD5i2ysBGQ+qcT)`mv5{Z8~rda;0u zINfj}lxPzo94wJMd~$fqIL;udazDSgp+I09TpTlA3%XaU7W7o*mz;w^ajcY>{$Izw z7lh&Xxr?$G1uxc>5_~_tPV_3@uo>HwtEBnVd(nbFcLMVMaQ`-_K}cTrW7$BR9MLo% z4X;%XQFd3HEZN|2G#sfdkWDghfQrev2x^S%1B23ZS{<5%I+l9!M5j4yx zAj9fARC)JLxh>pa>QZn~+LD;6=5PoKRAkU=J*Vs*FV*NS&B890U=3TA)yf8YK6!rB zpkvl@5(<;a9;(sMjl39-pSK7tIB_I0T&)4&#s|A^w^U9~sbA_6KZ*au(O#r|9gX~M zt@E(0`2;=~k;edG_+d^7!*Rk#bpH%|f%hQtO7t_4%fJc-y)sR2hQ5Zi*b|eZwt=-O z)@@XpfQRlMWR&i?=p=YaI&Arv&^3Yck~Lq9BV~cxCZ^3zq7Ysb0oNER$=93^H_Sqf ze;$iU`})dHrvprAT>@X9GKBk;)Ex(}UgXVxN5#l1ia4N_I*|H^0Z}FPGo}=NIA%*J z>IJ;qm7pM1isC6oUIV3UHE!CD4MS2xlf7KehkgUad@e?IO(;=VMxjXVM;u-~`I4z~ zbMw?!!mS5Y&%r=^^GcK|=zh|%#Jz?F$J@$KxgG6hvl zd>6)zbl219?9JL9o9cjuMdZR^C^IuEE%U2)r%7!=l)PRcHa_|Abck&im*r^WdmH+U zJ(<`;IPt;POWGnUPR^TRt>gg> zoQ}`sgi=CN?3;wIEG86^Z4M$u0-bFO#$^nE$FYrCQOd5Egfx0f)_3q~<&$@-Q3#0Q zO4H}^quq50!m9@2DRq*B6`u=6LBY~e(wCR;X2Jj#i6NO(kgwI#QQRRz@oWjaR3ZL| zlUACDSMEP=52Goy#1i`@^3Z)fp6XUBtuFN7o}M9WE36#c3be+u3&zZOIW|yw5FUn4 ziKU}d=cm#2Z8wlhAcpjfuqD@Zi16E&=GwOX$Bo?wGAIpP}fSs z&}&_!Ff~u~wq!UE>AadgBVwf(It+Ef?OI<*ILPXu4lyv|MlhKH$G)r{)5jW3$-H$> z!1an*o(=Nbk^>=va~PI0ZUBr23=_&_#z-1x%xozs6&u0At^r;N)lVDU6HKy~hE=-N zs940R?tHSlyBqm>KTz~b6iIn^r|63J0=9^S6x!rI(cHBT8NepVtU&oRp(pftllO*! z^|EO^21&hNs?eB93!VH=PMu)|i%M4Osi!7G=;zOpotjXqc?T$2CoC0*6r^|6Xf=Y} zSw~VpP7HcuKGedeOghDcPAJuNF!`lm349kOF1@vV;)I1uz+IS6s8g3#Ai))&qQm!u zdAyiG2F?X^^tmZm5f=Swc?dF5j#v>*+)7hRFBv8V=*wF3TwX{{L3Y?nM|P`+sS?+;*U{z{4;J3anT_9mb(`813a9y?O#y^ZS^nS8=`;Xzonaw6_GzD zu@1yP(w@;L2d<#2XYnVWHjpT5olXZg)CGC{5=KviFKe1uG_ihP?YLYAOi~kIxl5S) zbk6}Lx}r1se|iz|)%mC4Kx zgw|{HLj8>}Kjmgd3j>IPF(q#zbxR8+wRlJXDn(>V?twy*;Ny0;qL$vY>_UW1PsE0Y zHL`Wk1Px3$z`;|OSh&$koY|NtlK`F|Y51#G5{5OKuX*f3Gg3cW;s)OF)RS8@$qf^& zV7_u#5o;sosROqRCQ?_J@MVz|T6Ai}DM29Aem6uA<}I!^;&7JaAm*f~mz7H%>HxLO zn%i@Y?2&v!8G=X(Tv8*q04@R>0il<`P6HKXf(vCxtu{{Gy%sd!_X$u2y#AUwhlV@3 zjW!)$4hF^%?r%-WIE7~|{p%Who${1upDOyX<60Jn=ibaP3~P994^)*D-U*U4WAtXXQs@aB=5}>+Ne=H=g%-sRIiMfbnB{* zC4}F81UHfB`>=vlW(X&(;%wEg{(8#$F`4h~)3)*7YbWc$<2CKd zH&sgI6xHrz3fA39mI-|4zP>T9$TcWz)801hEbjCh)m7K$#PM&V^Zb0_sxr<9Pre9* z!bZR+k8TZe?9|0WXj#pV-C(wg3_4&3je``%G2$f9)E6qSeVP$$F9kwC067)0+OC8r zL$*#Ua?r&XyWu2(Uro1x*Zac1m7ditjK^$XR5xvsj$ah(OMvA!l^ze_2!TON5UKI# z)1zEqz_7(ob5VrhC=_-FQ?V;NX^;)!5Td#Oz=gwu5$its9ZLKQOREs!8`^NY!}PeS z#C#0%Hr*Rl2znofNs+)-w0#kCJqwKmDn^<;ba{7=&J?anU_X+tCTe?wQulqe{+(SZ zhM89jMaPB>#ytY>?35b5#jP8calV8JGKhQNlxh9h52I8aR1o9&;B}?04I0D@zbP$z zC|Zm9Gh)6lNVG^8rA<+zaHPEy2xDc+E9`FPYc(>RA|+FMz}T|#Hn@#FJ#ZhUF_mfX zQdJ3(#V;DT!TP+mWq{TQ6>FpW8ZGR}CHynUOiG$NJ7|4Ch zANw~v-YzPE8wf5HJHkvv2y1x4Cegv6_Q({&Dj9JMkaY9p>an!80f=(Q9yxvpuY*vG z8edLh?eMI>nm{EEQ_i*#=RW|`E7n80QiF>RV^69^hno#m79Q8DNDy`jb)_74b49>X z&Oao}ait8(tklby@Zb^4JEI%mz7P>W5C)KiTEz46vle9ajK=tfa${)<+rr2hL^n9mo zvM`06?fr7dWj?2Vd8l_%f1tK$Cx33gHT{rJYQ1AxFCN$WF%`#CzY9zKgk0`%CZutz zCBLCi4Ai%beILNkSY;HUk!-qbw>3t$v) zbYj`1A<0TI**=04g3yo4TOF~UH;2g)>3D!4vtaj|C#9p5)URT~opXu}2=FIm=9(_@ zj=!*4inzy0rw`iIvP%b$eu4ImxPz3hjgKeL81;+iWs9m99E>v(1E0oHDJnJ4Dw(e> zI!eK07Fp-t6+QnNNvxczlt0W6ti>oFVNg~k4Id?R010A~9QsZZ)iwxnuVI5eh$llr z4Z+BBj8Qq-&Sq;#`=TMAqm;jX5ErK+(hzA#S6tY1&B7qN#W!1nXluN~ujs8d8>KY# zEPY0o%qT&ExLuZ(s+Y31BQMzRwTYcepB}~qm9%n0aZ?f?ENV{=SFLqc0Wju?rw%)I z;aThGr;4>%A?$bynX)r`vKr!0uw?uT?IW$TesT)+;Nw(WuCuzs()9=)>K+Uzzd))D z6qRCgDtg8JOaUD&NXN2(I-Hoc9#MZJ_gC*e-#+wD*g2ffJ#tfb3V7g4imAn< zB6Vqn#pir-zijRN4LLusrmf6 zP5oczR{muO0HD!V?Q=c(U#9*%#qv*6|JU}XzfEaQE% z_)XON8$SBEpX_h=eYNXOjGK@4N5a`(}OLuh;7C)qm{W ztLk&=RGqy~$x8u)pa1{?KmZ`~)F{tQ(~d!a0sxpm0s!Cw006kzIU3X3m>63a&^wtJ zIa}D->RH$rn3*ur+1r}6t9n|ah+yaul#2Up5erE7jiVu3J>2|-s7a*eceHWG|31dZ}rU#BBhyg+c zb$Iydh7uS6=@7r3`F!yB)?wE%c-En+#q7D35;BMY!bqoxTS@#K5en~T1YP$es!Foy z&SJaiy;nK`PvHeG(W`(+8iC}={1T6uu5%O!>^QJ7u|JQ-ILTUh8<7>z(svvt|F|-| zf(h$Y+1N6if`gZQ>p7TQu!fd?!FyU(#-$kuk<_vj*(5Vk=^R4v7!BIORYf-OeRonG z*M1n00|Hs2m@;SdA&+TICS&#Qcb*_vj(k}#-|=MiMK&HuhU>Kb41i${3pHd7L5Hd1 zp2K?S~U>ZtHW1OKyh?gBAsYYob*Tjx$up>RMG{jS-G0C8w;#5T-OPfPuyy zpxMa15vNeL!VF96fp%R#OEoT_BC*dSm}(0deMX3sL|k|EgHs^EDX8wtFRLY?5=R5w zkV}3Zxym0Koaw^%tIt+**UOUzgQSz6g2%2NrUg**twuKnHjJ{e9g@VHy!DAv<)}&y zt{5e|0vZ=UeD?Mt=o;<-TAfV_TSY7gu5HmBPEjxbh5#V^0t~^KmgpUWhFlTQD)}Wq zP2QLga4iqtxJ=b1WBb4hc`hIQHa|h~KvE27$|jTm)M+@ev`xKTg6Cq$QI~(#@6Mpy z7{L@fEFKW8OnOIWqX;ZjtHt)n!Wh5TW*rpin(n6lhku6rstU?8oRc8RbE+ zGt7;q#QIDW>`X8C(FD}NCSZ$2^T#8=zKTBZR6IoXwzMtvSVJE(`vQnl@31<;_AVPZ zea5Z3;x9!4TqUh1?kgSbr|$%!t|C2&HD@cc{N9!KV<}fB@5JT08XsFNDwq5W=b4mt z=NH7qmDyJZX;TR!uW~jmO}~2fFvDBOd{!U(XI_}Iky;-o4Zq{2`_gW%c8*wBo-TjQ zJ=~jnm>Abe%Z_&IV3&Wee(Vaa(#saEG!~;x=hvw?I&wd_yiN|P+ixe8s%#vPTfEDz zgKKnsXtYHHV%>a6et8vLLz)om|!qUm;X$WPK~ITXGGGTV6>a=M6?FDN7X zwLK;x^#LgVpA<@HU#A=#&sq|L001zF{{K&*On;=%NOezT#b>mldgkvV7g(-xGMxN`HD0mzd;92<{V$h{(*&%_KnBC{u|DqbPq- z6s}t5ztF5Ry?`dn`Ezny$u=sz-qjKiz)wcLc=rOJOLNukG5EgR z4vxdyLf6||lru956rg^!W8JFu!QvDcV3l4d8vk0FKnDKR^uzQ=z7JG7+h!j%L*gN( zyBhxTnP`5B*rLu>Oq2LquN?)maH;nc*v)7 zZDh(QQ9LJ%4LE=?Yu-G-rW#Km0QVv|kYB{D;;>Ui-@vqQB&NZv9Xx)5A(U7^bNuSl z>bS5Vw0Wo1(nY+k@A*Qrj$B{b%q3NQa)2K4G3w0|M;POq0Cj4C zu)^Dsd<2z#d(AxDumISNPqXppOMLdR$=GspxxC&XS920t=kw5x3WbLLVX{nGwwV)4 zW>K{{8V}PAFV-B0mv+?Sft)qK2z#=|X6WbW-H9V+*JV)GIXYmxTUl+1kZ2%^y3^k7 zSY!}506e5nJbSDIm9Nh+kg=7lGzX=ByjixHdJ((!p~TQfTarWB=j&5%x0;Rj_~=kS zS5f;q>FPwGs_SfqlA=1_LR|S!Fd2<3Q5@AcquIYL9ukGt{5qkx4Fja2J$A6Sn$G52 zqMZEW6n4V!9zlm`$-ma?6|PAsOFo%6486VC17X9ZP|UKG;yZMDdW(H7QRpa^-V}&q z#Z`=Bv#_K9v(wmD)^C>Z1+xIj6YtrRAN26Si&3?ghe+oe!r-35Dv$M@i>AY^3O#0O z<|vG`g+G*hcDXv;MBTzW!p9@4+|=0K>h+YS19$7&bi?S}*6xrR9Zd^H-${`o zP}5Hk@|pOfB@3wa$HLlyWiO(7e?t?&>)j;&5pez|7$~?D+LQzhx!31f6WSni#2!-i zJFQLc_sYv9v9F=JV!3$qZY127XK4M;YZonitIS$gfNS zdfU|px}EqAMWmx=E!9$0LT>c@!m2VF!#p&-%_3yeZ?mBJ#?vw)7{s&>4U+a8x0z`n z#rxF8R;=#^_Q1JLkcsBXi^-O|1i$2s2x+jFKwC0LUMn0} zph`-{)t0e_u@$iaZCa0Y-RXTo2Dt4zW@ZM5ovzN^v)j~QgFWw{rDh%h3_%M34aPHz zHu(Z6+H@D*Yn72o}UPlYK$(&90t(oKcj# zMvJTJm9e}-TScYb@MATlBN=YkDL?eNrnkJ_Lc$1q8H~>L$nR*88Z_+yL0}#X*2&hz zw7diu`e%|^1FWw1c<;7r>@#jh*LrXVxvVm$|5$>-BVO{%Oguo}}fFmFqI@S`8T zxiFce6PZ>DuxjS0((x2#(Q4IGG%#J+<`vXmyQw8c-z`T-k3jztKZkYz*nNmhPCvMEeHXMzBy&}P(+z1!OB>wj2LfYuYRBME+@#0F zzie||2XT|gDiz2Ih-f^+D_G7P8*KX>z-@lbg>p;MU_8{IJ9 zLF*H3zp16RI--@{f?8XBjlz&Xxf5_wN)oD4)XCfm$m_b}vW3()F^)>CO^vF?JpOep zg;m{7zv8VULj_L$NtBHhTYZFg?0Iekg^LTG}swv3cL zx;b$0^HlQ1taYAR6%Q=3Qagp1R;59+P58K=x?ZTYfwNhJ5iX3y2353WXJuc-hH4YG zMW7cl%hHUc#3+;s zg053xyghKaBxRi*Uga~W#qh&Ta=Y4DkUS|bw?PqZhxfNFLMI?(e|d^^#Fh9tn{#I;zY^vC1997%SBc+OvzuL#h>N4=c5= zX+HcAOa#xCLt@=6mjA&T5FfIK$|<~8>cr{jW_!EN%S3zltFE~}CK8{%iajstsZq9LNKXHOoRK39(L zED)4d#JR&8g{w&GNpF@WEn4a?{u>2ppdbZyV?`I;es9I~cwzK(qgEZ^`6~<+bg=8` zQ8kMqtkiM4z;Wo%!FZ?hDz-~E_feOti?D^0<=IkvG9mtAe0q?f)1at$iYvXnmg(lu zaU_Q1ACpK-tcuhUUyIULA3~6TJjI~&>MxMQ)GmTD)0)n5?ZlWwZm!!1@9NXSbO&h4zEYt;-^UCysCvbghg4t1 zdl$LHzS{J;q_L!N@DhMxp*9zo`ruS^o6-M zX4~3(fzNvCpvsj3jlaWf+JA(+&;|s$Tu_xA2e8vcC7!l`4~#6l`-K3RX>DQI^8w+l zB53xr3A2MPn!9OJ$KsfDG>d5VwZA|k414X0Nk zNV=`pDHQ2oRgXs1Zd+&op45lOPOAY*D!daiI;6SjOi)%+>$<^g(|kZsInynShy0)*5>KO+ofLuw;A9A~Hs zbyj7S0576-+Z)+lDquK%8%6Jz$F%4NxDr?mk_VspHirorhp-TK)v`@x5X`O?YTh4> z1ME*)C4r8QxC?d#dXf=3GORi$De)sA#i4>k{(g0vbD0!_?ec!a(u&w@)32T z$FHsX5Z=DwM59)NAUBr62#=c~98`4VRbh>c!?okw|NhedjQ&Vxr3F)>dB;NZ4KMSh z_8>rFIDe+wDYotky<>R7lbld%D)-{6QPWj6y6YAJU(?dcSw+ zOC`G!or-pb6mKh+(Pe?4UR57JV#augGvV&mpjCahmBAG6s#qHp@PR%!8(gMVP3R=D z$vwZfQA{-c&rkt3tCpr-l^Mht#CW^W>B9@bg2}*Ba$$A_J zX)fLaZUIm)IC)}m(iGjx7s4mQ?X6vxcd6#l{y385CiZA@AN_H+X3PW49Em)^X1bKz z&3l?cwXbN%25eN-n^M6I-l-&g?}^1HJ?xK?A!ma>R-r7U{2k3J8pD?kXfloSx$UYJ z_#VYt#?QBJUhc^lKxBPlNWsw&8LTu7afdA+JmD$C8MosxXEx>cIw0v#QD z3XRe}M9|Jz^A}Ow8ghWWx{=R`d4+gdr?SX%&MB$ovBE|)lljA!?`-Ab`;Y+Y8nb&o z`0%kNmiLQ@7Mc2&k8M};v_DI37{k9u|Lm|#M>?vc7PYYi>+qH`i6Ez2AS7rPe;2cP zFI}esEA_Un5TSv;`i{Cq!KtA8JeKGfA@V>dX10LDRVZduO@n50%`#CN$}~^1bhlBk z|4Z9ZcSfWYQc)?*OLuR^Sp!V{`+zKaZdvZHZ2SCwOBsKt!G5HWjf)@v0KriIe<_3c4=LkZRm&Ph1%ofB zpp*gw)-p$%OevI&gZt(~Ft*tZ=pn7xQV&R2Q~A~0hGPv2EMV*@4aqtMte#5T-0c0xdB|wdnhLQ{$zyy;t~?8 zzFQeurL3HBEdWa%OP^ii_sGI>KwIKUm@Ju>U=Vy94lKlCVs7x&gRUqy3huh zI5lU`lfP7F8hU6XX~^n>`V&G795d>qm`N8`_92KwSz;$y>Brw3Fod?QGsq-I#ng<{ z7b(FYLt>fAyi!md6`x_)*4nzi0OtND@kAu<_#{x`yF%lL@vkXK)PkgjHZ~{sM zn2x(xbrBU;BXbPS;!qcgAuY3r(mnwdV#WX)qqKV8$h|trjH%JOcsy*ecfTXm0#2;E zMjS@>AiCH0!Nio~rYU6w8myw>ut^4%e)?;|?<9$kCxra@LBDw7=ZrI($RS!rBzz#t zNZ%+_Tib!I?ux$(^ipj%U4SJAwv^lgeQPrIi;dOO7i_~L+Ov#-E)$TM+e2EVS|vD# zm`$w6Qo}M(ju(dxB9Y@RWg=Y1Hzc@R#9;a&K)CfdDzQxcLRo~?ONe6WKjHRQ^W{VizTB|)b=|beRLX{f8sqW@9B`QPdIKn+g;HkA(lPcmG zbc5JuW%>c1hu32z=IMre%YG_vG+n7)TxDnVJ35BP)%cy+^mO4w#;axRDZ0*^ zyBE#{wBPn7_+T%9G>vb0SXqqDu=hH46yEW4_N=RR+Y3ethPS8Z$GZ^uD+t26pfMod zo7Fe>lb@5fj!#$(vA8xVk@XHWNUNp3fd^TIHf5zk^Tg9RyH= zYmq-*Aoh!H1~ur=S0HC*uF~Q1C22h&s6R}rZ*Kc?<`=*_uKtvv`$fo46l$~_+~2OJ zy>Yj*^8Ukn5DZxF2NF5G%?3>HWTR|A&_vPl7T_-l-uHYfDVvwV*KYg0xqXpCJfHKa z&^jW3!>S2zL1(-i>itAaes7P1(@PkitVcP#ptY{g6c1VKZ;g* z2OPl*srnXoe)aSk1u2YbDS=oWYCO5-c@dFd%%WkHNZSo=AtMpo?`N#vggP@v`kc{z z08auPi`kvPDjx?6!i2dQVTuh-C{zPUs?m3ZM+xf%m=@H-#h_kVu}HHsy*S7C-fx-X z_N|+De?gdmF?#r0gxI8fjcEUwN#vpp0z6gBS*eY5MI6In!XAxbCS4>)&K|d*|A>v8 zx;VORjsKJ$Wa$n2mR%E5XaFPArB zJ(U`YfK?-i_QOYBCl4Z&cdrbAf!)wJ3Z1eJmoUYPhBc|E7zGAB9ZbUelC~}G4a$#3 z&c!>anjr_+?K`&oFC=>A5A>6v_p?#_M^>~f)k#L#4J0*`;FBOhmL^M5 z_IuMQm>9|W^0&r!u>T(H;Ehj=+UGzwKf?g=pMy2Bb2Ry5w1tW~QlF#sepE|nlT2?E zimi3csU-&wK=zIt)qEIO^nEe15e>T1l#lqMolHzZ$*Wx{^@oimC%azxGvxmVSv1 zV{vlVAVp08A8#NZ(pFO<*c;AQ%ebqh^Ue-`Be|%qNdxdfQLSwrW`XnX7=oqeHN_J{ z-@-VxpE>PFz7Gmqv9mkZ(c=kkwZ`1@ax>!B6(8Qmp;%-T8F-Pqi%b> z7-D%<89a8TKAeMF`7vgr(f?p0CLQhdK@-ws9(4r+-uMaF1H#cdpHV$ZNX3Ku& zW_mL$93=w=&Xf>@)=hu8A>;s$@{2T_x-p=}C}*KOb-yc^UDFt*6DH-?_?w9MJO^jA zN@F$nl)2KfiIK{TA@uFR;VLz|V?9TLSC7F-ANXaZ^WQQ`y-$D=*=HzeeD+7+d=BEz z-iUvtmCy0G*nDmSe+=Z$6w{udBiBoS5p?;68t5stdYobE%sycJQ?m-T(2n2m8G@nV zLwC*jbcaMYMyCUu<8TQuY<%w=13V$+uGIT_RQLX8>xG&cb zXjNh1`@}F~&&-Xd4I&%Dnql0BcesQ}ZUiYZ31G)+SSBD&J}k7;5uLSY;#oybhDCTy z95=$JX@+%`%n>6By}oTKvv)WbsGATm7s4Plwm3ZeRH+u-3T^4gm*0kupLk5$*1khU z*gbryP8LL{E5Y@1; zw;(}j%=du+2LQNW{?}6dbAJChv**~$j;m}}?Rwn?*&;|=3L)nu4fqs(0Iuks25thK-frk(BRF*tQ^qAgC#Ua4f$`J5oS00J#XW04DUqr}TZMDD!#OH>OEfy7m+yHX(#$wb8feFyfecB=i%s=vyn|W{w`)L-4RP87KiJE0;^)waA=u7Uw7f%XUw&G?|hV+wy)l}`!oe!bc~9!xfi>} z(>Xw~%i4t{sLpq)3s1+Em#!yjoHo}~o|%jTvk9$(C|fp%+T8m!ZEmn+OVgG9YDiR^ zcvvR?sr=YVD2B^1Jr4}knk><{xIf==^Ts6bH1#KRoXMpG3gu4@5g3P&vWEG)8-)f> zx*rc+C5BM$=8TtY?lFT2|zoazM=CT(Q5ndXM;*zOUwDc(4K_-fuYwj$W z3&6W0Z$n=4x0>os9!ECZrBzkg8P^q0Evg87q=HOu{!H!2SD~9@(4Jfud%bT=o_bw* zL+=U7d#riJ#xab$$){ZdsVwvehOC(3;ys*_v2_YUZ5R=YFkWiv6k3DP=MJaqjX5BC znoFEC4;2NXDaL+k*o5oIr5FsE-PG;Kd?}AkDop8mM8*H2g!pnvnPmq6T6r!|;^BM0 zk{w3ROx44(kEJK_o#9tTiJfD`7B@;Us41x6UB;5Xev@P54GbwHAN~){v>CI8DQuo@ z>Ag6!K79aGC7ftmgK+GXs7 zUDy7qrtC%ASXp&-rU1F;=0&G3Y|b{T>=|!XVDw0nc)ddn*0$_}57LQxeTCZl(s+D> z+zF%V1F0d%?TtR%5YAA`v@BO;IZ$9Ls zpqtHBqhYN1{8#GgDc1Cburxy{lR%RTs+8G@H|!%7)p-D4)0Rgf_r)WY5=ekkv%seo zu)tQ?%wfZo`7xT(SWxr<7Xyh#lX@w~zgN(KncXbs4WtYUeunP#9fl0 zjWh0u8vr6|oBBrSsN@1BV_wM9g6K*VqZkoZT?h%y6$&MD-7$n37 z(sQpdj&&>DLny@oG=8g7%!dh2XM1V7EN2e!5y@3D1RaijfKsy?o;#>*%F9JgQhI}B zikJgAXx)DgOD^cTnV}*}S%3CUrRD1;F4%ebAfiq0YO~1B_i!D+#{&mklxq{wiw9rd z%dji3rSibtL)Dx|U4RsxO`diVmfU8vQ<%w!Sg-v974ex|wv4wr$swVvp0$*1?EyCT zJX=cD8-{$bw=|Pxm08N_b)Z+NfmS|?qf@un%RFu!c29!o+(*-kPtdEV02@Hb3YUl0 z&Q9RRJ>{s79Y274IkRnQFpvGayp?yWe!z#p%sIcxOuJs$61^A)aUIA0`VAH;_=c== zkNdmU0k8z;vdysnlbnZ%BLQS_v$KzY3m5G8q}{}zo^U6@Z1$Pti%RT+Y5}sgQYXQp zp3YThRi(|~beWIC!p1Fk-0qVo&nu-vN%AJKujszNSBC79}Z z?Oo@|=$h$#IwUv=^!Lwh1Y}8%a_;fxvNm-uOj_s=2|TrINwv0wy3zGT?D%`J{yO3QxosNR+5B-Har*OQ6)Pj#%YYE{m_c;I=P&}4TVlbE zO6~`YF=#=@>=>86p3`=hg#*iM%DCvbzB3v3+v{Xi{iA)P$rCI zOM<6NEfTPX)oGQJ~Y5@MNrjFIc4O$8-R+|h-KkU9 z$sVHZz`j=5;3TLdgdTjtQBFo>KG97x61tfe<28AQ)QlHLCePav7;bjB_jX6)`kV?{ zmuO#+kT}wVa-grB-=%vIwmqL92q*p&D26!1BW*H9{Dk=}gHZTAn6eV{T>L7ig2}K< z$Cs(MVLkTL{J6D$y^3Q8oi6aP>jwq3XD%igL6SaaJ~nJk(7a3ys9B@}aO?QAm3b7> zs|w&cQzhlPEApmgsM+L+gq**>(sVk&xb7A3%^6d8KuO(6$l7Jz{1O{ zj~EaQ(f~7RvBwk6l%gKMt37Eda@8pQV$^jo>K3z~JF#IXnivXK8~LzrVAwCks2&L= z$}4D8$$iK}Yp0-@`nR{wy(N5xF!kI_3|I9#;4Yi_jmq!rgnru+DU-tDZXxze|G=aw)c22C8+ zoqqN$HDD|L=v5 zF&F&}=yTx*e?~LXza!b!#m3OY(Zbg3ua$4xOYph!d4u{l29EQ}Dma#fIR!ic0vsYn z#&Q5x$Iqp9vdhYpHFOBwnK#ot&Z4uoYP;>L0~?l53x{AVEopSEuHRiJ^hD6|dPF$| zmBP~@cii1qqER3088c351H0s5CC&}+5)%a6z?3P5u%!*9V5o|y^++k+kGv}(+rl0U zGb7obwUg)#2jpqL4p@rr>9Z>3ux)5jS!$J!d(q&w^}AVe#$I&mdvQpz(T#t>;5zLU z{Pr;uw?rGWT}29JFSUO3vx&80Ac47Q*qp?cC!US4U~!hDvQMX(u#4O9e2J+?Zqfuv z9!(AA{rzLUReZzA9DeSRh!Wc4>9@5nWwSk1`#D>|pX%KoV!)rN(#gcx`E$Phl`2(a zoMssi+Ha|uI>=pT>Yb%$;pz*5Ed099gVL>k7|GmiYYf9}FV;0yvD=1L{8;o68BMhNU_%4_{qMD5TgLK#2r8-w}z+=!b~o9I>TVST+CN z=qpp-E})xF*`-M(EP*e_m@9;F-zkEq5k#QcK^9hgArb`xPfyKQULueQ2UsMDVqQVH zUe7>vj|#)TE&N)A{3A|Ibv$0J@1iY?uG9ucazXsD>t-zVYptA?=%Z(PhM0qxT1X4f zI{O|tE6>$vf9YX(7$G%|zG_{7b|>3PZmhuIIQnj7WLa$5j+{M3pdk}?iPzjX4|$La z<{ZilCd^tZA+m^pt+t8JhInCWp2S_rP!P&RHDgA^YB6jW`uNuyBT=zn+s8WOpom+M zWF|bPvU+SkI}BB;mVIH5YgQ#rD7Iy1VkEaP95?(xI4?LBw5yEaG@h8*QgRwjqQyO9 zf)biZdxKMKir0oUhP9|z%r{ zpE6lNN@=3cnDgfE4gDKs(*#U1h6@_7*s6;iLeH)pVFgR7wi~Hu=7X3QFESlEFl%{- zXj!N16-QL$_th9RB3)U>vOum(hNFJ8VrMM+#l)^?)pco3JlL`nfcvI-XW^adizEJ@2R}bWsw%! zn_(^=u~=CX*-YjFoyCogKHw3()0Syz%-~jlarm^2R^E?aE|yb(?(P_Gf6*JEbnmH} zvBT=d!Bo-y`lkK6+657|5MBEj*ubA@0p;HT?q*`B^p6;ioap|P_h1IDJ+q09Hn>&| z5@HG%MD_I7f!(8KFbs#qPu9+lt<33L?M;ICY` zY#*meJkoxR1Oorc>oHinE2MsU3pKr0NDqr~W$H3a;yz@dNol*_AfC4|mDo6;G#k9d z0rs(PA|Y|AvUxoKQL|(HlAMByr|BU|O{0VcSE4C2^Yt+<8pOzE&ziBHpQpAB8ePP} z=<>ZGn*G1ip4`t971Yl~tp9mM#cF>)d^K7eU>SRgV!RCuz#< zL*`;lojVQu<)!Nr8VZiOh)ExT2DuDP@aXpQo`$^z2>#=TfhlrrX_@1}Ym9B+j=hm& zt^+N*>NS+!`3k!Sozk`W%nziN8_YtZ&9DHqCT446$bwN-UlJ`FYgNs7C;%E2R2#nj zLb8yPwy#CaJ!#p6NL${>4Ug*-8(<0A*a(0FXYR2GBUgB{F;V7${K0aF*T2Y^*6pG5 zxI|}UC!6E?-wCvmn{_Bn5^dq2xot`HQ1i5an+FnUE6fG6C)1Nw6Sp2fzA`wCC zN}-P$A#nQ)<3z2>h>5SA^|8c=J5Lbi(!C$H@M=uqZOV*n)mVr8(&LSi2UcE-&j`_8z4X{RUdB_mg((MrqL4~%{v%16xSdC5Vrp?m{i(>tW zZ~~^%;~`xju}Fy`wV(XD)e4N6wwY=!i?Cco!|vfK_QWQPvmu?oYb*lr;_+j}dX9X7 zkpg9J5hZ@Z7;1B#9@CJXk73C;TrzG;v3fFv+GrAcUg_m$TyU)mfM#4~8hqW=7cX{tUt zh}nF|hHB>~9dbs%lrA9*y>9?F9jLh94a)rbza9IPxn zsaKaK?iB4zIqBk!fTx~+OjhJg8IWJCS2X7*AXRe1G{%1=A%Y@(d;%m?Y2!{v+G!Qi z=_bvla1P1CE1LJmoUSP|)hQ$-F%Py<)C-%Mu$kMfQ0!*oq!BVm)mNoVs8(dD+A8fa zXqe|P=DOoj6)4PoW!_E#qDLiJCy&VY7b~bBSx2dh8(w5!DLsK&GN`MDK@G!G7OXOw za5-Y*KLY27C_gV!$oa+}2QFWOaqg&M15RI+Y77I}t>ArNr<5n#ykn=pUqY9(H=#`P z^0ibbgypMBt0~IMy_Wgn6mGWf>k+TjoYvKm;c5M$=9Z(c)p- z%%s3)u{0{G4fLv3>q{=OaG6DR`S(RH3&V+(Qu^jdJ|~Dk6wD$x&&z8Y*mQ4+(D)6&YrG)cP>~qTfq28>!_cYLO=XClTz%c zZnyC`Mud3)2g)yyZ3RQ8+M0^q@oNzRqKESXN0bCKsBRWiEOHRljAM-Pj=CkvP)4_Be z3;VU#%|p$YUDs|^zNA*JPO9cU#P7j+$z6$B_8Gu-p=sTD!53iAUQu8eoyCz#TlLIe z%nQB@05x5fV%RCun(`ptsJbQpHF@Z3t7iofV&*_+4evbBMp?Lf{&f=3g)+z*C*j7y zNdRjDu^gA?b5(fsWx$OMhmuTc+%k2kr#;s>{d*dKKw zr5 z#&6L5`_KPTfcy^sy=eIx-pTkE{I?S3cZT0fg1;H^nf_wW Z8_G+8eu@Zx$Owo4hMz5x^IU)Y`hR>Qb~gY3 literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-payment-information-without-amount-but-debtor.print.docx b/tests/TestData/PhpWordOutput/qr-payment-information-without-amount-but-debtor.print.docx new file mode 100644 index 0000000000000000000000000000000000000000..e78b29c5d6555ba0009edc047e25b1bed92c8c7a GIT binary patch literal 16108 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 literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-payment-information-without-amount.docx b/tests/TestData/PhpWordOutput/qr-payment-information-without-amount.docx new file mode 100644 index 0000000000000000000000000000000000000000..e24b2299d1efb3f4bfdb4c72889c96e5e83adb1c GIT binary patch literal 18374 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Б{8`@V|Uvtn{l(?DYdseVbxm!z1TrJ_hS!o5Th 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 A_5c6? literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.docx b/tests/TestData/PhpWordOutput/qr-payment-information-zero-amount.docx new file mode 100644 index 0000000000000000000000000000000000000000..17d1b0211ab410415dd24353dfb97687a9ba12bf GIT binary patch literal 16057 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 literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-payment-reference-non.docx b/tests/TestData/PhpWordOutput/qr-payment-reference-non.docx new file mode 100644 index 0000000000000000000000000000000000000000..276c75b6219e34210e4371c753ab8c2b8b13f4fc GIT binary patch literal 14949 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 I{f}?|4**^4r2qf` literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-payment-reference-non.print.docx b/tests/TestData/PhpWordOutput/qr-payment-reference-non.print.docx new file mode 100644 index 0000000000000000000000000000000000000000..8704972164710f3f0b6634a0e549f517b07d8214 GIT binary patch literal 14846 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 literal 0 HcmV?d00001 diff --git a/tests/TestData/PhpWordOutput/qr-payment-reference-scor.docx b/tests/TestData/PhpWordOutput/qr-payment-reference-scor.docx new file mode 100644 index 0000000000000000000000000000000000000000..5dcd9b3ef65dd7fcbe64d10e1e20b772ac21cee9 GIT binary patch literal 15510 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%0DHGs2TE17UEH2q~jmgPc3`36NUW@?$r@ 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 literal 0 HcmV?d00001 From b9952ede888980749fa1968a86a2eed231c512d2 Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 15:52:22 +0200 Subject: [PATCH 15/27] Add PhpWordHelper to convert from mmToTwip/Point. Replace measurements. --- .../Output/PhpWordOutput/PhpWordHelper.php | 19 ++++++++++++++ .../Output/PhpWordOutput/PhpWordOutput.php | 26 +++++++++---------- .../Output/PhpWordOutput/Table/Bill.php | 21 ++++++++------- .../Output/PhpWordOutput/Table/Payment.php | 21 ++++++++------- .../Output/PhpWordOutput/Table/Receipt.php | 9 ++++--- .../Table/Receipt/AmountSection.php | 7 ++--- 6 files changed, 64 insertions(+), 39 deletions(-) create mode 100644 src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php new file mode 100644 index 00000000..67ad2a92 --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php @@ -0,0 +1,19 @@ +addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ - 'width' => Converter::cmToPoint($element->getWidth() / 10), - 'height' => Converter::cmToPoint($element->getHeight() / 10), + 'width' => PhpWordHelper::mmToPoint($element->getWidth()), + 'height' => PhpWordHelper::mmToPoint($element->getHeight()), 'positioning' => Image::POSITION_ABSOLUTE, 'posHorizontal' => Image::POSITION_ABSOLUTE, 'posVertical' => Image::POSITION_ABSOLUTE, - 'marginLeft' => Converter::cmToPoint(-0.45), - 'marginTop' => Converter::cmToPoint(0.08), + 'marginLeft' => PhpWordHelper::mmToPoint(-4.5), + 'marginTop' => PhpWordHelper::mmToPoint(0.8), ]); break; case Placeholder::PLACEHOLDER_TYPE_AMOUNT_RECEIPT['type']: $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ - 'width' => Converter::cmToPoint($element->getWidth() / 10), - 'height' => Converter::cmToPoint($element->getHeight() / 10), + 'width' => PhpWordHelper::mmToPoint($element->getWidth()), + 'height' => PhpWordHelper::mmToPoint($element->getHeight()), 'positioning' => Image::POSITION_ABSOLUTE, 'posHorizontal' => Image::POSITION_ABSOLUTE, 'posVertical' => Image::POSITION_ABSOLUTE, - 'marginLeft' => Converter::cmToPoint(0.91), - 'marginTop' => Converter::cmToPoint(-0.25), + 'marginLeft' => PhpWordHelper::mmToPoint(9.1), + 'marginTop' => PhpWordHelper::mmToPoint(-2.5), ]); break; case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY['type']: case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY_RECEIPT['type']: default: $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ - 'width' => Converter::cmToPoint($element->getWidth() / 10), - 'height' => Converter::cmToPoint($element->getHeight() / 10), + 'width' => PhpWordHelper::mmToPoint($element->getWidth()), + 'height' => PhpWordHelper::mmToPoint($element->getHeight()), 'wrappingStyle' => Image::WRAP_INFRONT, 'positioning' => Image::POS_RELATIVE, 'posHorizontalRel' => Image::POS_RELTO_MARGIN, @@ -187,8 +187,8 @@ private function addSwissQrCodeImage() : void { $qrCode = $this->getQrCode()->writeDataUri(); $img = base64_decode(preg_replace('#^data:image/[^;]+;base64,#', '', $qrCode)); $this->billTable->getPayment()->getQrCodeSection()->addImage($img, [ - 'width' => Converter::cmToPoint(self::QR_CODE_SIZE), - 'height' => Converter::cmToPoint(self::QR_CODE_SIZE), + 'width' => PhpWordHelper::mmToPoint(self::QR_CODE_SIZE), + 'height' => PhpWordHelper::mmToPoint(self::QR_CODE_SIZE), ]); } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php index 8b3d396e..a8d39a3b 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php @@ -9,6 +9,7 @@ use PhpOffice\PhpWord\SimpleType\JcTable; use PhpOffice\PhpWord\Style\Table; use PhpOffice\PhpWord\Style\TablePosition; +use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; class Bill { private \PhpOffice\PhpWord\Element\Table $table; @@ -19,14 +20,13 @@ class Bill { public function __construct(Section $section, bool $isPrintable) { $this->table = $section->addTable([ 'layout' => Table::LAYOUT_FIXED, - 'width' => Converter::cmToTwip(21), - 'height' => Converter::cmToTwip(10.5), + 'width' => PhpWordHelper::mmToTwip(210), + 'height' => PhpWordHelper::mmToTwip(105), 'position' => [ 'horzAnchor' => TablePosition::HANCHOR_PAGE, 'vertAnchor' => TablePosition::VANCHOR_PAGE, 'tblpXSpec' => TablePosition::XALIGN_CENTER, 'tblpYSpec' => TablePosition::YALIGN_BOTTOM, - 'tblpX' => Converter::cmToTwip(3.5), 'leftFromText' => 0, 'rightFromText' => 0, 'topFromText' => 0, @@ -35,13 +35,16 @@ public function __construct(Section $section, bool $isPrintable) { ]); $verticalLine = []; if (!$isPrintable) { - $this->separate = $this->table->addRow(Converter::cmToTwip(0.5))->addCell(Converter::cmToTwip(21), [ + $height = PhpWordHelper::mmToTwip(5); + $width = PhpWordHelper::mmToTwip(210); + $separatorCellStyle = [ 'borderBottomColor' => '000000', 'borderBottomSize' => 1, 'borderBottomStyle' => Border::SINGLE, 'gridSpan' => 2, 'valign' => JcTable::CENTER, - ]); + ]; + $this->separate = $this->table->addRow($height)->addCell($width, $separatorCellStyle); $verticalLine = [ 'borderRightColor' => '000000', 'borderRightSize' => 1, @@ -49,20 +52,20 @@ public function __construct(Section $section, bool $isPrintable) { ]; } $row = $this->table->addRow(Converter::cmToTwip(9.5)); - $cell = $row->addCell(Converter::cmToTwip(6.2), $verticalLine); + $cell = $row->addCell(PhpWordHelper::mmToTwip(62), $verticalLine); $cell = $cell->addTable([ 'layout' => Table::LAYOUT_FIXED, 'width' => 100 * 50, 'unit' => 'pct', - 'cellMargin' => Converter::cmToTwip(0.5), + 'cellMargin' => PhpWordHelper::mmToTwip(5), ])->addRow()->addCell(); $this->receipt = new Receipt($cell); - $cell = $row->addCell(Converter::cmToTwip(14.8)); + $cell = $row->addCell(PhpWordHelper::mmToTwip(148)); $cell = $cell->addTable([ 'layout' => Table::LAYOUT_FIXED, 'width' => 100 * 50, 'unit' => 'pct', - 'cellMargin' => Converter::cmToTwip(0.5), + 'cellMargin' => PhpWordHelper::mmToTwip(5), ])->addRow()->addCell(); $this->payment = new Payment($cell); } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php index 8667caac..d6868ecf 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php @@ -3,6 +3,7 @@ namespace Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table; use PhpOffice\PhpWord\Element\Cell; +use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Receipt\AmountSection; use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\Shared\Converter; @@ -24,25 +25,25 @@ public function __construct(Cell $cell) { ]); $this->table->getStyle()->setLayout(\PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED); - $row = $this->table->addRow(Converter::cmToTwip(8.5)); - $paymentPartLeftCell = $row->addCell(Converter::cmToTwip(5.6)); - $this->informationSection = $row->addCell(Converter::cmToTwip(9.2)); + $row = $this->table->addRow(PhpWordHelper::mmToTwip(85)); + $paymentPartLeftCell = $row->addCell(PhpWordHelper::mmToTwip(56)); + $this->informationSection = $row->addCell(PhpWordHelper::mmToTwip(92)); $table = $paymentPartLeftCell->addTable([ 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, 'width' => 100 * 50, 'unit' => 'pct', ]); - $row = $table->addRow(Converter::cmToTwip(0.7)); + $row = $table->addRow(PhpWordHelper::mmToTwip(07)); $this->titleSection = $row->addCell(); - $table->addRow(Converter::cmToTwip(0.5))->addCell()->addText('', ['size' => 8], ['spaceAfter' => 0]); - $row = $table->addRow(Converter::cmToTwip(5.1)); + $table->addRow(PhpWordHelper::mmToTwip(05))->addCell()->addText('', ['size' => 8], ['spaceAfter' => 0]); + $row = $table->addRow(PhpWordHelper::mmToTwip(51)); $this->qrCodeSection = $row->addCell(); - $row = $table->addRow(Converter::cmToTwip(2.2)); - $this->amountSection = new AmountSection($row->addCell(), 1.44, 5.1 - 1.44, 2.2); + $row = $table->addRow(PhpWordHelper::mmToTwip(22)); + $this->amountSection = new AmountSection($row->addCell(), 14.4, 51 - 14.4, 22); - $row = $this->table->addRow(Converter::cmToTwip(1.0)); - $this->furtherInformationSection = $row->addCell(Converter::cmToTwip(5.6), [ + $row = $this->table->addRow(PhpWordHelper::mmToTwip(10)); + $this->furtherInformationSection = $row->addCell(PhpWordHelper::mmToTwip(56), [ 'gridSpan' => 2, ]); } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php index 7b697642..e30ac150 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php @@ -3,6 +3,7 @@ namespace Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table; use PhpOffice\PhpWord\Shared\Converter; +use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Receipt\AmountSection; use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\Element\Cell; @@ -21,10 +22,10 @@ public function __construct(Cell $cell) { 'width' => 100 * 50, 'unit' => 'pct', ]); - $this->titleSection = $this->table->addRow(Converter::cmToTwip(0.7))->addCell(); - $this->informationSection = $this->table->addRow(Converter::cmToTwip(5.6))->addCell(); - $this->amountSection = new AmountSection($this->table->addRow(Converter::cmToTwip(1.4))->addCell(), 1.22, 5.2 - 1.22, 1.4); - $this->acceptancePointSection = $this->table->addRow(Converter::cmToTwip(1.8))->addCell(); + $this->titleSection = $this->table->addRow(PhpWordHelper::mmToTwip(07))->addCell(); + $this->informationSection = $this->table->addRow(PhpWordHelper::mmToTwip(56))->addCell(); + $this->amountSection = new AmountSection($this->table->addRow(PhpWordHelper::mmToTwip(14))->addCell(), 12.2, 52 - 12.2, 14); + $this->acceptancePointSection = $this->table->addRow(PhpWordHelper::mmToTwip(18))->addCell(); } public function getTitleSection() : Cell { diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php index cf61d7b2..b310e8a3 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php @@ -5,6 +5,7 @@ use PhpOffice\PhpWord\Element\Cell; use PhpOffice\PhpWord\Shared\Converter; use PhpOffice\PhpWord\Style\Table; +use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; class AmountSection { @@ -17,9 +18,9 @@ public function __construct(Cell $cell, float $currencyWidth, float $amountWidth 'width' => 100 * 50, 'unit' => 'pct', ]); - $row = $table->addRow(Converter::cmToTwip($height)); - $this->currencyCell = $row->addCell(Converter::cmToTwip($currencyWidth)); - $this->amountCell = $row->addCell(Converter::cmToTwip($amountWidth)); + $row = $table->addRow(PhpWordHelper::mmToTwip($height)); + $this->currencyCell = $row->addCell(PhpWordHelper::mmToTwip($currencyWidth)); + $this->amountCell = $row->addCell(PhpWordHelper::mmToTwip($amountWidth)); } public function getCurrencyCell() : Cell { From 658c6728a59c761b7fd26dddbcc97783b7a54d24 Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 15:57:55 +0200 Subject: [PATCH 16/27] Add PhpWordHelper to convert from percent to pct. --- .../Output/PhpWordOutput/PhpWordHelper.php | 15 +++++++++++++-- .../Output/PhpWordOutput/Table/Bill.php | 4 ++-- .../Output/PhpWordOutput/Table/Payment.php | 4 ++-- .../Output/PhpWordOutput/Table/Receipt.php | 2 +- .../PhpWordOutput/Table/Receipt/AmountSection.php | 2 +- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php index 67ad2a92..752d8c52 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php @@ -6,14 +6,25 @@ abstract class PhpWordHelper { - public static function mmToTwip(float $mm) : float|int + public static function mmToTwip(int|float $mm) : float|int { return Converter::cmToTwip($mm / 10); } - public static function mmToPoint(float $mm) : float|int + public static function mmToPoint(int|float $mm) : float|int { return Converter::cmToPoint($mm / 10); } + /** + * Convert percentage to fiftieths (1/50) of a percent (1% = 50 unit). + * + * @param int|float $percent + * @return int|float + */ + public static function percentToPct(int|float $percent) : int|float + { + return $percent * 50; + } + } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php index a8d39a3b..d45a7f52 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php @@ -55,7 +55,7 @@ public function __construct(Section $section, bool $isPrintable) { $cell = $row->addCell(PhpWordHelper::mmToTwip(62), $verticalLine); $cell = $cell->addTable([ 'layout' => Table::LAYOUT_FIXED, - 'width' => 100 * 50, + 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', 'cellMargin' => PhpWordHelper::mmToTwip(5), ])->addRow()->addCell(); @@ -63,7 +63,7 @@ public function __construct(Section $section, bool $isPrintable) { $cell = $row->addCell(PhpWordHelper::mmToTwip(148)); $cell = $cell->addTable([ 'layout' => Table::LAYOUT_FIXED, - 'width' => 100 * 50, + 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', 'cellMargin' => PhpWordHelper::mmToTwip(5), ])->addRow()->addCell(); diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php index d6868ecf..3b617828 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php @@ -20,7 +20,7 @@ class Payment { public function __construct(Cell $cell) { $this->table = $cell->addTable([ 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, - 'width' => 100 * 50, + 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', ]); $this->table->getStyle()->setLayout(\PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED); @@ -31,7 +31,7 @@ public function __construct(Cell $cell) { $table = $paymentPartLeftCell->addTable([ 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, - 'width' => 100 * 50, + 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', ]); $row = $table->addRow(PhpWordHelper::mmToTwip(07)); diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php index e30ac150..1d047344 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php @@ -19,7 +19,7 @@ class Receipt { public function __construct(Cell $cell) { $this->table = $cell->addTable([ 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, - 'width' => 100 * 50, + 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', ]); $this->titleSection = $this->table->addRow(PhpWordHelper::mmToTwip(07))->addCell(); diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php index b310e8a3..27eb7ba7 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php @@ -15,7 +15,7 @@ class AmountSection { public function __construct(Cell $cell, float $currencyWidth, float $amountWidth, float $height) { $table = $cell->addTable([ 'layout' => Table::LAYOUT_FIXED, - 'width' => 100 * 50, + 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', ]); $row = $table->addRow(PhpWordHelper::mmToTwip($height)); From 4a404a01716f804bb2021d8078f347b2648f88ea Mon Sep 17 00:00:00 2001 From: Severin J Date: Thu, 19 May 2022 17:09:17 +0200 Subject: [PATCH 17/27] Refactor widths and heights to a separate styel class. --- .../Output/PhpWordOutput/PhpWordOutput.php | 8 ++-- .../Output/PhpWordOutput/Table/Bill.php | 28 ++++++------- .../Output/PhpWordOutput/Table/Payment.php | 32 ++++++++------ .../Output/PhpWordOutput/Table/Receipt.php | 13 +++--- .../Table/Receipt/AmountSection.php | 1 - .../Output/PhpWordOutput/Table/Style.php | 42 +++++++++++++++++++ 6 files changed, 86 insertions(+), 38 deletions(-) create mode 100644 src/PaymentPart/Output/PhpWordOutput/Table/Style.php diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index 7f52e327..2bdd2317 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -5,7 +5,6 @@ use PhpOffice\PhpWord\Element\Cell; use PhpOffice\PhpWord\Element\TextRun; use PhpOffice\PhpWord\PhpWord; -use PhpOffice\PhpWord\Shared\Converter; use PhpOffice\PhpWord\Style\Image; use Sprain\SwissQrBill\Exception\InvalidPhpWordImageFormat; use Sprain\SwissQrBill\PaymentPart\Output\AbstractOutput; @@ -15,14 +14,13 @@ use Sprain\SwissQrBill\PaymentPart\Output\Element\Title; use Sprain\SwissQrBill\PaymentPart\Output\OutputInterface; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Bill; +use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Style; use Sprain\SwissQrBill\PaymentPart\Translation\Translation; use Sprain\SwissQrBill\QrBill; use Sprain\SwissQrBill\QrCode\QrCode; final class PhpWordOutput extends AbstractOutput implements OutputInterface { - const QR_CODE_SIZE = 46; - private PhpWord $phpWord; private Bill $billTable; @@ -187,8 +185,8 @@ private function addSwissQrCodeImage() : void { $qrCode = $this->getQrCode()->writeDataUri(); $img = base64_decode(preg_replace('#^data:image/[^;]+;base64,#', '', $qrCode)); $this->billTable->getPayment()->getQrCodeSection()->addImage($img, [ - 'width' => PhpWordHelper::mmToPoint(self::QR_CODE_SIZE), - 'height' => PhpWordHelper::mmToPoint(self::QR_CODE_SIZE), + 'width' => PhpWordHelper::mmToPoint(Style::QR_CODE_SIZE), + 'height' => PhpWordHelper::mmToPoint(Style::QR_CODE_SIZE), ]); } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php index d45a7f52..93e63c8a 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php @@ -4,14 +4,13 @@ use PhpOffice\PhpWord\Element\Cell; use PhpOffice\PhpWord\Element\Section; -use PhpOffice\PhpWord\Shared\Converter; -use PhpOffice\PhpWord\SimpleType\Border; use PhpOffice\PhpWord\SimpleType\JcTable; use PhpOffice\PhpWord\Style\Table; use PhpOffice\PhpWord\Style\TablePosition; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; class Bill { + private \PhpOffice\PhpWord\Element\Table $table; private ?Cell $separate = null; private Receipt $receipt; @@ -20,8 +19,8 @@ class Bill { public function __construct(Section $section, bool $isPrintable) { $this->table = $section->addTable([ 'layout' => Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::mmToTwip(210), - 'height' => PhpWordHelper::mmToTwip(105), + 'width' => PhpWordHelper::mmToTwip(Style::DIN_A4_WIDTH), + 'height' => PhpWordHelper::mmToTwip(Style::DIN_A6_WIDTH), 'position' => [ 'horzAnchor' => TablePosition::HANCHOR_PAGE, 'vertAnchor' => TablePosition::VANCHOR_PAGE, @@ -35,24 +34,24 @@ public function __construct(Section $section, bool $isPrintable) { ]); $verticalLine = []; if (!$isPrintable) { + $width = PhpWordHelper::mmToTwip(Style::DIN_A4_WIDTH); $height = PhpWordHelper::mmToTwip(5); - $width = PhpWordHelper::mmToTwip(210); $separatorCellStyle = [ - 'borderBottomColor' => '000000', - 'borderBottomSize' => 1, - 'borderBottomStyle' => Border::SINGLE, + 'borderBottomColor' => Style::NON_PRINTABLE_BORDER_COLOR, + 'borderBottomSize' => Style::NON_PRINTABLE_BORDER_SIZE, + 'borderBottomStyle' => Style::NON_PRINTABLE_BORDER_TYPE, 'gridSpan' => 2, 'valign' => JcTable::CENTER, ]; $this->separate = $this->table->addRow($height)->addCell($width, $separatorCellStyle); $verticalLine = [ - 'borderRightColor' => '000000', - 'borderRightSize' => 1, - 'borderRightStyle' => Border::SINGLE, + 'borderRightColor' => Style::NON_PRINTABLE_BORDER_COLOR, + 'borderRightSize' => Style::NON_PRINTABLE_BORDER_SIZE, + 'borderRightStyle' => Style::NON_PRINTABLE_BORDER_TYPE, ]; } - $row = $this->table->addRow(Converter::cmToTwip(9.5)); - $cell = $row->addCell(PhpWordHelper::mmToTwip(62), $verticalLine); + $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::INNER_HEIGHT)); + $cell = $row->addCell(PhpWordHelper::mmToTwip(Style::RECEIPT_WIDTH), $verticalLine); $cell = $cell->addTable([ 'layout' => Table::LAYOUT_FIXED, 'width' => PhpWordHelper::percentToPct(100), @@ -60,7 +59,8 @@ public function __construct(Section $section, bool $isPrintable) { 'cellMargin' => PhpWordHelper::mmToTwip(5), ])->addRow()->addCell(); $this->receipt = new Receipt($cell); - $cell = $row->addCell(PhpWordHelper::mmToTwip(148)); + + $cell = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_WIDTH)); $cell = $cell->addTable([ 'layout' => Table::LAYOUT_FIXED, 'width' => PhpWordHelper::percentToPct(100), diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php index 3b617828..59813389 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php @@ -6,7 +6,6 @@ use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Receipt\AmountSection; use PhpOffice\PhpWord\Element\Table; -use PhpOffice\PhpWord\Shared\Converter; class Payment { @@ -25,27 +24,29 @@ public function __construct(Cell $cell) { ]); $this->table->getStyle()->setLayout(\PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED); - $row = $this->table->addRow(PhpWordHelper::mmToTwip(85)); - $paymentPartLeftCell = $row->addCell(PhpWordHelper::mmToTwip(56)); - $this->informationSection = $row->addCell(PhpWordHelper::mmToTwip(92)); + $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INFORMATION_SECTION_HEIGHT)); + $paymentPartLeftCell = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INNER_WIDTH - Style::PAYMENT_PART_INFORMATION_SECTION_WIDTH)); + $this->informationSection = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INFORMATION_SECTION_WIDTH)); $table = $paymentPartLeftCell->addTable([ 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', ]); - $row = $table->addRow(PhpWordHelper::mmToTwip(07)); + $row = $table->addRow(PhpWordHelper::mmToTwip(Style::TITLE_SECTION_HEIGHT)); $this->titleSection = $row->addCell(); - $table->addRow(PhpWordHelper::mmToTwip(05))->addCell()->addText('', ['size' => 8], ['spaceAfter' => 0]); - $row = $table->addRow(PhpWordHelper::mmToTwip(51)); + $this->addSpacerBeforeQrCode($table); + $row = $table->addRow(PhpWordHelper::mmToTwip(Style::QR_CODE_SIZE_WITH_BOTTOM_SPACE)); $this->qrCodeSection = $row->addCell(); - $row = $table->addRow(PhpWordHelper::mmToTwip(22)); - $this->amountSection = new AmountSection($row->addCell(), 14.4, 51 - 14.4, 22); + $row = $table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_AMOUNT_SECTION_HEIGHT)); + $this->amountSection = new AmountSection( + $row->addCell(), + Style::PAYMENT_PART_CURRENCY_WIDTH, + Style::PAYMENT_PART_AMOUNT_WIDTH, + Style::PAYMENT_PART_AMOUNT_SECTION_HEIGHT); - $row = $this->table->addRow(PhpWordHelper::mmToTwip(10)); - $this->furtherInformationSection = $row->addCell(PhpWordHelper::mmToTwip(56), [ - 'gridSpan' => 2, - ]); + $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_FURTHER_INFORMATION_SECTION_HEIGHT)); + $this->furtherInformationSection = $row->addCell(null, ['gridSpan' => 2]); } public function getTitleSection() : Cell { @@ -68,5 +69,10 @@ public function getFurtherInformationSection() : Cell { return $this->furtherInformationSection; } + private function addSpacerBeforeQrCode(Table $table) : void { + $fontSizeMustBeSmallThanRowHeight = 7; + $table->addRow(PhpWordHelper::mmToTwip(5))->addCell()->addText('', ['size' => $fontSizeMustBeSmallThanRowHeight], ['spaceAfter' => 0]); + } + } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php index 1d047344..17c4f613 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php @@ -2,7 +2,6 @@ namespace Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table; -use PhpOffice\PhpWord\Shared\Converter; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Receipt\AmountSection; use PhpOffice\PhpWord\Element\Table; @@ -22,10 +21,14 @@ public function __construct(Cell $cell) { 'width' => PhpWordHelper::percentToPct(100), 'unit' => 'pct', ]); - $this->titleSection = $this->table->addRow(PhpWordHelper::mmToTwip(07))->addCell(); - $this->informationSection = $this->table->addRow(PhpWordHelper::mmToTwip(56))->addCell(); - $this->amountSection = new AmountSection($this->table->addRow(PhpWordHelper::mmToTwip(14))->addCell(), 12.2, 52 - 12.2, 14); - $this->acceptancePointSection = $this->table->addRow(PhpWordHelper::mmToTwip(18))->addCell(); + $this->titleSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::TITLE_SECTION_HEIGHT))->addCell(); + $this->informationSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_INFORMATION_SECTION_HEIGHT))->addCell(); + $this->amountSection = new AmountSection( + $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_AMOUNT_SECTION_HEIGHT))->addCell(), + Style::RECEIPT_CURRENCY_WIDTH, + Style::RECEIPT_AMOUNT_WIDTH, + Style::RECEIPT_AMOUNT_SECTION_HEIGHT); + $this->acceptancePointSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_ACCEPTANCE_SECTION_HEIGHT))->addCell(); } public function getTitleSection() : Cell { diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php index 27eb7ba7..3acbb145 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php @@ -3,7 +3,6 @@ namespace Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Receipt; use PhpOffice\PhpWord\Element\Cell; -use PhpOffice\PhpWord\Shared\Converter; use PhpOffice\PhpWord\Style\Table; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Style.php b/src/PaymentPart/Output/PhpWordOutput/Table/Style.php new file mode 100644 index 00000000..c2b76df2 --- /dev/null +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Style.php @@ -0,0 +1,42 @@ + Date: Fri, 20 May 2022 08:59:03 +0200 Subject: [PATCH 18/27] Code style. --- .../Output/PhpWordOutput/FontStyle.php | 278 +++++------ .../Output/PhpWordOutput/PhpWordHelper.php | 41 +- .../Output/PhpWordOutput/PhpWordOutput.php | 458 +++++++++--------- .../Output/PhpWordOutput/Table/Bill.php | 139 +++--- .../Output/PhpWordOutput/Table/Payment.php | 142 +++--- .../Output/PhpWordOutput/Table/Receipt.php | 86 ++-- .../Table/Receipt/AmountSection.php | 50 +- .../Output/PhpWordOutput/Table/Style.php | 68 ++- .../PhpWordOutput/PhpWordOutputTest.php | 172 ++++--- 9 files changed, 732 insertions(+), 702 deletions(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/FontStyle.php b/src/PaymentPart/Output/PhpWordOutput/FontStyle.php index 41f85b77..77c0c958 100644 --- a/src/PaymentPart/Output/PhpWordOutput/FontStyle.php +++ b/src/PaymentPart/Output/PhpWordOutput/FontStyle.php @@ -7,147 +7,149 @@ use PhpOffice\PhpWord\SimpleType\Jc; use PhpOffice\PhpWord\SimpleType\LineSpacingRule; -abstract class FontStyle { +abstract class FontStyle +{ + const FONT_FAMILY = 'Helvetica'; + const FONT_STYLE_TITLE = 'SwissBill Title'; + const FONT_STYLE_HEADING_RECEIPT = 'SwissBill Receipt Heading'; + const FONT_STYLE_VALUE_RECEIPT = 'SwissBill Receipt Value'; + const FONT_STYLE_AMOUNT_RECEIPT = 'SwissBill Receipt Amount'; + const FONT_STYLE_ACCEPTANCE_POINT = 'SwissBill Acceptance point'; + const FONT_STYLE_HEADING_PAYMENT_PART = 'SwissBill Payment part Heading'; + const FONT_STYLE_VALUE_PAYMENT_PART = 'SwissBill Payment part Value'; + const FONT_STYLE_AMOUNT_PAYMENT_PART = 'SwissBill Payment part Amount'; + const FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART = 'SwissBill Payment part Further information'; + const FONT_STYLE_SEPARATOR = 'SwissBill Separator'; - const FONT_FAMILY = 'Helvetica'; - const FONT_STYLE_TITLE = 'SwissBill Title'; - const FONT_STYLE_HEADING_RECEIPT = 'SwissBill Receipt Heading'; - const FONT_STYLE_VALUE_RECEIPT = 'SwissBill Receipt Value'; - const FONT_STYLE_AMOUNT_RECEIPT = 'SwissBill Receipt Amount'; - const FONT_STYLE_ACCEPTANCE_POINT = 'SwissBill Acceptance point'; - const FONT_STYLE_HEADING_PAYMENT_PART = 'SwissBill Payment part Heading'; - const FONT_STYLE_VALUE_PAYMENT_PART = 'SwissBill Payment part Value'; - const FONT_STYLE_AMOUNT_PAYMENT_PART = 'SwissBill Payment part Amount'; - const FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART = 'SwissBill Payment part Further information'; - const FONT_STYLE_SEPARATOR = 'SwissBill Separator'; + private static string $currentText = self::FONT_STYLE_VALUE_RECEIPT; - private static string $currentText = self::FONT_STYLE_VALUE_RECEIPT; + public static function getCurrentText() : string + { + return self::$currentText; + } - public static function getCurrentText() : string { - return self::$currentText; - } + public static function setCurrentText(string $fStyle) + { + self::$currentText = $fStyle; + } - public static function setCurrentText(string $fStyle) { - self::$currentText = $fStyle; - } - - public static function defineFontStyles(PhpWord $phpWord) : void { - $phpWord->addFontStyle( - self::FONT_STYLE_TITLE, - [ - 'name' => self::FONT_FAMILY, - 'size' => 11, - 'bold' => true, - ] - ); - $phpWord->addFontStyle( - self::FONT_STYLE_HEADING_RECEIPT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 6, - 'bold' => true, - ], - [ - 'spacing' => Converter::pointToTwip(9), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $phpWord->addFontStyle( - self::FONT_STYLE_VALUE_RECEIPT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 8, - ], - [ - 'spacing' => Converter::pointToTwip(9), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $phpWord->addFontStyle( - self::FONT_STYLE_AMOUNT_RECEIPT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 8, - ], - [ - 'spacing' => Converter::pointToTwip(11), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $phpWord->addFontStyle( - self::FONT_STYLE_ACCEPTANCE_POINT, - [ - 'name' => self::FONT_FAMILY, - 'size' => 6, - 'bold' => true, - ], - [ - 'spacing' => Converter::pointToTwip(8), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - 'alignment' => Jc::END, - ] - ); - $phpWord->addFontStyle( - self::FONT_STYLE_HEADING_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 8, - 'bold' => true, - ], - [ - 'spacing' => Converter::pointToTwip(11), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $phpWord->addFontStyle( - self::FONT_STYLE_VALUE_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 10, - ], - [ - 'spacing' => Converter::pointToTwip(11), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - $phpWord->addFontStyle( - self::FONT_STYLE_AMOUNT_PAYMENT_PART, - [ - 'name' => self::FONT_FAMILY, - 'size' => 10, - ], - [ - 'spacing' => Converter::pointToTwip(13), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ] - ); - - $fontStyle = [ - 'name' => self::FONT_FAMILY, - 'size' => 7, - ]; - $paragraphStyle = [ - 'spacing' => Converter::pointToTwip(8), - 'spacingLineRule' => LineSpacingRule::EXACT, - 'spaceAfter' => 0, - ]; - $phpWord->addFontStyle( - self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART, - $fontStyle, - $paragraphStyle - ); - $phpWord->addFontStyle( - self::FONT_STYLE_SEPARATOR, - $fontStyle, - array_merge($paragraphStyle, ['alignment' => Jc::CENTER]), - ); - } + public static function defineFontStyles(PhpWord $phpWord) : void + { + $phpWord->addFontStyle( + self::FONT_STYLE_TITLE, + [ + 'name' => self::FONT_FAMILY, + 'size' => 11, + 'bold' => true, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_HEADING_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 6, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(9), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_VALUE_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + ], + [ + 'spacing' => Converter::pointToTwip(9), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_AMOUNT_RECEIPT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_ACCEPTANCE_POINT, + [ + 'name' => self::FONT_FAMILY, + 'size' => 6, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(8), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + 'alignment' => Jc::END, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_HEADING_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 8, + 'bold' => true, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_VALUE_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 10, + ], + [ + 'spacing' => Converter::pointToTwip(11), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $phpWord->addFontStyle( + self::FONT_STYLE_AMOUNT_PAYMENT_PART, + [ + 'name' => self::FONT_FAMILY, + 'size' => 10, + ], + [ + 'spacing' => Converter::pointToTwip(13), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ] + ); + $fontStyle = [ + 'name' => self::FONT_FAMILY, + 'size' => 7, + ]; + $paragraphStyle = [ + 'spacing' => Converter::pointToTwip(8), + 'spacingLineRule' => LineSpacingRule::EXACT, + 'spaceAfter' => 0, + ]; + $phpWord->addFontStyle( + self::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART, + $fontStyle, + $paragraphStyle + ); + $phpWord->addFontStyle( + self::FONT_STYLE_SEPARATOR, + $fontStyle, + array_merge($paragraphStyle, ['alignment' => Jc::CENTER]), + ); + } } diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php index 752d8c52..afaaf998 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php @@ -4,27 +4,26 @@ use PhpOffice\PhpWord\Shared\Converter; -abstract class PhpWordHelper { +abstract class PhpWordHelper +{ + public static function mmToTwip(int|float $mm) : float|int + { + return Converter::cmToTwip($mm / 10); + } - public static function mmToTwip(int|float $mm) : float|int - { - return Converter::cmToTwip($mm / 10); - } - - public static function mmToPoint(int|float $mm) : float|int - { - return Converter::cmToPoint($mm / 10); - } - - /** - * Convert percentage to fiftieths (1/50) of a percent (1% = 50 unit). - * - * @param int|float $percent - * @return int|float - */ - public static function percentToPct(int|float $percent) : int|float - { - return $percent * 50; - } + public static function mmToPoint(int|float $mm) : float|int + { + return Converter::cmToPoint($mm / 10); + } + /** + * Convert percentage to fiftieths (1/50) of a percent (1% = 50 unit). + * + * @param int|float $percent + * @return int|float + */ + public static function percentToPct(int|float $percent) : int|float + { + return $percent * 50; + } } diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index 2bdd2317..41183b2a 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -19,224 +19,242 @@ use Sprain\SwissQrBill\QrBill; use Sprain\SwissQrBill\QrCode\QrCode; -final class PhpWordOutput extends AbstractOutput implements OutputInterface { - - private PhpWord $phpWord; - private Bill $billTable; - - public function __construct( - QrBill $qrBill, - string $language, - PhpWord $phpWord, - ) { - parent::__construct($qrBill, $language); - $this->phpWord = $phpWord; - FontStyle::defineFontStyles($this->phpWord); - } - - public function getPaymentPart() { - $sections = $this->phpWord->getSections(); - $lastAddedSection = end($sections); - $this->billTable = new Bill($lastAddedSection, $this->isPrintable()); - - $this->addSeparatorContentIfNotPrintable(); - - $this->addInformationContentReceipt(); - $this->addCurrencyContentReceipt(); - $this->addAmountContentReceipt(); - - $this->addSwissQrCodeImage(); - $this->addInformationContent(); - $this->addCurrencyContent(); - $this->addAmountContent(); - $this->addFurtherInformationContent(); - } - - public function setQrCodeImageFormat(string $fileExtension) : AbstractOutput { - if ($fileExtension === QrCode::FILE_FORMAT_SVG) { - throw new InvalidPhpWordImageFormat('SVG images are not allowed by PHPWord.'); - } - - $this->qrCodeImageFormat = $fileExtension; - - return $this; - } - - private function addTitleElement(Cell $cell, Title $element, bool $isReceiptPart) : void { - $text = Translation::get(str_replace("text.", "", $element->getTitle()), $this->language); - $fStyle = $isReceiptPart ? FontStyle::FONT_STYLE_HEADING_RECEIPT : FontStyle::FONT_STYLE_HEADING_PAYMENT_PART; - $cell->addText($text, $fStyle, $fStyle); - } - - private function addTextElement(Cell $cell, Text $element) : void { - $fStyle = FontStyle::getCurrentText(); - $this->addElementTextRun($element->getText(), $cell->addTextRun($fStyle), $fStyle); - } - - private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $isReceiptPart) : void { - $type = $element->getType(); - - switch ($type) { - case Placeholder::PLACEHOLDER_TYPE_AMOUNT['type']: - $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ - 'width' => PhpWordHelper::mmToPoint($element->getWidth()), - 'height' => PhpWordHelper::mmToPoint($element->getHeight()), - 'positioning' => Image::POSITION_ABSOLUTE, - 'posHorizontal' => Image::POSITION_ABSOLUTE, - 'posVertical' => Image::POSITION_ABSOLUTE, - 'marginLeft' => PhpWordHelper::mmToPoint(-4.5), - 'marginTop' => PhpWordHelper::mmToPoint(0.8), - ]); - break; - case Placeholder::PLACEHOLDER_TYPE_AMOUNT_RECEIPT['type']: - $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ - 'width' => PhpWordHelper::mmToPoint($element->getWidth()), - 'height' => PhpWordHelper::mmToPoint($element->getHeight()), - 'positioning' => Image::POSITION_ABSOLUTE, - 'posHorizontal' => Image::POSITION_ABSOLUTE, - 'posVertical' => Image::POSITION_ABSOLUTE, - 'marginLeft' => PhpWordHelper::mmToPoint(9.1), - 'marginTop' => PhpWordHelper::mmToPoint(-2.5), - ]); - break; - case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY['type']: - case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY_RECEIPT['type']: - default: - $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ - 'width' => PhpWordHelper::mmToPoint($element->getWidth()), - 'height' => PhpWordHelper::mmToPoint($element->getHeight()), - 'wrappingStyle' => Image::WRAP_INFRONT, - 'positioning' => Image::POS_RELATIVE, - 'posHorizontalRel' => Image::POS_RELTO_MARGIN, - 'posVerticalRel' => Image::POS_RELTO_LINE, - ]); - } - } - - private function addSeparatorContentIfNotPrintable() : void { - if (!$this->isPrintable()) { - $text = Translation::get('separate', $this->language); - $fStyle = FontStyle::FONT_STYLE_SEPARATOR; - $this->billTable->getSeparate()->addText($text, $fStyle, $fStyle); - } - } - - private function addInformationContentReceipt() : void { - $this->addReceiptTitle(); - - $cell = $this->billTable->getReceipt()->getInformationSection(); - $informationElements = $this->getInformationElementsOfReceipt(); - $lastKey = array_key_last($informationElements); - FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_RECEIPT); - foreach ($informationElements as $key => $informationElement) { - $this->addContentElement($cell, $informationElement, true); - if ($informationElement instanceof Text && $key !== $lastKey) { - $cell->addText('', FontStyle::FONT_STYLE_VALUE_RECEIPT, FontStyle::FONT_STYLE_VALUE_RECEIPT); - } - } - - $this->addReceiptAcceptancePoint(); - } - - private function addContentElement(Cell $cell, OutputElementInterface $element, bool $isReceiptPart = false) : void { - if ($element instanceof Title) { - $this->addTitleElement($cell, $element, $isReceiptPart); - } - - if ($element instanceof Text) { - $this->addTextElement($cell, $element); - } - - if ($element instanceof Placeholder) { - $this->addPlaceholderElement($cell, $element, $isReceiptPart); - } - } - - private function addCurrencyContentReceipt() : void { - $cell = $this->billTable->getReceipt()->getAmountSection()->getCurrencyCell(); - FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_RECEIPT); - foreach ($this->getCurrencyElements() as $informationElement) { - $this->addContentElement($cell, $informationElement, true); - } - } - - private function addAmountContentReceipt() : void { - $cell = $this->billTable->getReceipt()->getAmountSection()->getAmountCell(); - FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_RECEIPT); - foreach ($this->getAmountElementsReceipt() as $informationElement) { - $this->addContentElement($cell, $informationElement, true); - } - } - - private function addReceiptTitle() : void { - $text = Translation::get('receipt', $this->language); - $this->billTable->getReceipt()->getTitleSection()->addText($text, FontStyle::FONT_STYLE_TITLE); - } - - private function addReceiptAcceptancePoint() : void { - $text = Translation::get('acceptancePoint', $this->language); - $this->billTable->getReceipt()->getAcceptancePointSection()->addText( - $text, - FontStyle::FONT_STYLE_ACCEPTANCE_POINT, - FontStyle::FONT_STYLE_ACCEPTANCE_POINT); - } - - private function addSwissQrCodeImage() : void { - $qrCode = $this->getQrCode()->writeDataUri(); - $img = base64_decode(preg_replace('#^data:image/[^;]+;base64,#', '', $qrCode)); - $this->billTable->getPayment()->getQrCodeSection()->addImage($img, [ - 'width' => PhpWordHelper::mmToPoint(Style::QR_CODE_SIZE), - 'height' => PhpWordHelper::mmToPoint(Style::QR_CODE_SIZE), - ]); - } - - private function addInformationContent() : void { - $text = Translation::get('paymentPart', $this->language); - $this->billTable->getPayment()->getTitleSection()->addText($text, FontStyle::FONT_STYLE_TITLE); - $cell = $this->billTable->getPayment()->getInformationSection(); - $informationElements = $this->getInformationElements(); - $lastKey = array_key_last($informationElements); - FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); - foreach ($this->getInformationElements() as $key => $informationElement) { - $this->addContentElement($cell, $informationElement); - if ($informationElement instanceof Text && $key !== $lastKey) { - $cell->addText('', FontStyle::FONT_STYLE_VALUE_PAYMENT_PART, FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); - } - } - } - - private function addCurrencyContent() : void { - $cell = $this->billTable->getPayment()->getAmountSection()->getCurrencyCell(); - FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_PAYMENT_PART); - foreach ($this->getCurrencyElements() as $informationElement) { - $this->addContentElement($cell, $informationElement); - } - } - - private function addAmountContent() : void { - $cell = $this->billTable->getPayment()->getAmountSection()->getAmountCell(); - FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_PAYMENT_PART); - foreach ($this->getAmountElements() as $informationElement) { - $this->addContentElement($cell, $informationElement); - } - } - - private function addFurtherInformationContent() : void { - $cell = $this->billTable->getPayment()->getFurtherInformationSection(); - FontStyle::setCurrentText(FontStyle::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART); - foreach ($this->getFurtherInformationElements() as $informationElement) { - $this->addContentElement($cell, $informationElement); - } - } - - private function addElementTextRun(string $text, TextRun $textRun, array|string $fStyle = []) : void { - $lines = explode("\n", $text); - foreach ($lines as $key => $line) { - $textRun->addText($line, $fStyle, $fStyle); - if (array_key_last($lines) !== $key) { - $textRun->addTextBreak(); - } - } - } - +final class PhpWordOutput extends AbstractOutput implements OutputInterface +{ + private PhpWord $phpWord; + private Bill $billTable; + + public function __construct( + QrBill $qrBill, + string $language, + PhpWord $phpWord, + ) { + parent::__construct($qrBill, $language); + $this->phpWord = $phpWord; + FontStyle::defineFontStyles($this->phpWord); + } + + public function getPaymentPart() + { + $sections = $this->phpWord->getSections(); + $lastAddedSection = end($sections); + $this->billTable = new Bill($lastAddedSection, $this->isPrintable()); + + $this->addSeparatorContentIfNotPrintable(); + + $this->addInformationContentReceipt(); + $this->addCurrencyContentReceipt(); + $this->addAmountContentReceipt(); + + $this->addSwissQrCodeImage(); + $this->addInformationContent(); + $this->addCurrencyContent(); + $this->addAmountContent(); + $this->addFurtherInformationContent(); + } + + public function setQrCodeImageFormat(string $fileExtension) : AbstractOutput + { + if ($fileExtension === QrCode::FILE_FORMAT_SVG) { + throw new InvalidPhpWordImageFormat('SVG images are not allowed by PHPWord.'); + } + + $this->qrCodeImageFormat = $fileExtension; + + return $this; + } + + private function addTitleElement(Cell $cell, Title $element, bool $isReceiptPart) : void + { + $text = Translation::get(str_replace("text.", "", $element->getTitle()), $this->language); + $fStyle = $isReceiptPart ? FontStyle::FONT_STYLE_HEADING_RECEIPT : FontStyle::FONT_STYLE_HEADING_PAYMENT_PART; + $cell->addText($text, $fStyle, $fStyle); + } + + private function addTextElement(Cell $cell, Text $element) : void + { + $fStyle = FontStyle::getCurrentText(); + $this->addElementTextRun($element->getText(), $cell->addTextRun($fStyle), $fStyle); + } + + private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $isReceiptPart) : void + { + $type = $element->getType(); + + switch ($type) { + case Placeholder::PLACEHOLDER_TYPE_AMOUNT['type']: + $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ + 'width' => PhpWordHelper::mmToPoint($element->getWidth()), + 'height' => PhpWordHelper::mmToPoint($element->getHeight()), + 'positioning' => Image::POSITION_ABSOLUTE, + 'posHorizontal' => Image::POSITION_ABSOLUTE, + 'posVertical' => Image::POSITION_ABSOLUTE, + 'marginLeft' => PhpWordHelper::mmToPoint(-4.5), + 'marginTop' => PhpWordHelper::mmToPoint(0.8), + ]); + break; + case Placeholder::PLACEHOLDER_TYPE_AMOUNT_RECEIPT['type']: + $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ + 'width' => PhpWordHelper::mmToPoint($element->getWidth()), + 'height' => PhpWordHelper::mmToPoint($element->getHeight()), + 'positioning' => Image::POSITION_ABSOLUTE, + 'posHorizontal' => Image::POSITION_ABSOLUTE, + 'posVertical' => Image::POSITION_ABSOLUTE, + 'marginLeft' => PhpWordHelper::mmToPoint(9.1), + 'marginTop' => PhpWordHelper::mmToPoint(-2.5), + ]); + break; + case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY['type']: + case Placeholder::PLACEHOLDER_TYPE_PAYABLE_BY_RECEIPT['type']: + default: + $cell->addImage($element->getFile(Placeholder::FILE_TYPE_PNG), [ + 'width' => PhpWordHelper::mmToPoint($element->getWidth()), + 'height' => PhpWordHelper::mmToPoint($element->getHeight()), + 'wrappingStyle' => Image::WRAP_INFRONT, + 'positioning' => Image::POS_RELATIVE, + 'posHorizontalRel' => Image::POS_RELTO_MARGIN, + 'posVerticalRel' => Image::POS_RELTO_LINE, + ]); + } + } + + private function addSeparatorContentIfNotPrintable() : void + { + if (!$this->isPrintable()) { + $text = Translation::get('separate', $this->language); + $fStyle = FontStyle::FONT_STYLE_SEPARATOR; + $this->billTable->getSeparate()->addText($text, $fStyle, $fStyle); + } + } + + private function addInformationContentReceipt() : void + { + $this->addReceiptTitle(); + + $cell = $this->billTable->getReceipt()->getInformationSection(); + $informationElements = $this->getInformationElementsOfReceipt(); + $lastKey = array_key_last($informationElements); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_RECEIPT); + foreach ($informationElements as $key => $informationElement) { + $this->addContentElement($cell, $informationElement, true); + if ($informationElement instanceof Text && $key !== $lastKey) { + $cell->addText('', FontStyle::FONT_STYLE_VALUE_RECEIPT, FontStyle::FONT_STYLE_VALUE_RECEIPT); + } + } + + $this->addReceiptAcceptancePoint(); + } + + private function addContentElement(Cell $cell, OutputElementInterface $element, bool $isReceiptPart = false) : void + { + if ($element instanceof Title) { + $this->addTitleElement($cell, $element, $isReceiptPart); + } + + if ($element instanceof Text) { + $this->addTextElement($cell, $element); + } + + if ($element instanceof Placeholder) { + $this->addPlaceholderElement($cell, $element, $isReceiptPart); + } + } + + private function addCurrencyContentReceipt() : void + { + $cell = $this->billTable->getReceipt()->getAmountSection()->getCurrencyCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_RECEIPT); + foreach ($this->getCurrencyElements() as $informationElement) { + $this->addContentElement($cell, $informationElement, true); + } + } + + private function addAmountContentReceipt() : void + { + $cell = $this->billTable->getReceipt()->getAmountSection()->getAmountCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_RECEIPT); + foreach ($this->getAmountElementsReceipt() as $informationElement) { + $this->addContentElement($cell, $informationElement, true); + } + } + + private function addReceiptTitle() : void + { + $text = Translation::get('receipt', $this->language); + $this->billTable->getReceipt()->getTitleSection()->addText($text, FontStyle::FONT_STYLE_TITLE); + } + + private function addReceiptAcceptancePoint() : void + { + $text = Translation::get('acceptancePoint', $this->language); + $this->billTable->getReceipt()->getAcceptancePointSection()->addText( + $text, + FontStyle::FONT_STYLE_ACCEPTANCE_POINT, + FontStyle::FONT_STYLE_ACCEPTANCE_POINT + ); + } + + private function addSwissQrCodeImage() : void + { + $qrCode = $this->getQrCode()->writeDataUri(); + $img = base64_decode(preg_replace('#^data:image/[^;]+;base64,#', '', $qrCode)); + $this->billTable->getPayment()->getQrCodeSection()->addImage($img, [ + 'width' => PhpWordHelper::mmToPoint(Style::QR_CODE_SIZE), + 'height' => PhpWordHelper::mmToPoint(Style::QR_CODE_SIZE), + ]); + } + + private function addInformationContent() : void + { + $text = Translation::get('paymentPart', $this->language); + $this->billTable->getPayment()->getTitleSection()->addText($text, FontStyle::FONT_STYLE_TITLE); + $cell = $this->billTable->getPayment()->getInformationSection(); + $informationElements = $this->getInformationElements(); + $lastKey = array_key_last($informationElements); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); + foreach ($this->getInformationElements() as $key => $informationElement) { + $this->addContentElement($cell, $informationElement); + if ($informationElement instanceof Text && $key !== $lastKey) { + $cell->addText('', FontStyle::FONT_STYLE_VALUE_PAYMENT_PART, FontStyle::FONT_STYLE_VALUE_PAYMENT_PART); + } + } + } + + private function addCurrencyContent() : void + { + $cell = $this->billTable->getPayment()->getAmountSection()->getCurrencyCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_PAYMENT_PART); + foreach ($this->getCurrencyElements() as $informationElement) { + $this->addContentElement($cell, $informationElement); + } + } + + private function addAmountContent() : void + { + $cell = $this->billTable->getPayment()->getAmountSection()->getAmountCell(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_AMOUNT_PAYMENT_PART); + foreach ($this->getAmountElements() as $informationElement) { + $this->addContentElement($cell, $informationElement); + } + } + + private function addFurtherInformationContent() : void + { + $cell = $this->billTable->getPayment()->getFurtherInformationSection(); + FontStyle::setCurrentText(FontStyle::FONT_STYLE_FURTHER_INFORMATION_PAYMENT_PART); + foreach ($this->getFurtherInformationElements() as $informationElement) { + $this->addContentElement($cell, $informationElement); + } + } + + private function addElementTextRun(string $text, TextRun $textRun, array|string $fStyle = []) : void + { + $lines = explode("\n", $text); + foreach ($lines as $key => $line) { + $textRun->addText($line, $fStyle, $fStyle); + if (array_key_last($lines) !== $key) { + $textRun->addTextBreak(); + } + } + } } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php index 93e63c8a..03f53d53 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Bill.php @@ -9,77 +9,80 @@ use PhpOffice\PhpWord\Style\TablePosition; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; -class Bill { +class Bill +{ + private \PhpOffice\PhpWord\Element\Table $table; + private ?Cell $separate = null; + private Receipt $receipt; + private Payment $payment; - private \PhpOffice\PhpWord\Element\Table $table; - private ?Cell $separate = null; - private Receipt $receipt; - private Payment $payment; + public function __construct(Section $section, bool $isPrintable) + { + $this->table = $section->addTable([ + 'layout' => Table::LAYOUT_FIXED, + 'width' => PhpWordHelper::mmToTwip(Style::DIN_A4_WIDTH), + 'height' => PhpWordHelper::mmToTwip(Style::DIN_A6_WIDTH), + 'position' => [ + 'horzAnchor' => TablePosition::HANCHOR_PAGE, + 'vertAnchor' => TablePosition::VANCHOR_PAGE, + 'tblpXSpec' => TablePosition::XALIGN_CENTER, + 'tblpYSpec' => TablePosition::YALIGN_BOTTOM, + 'leftFromText' => 0, + 'rightFromText' => 0, + 'topFromText' => 0, + 'bottomFromText' => 0, + ], + ]); + $verticalLine = []; + if (!$isPrintable) { + $width = PhpWordHelper::mmToTwip(Style::DIN_A4_WIDTH); + $height = PhpWordHelper::mmToTwip(5); + $separatorCellStyle = [ + 'borderBottomColor' => Style::NON_PRINTABLE_BORDER_COLOR, + 'borderBottomSize' => Style::NON_PRINTABLE_BORDER_SIZE, + 'borderBottomStyle' => Style::NON_PRINTABLE_BORDER_TYPE, + 'gridSpan' => 2, + 'valign' => JcTable::CENTER, + ]; + $this->separate = $this->table->addRow($height)->addCell($width, $separatorCellStyle); + $verticalLine = [ + 'borderRightColor' => Style::NON_PRINTABLE_BORDER_COLOR, + 'borderRightSize' => Style::NON_PRINTABLE_BORDER_SIZE, + 'borderRightStyle' => Style::NON_PRINTABLE_BORDER_TYPE, + ]; + } + $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::INNER_HEIGHT)); + $cell = $row->addCell(PhpWordHelper::mmToTwip(Style::RECEIPT_WIDTH), $verticalLine); + $cell = $cell->addTable([ + 'layout' => Table::LAYOUT_FIXED, + 'width' => PhpWordHelper::percentToPct(100), + 'unit' => 'pct', + 'cellMargin' => PhpWordHelper::mmToTwip(5), + ])->addRow()->addCell(); + $this->receipt = new Receipt($cell); - public function __construct(Section $section, bool $isPrintable) { - $this->table = $section->addTable([ - 'layout' => Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::mmToTwip(Style::DIN_A4_WIDTH), - 'height' => PhpWordHelper::mmToTwip(Style::DIN_A6_WIDTH), - 'position' => [ - 'horzAnchor' => TablePosition::HANCHOR_PAGE, - 'vertAnchor' => TablePosition::VANCHOR_PAGE, - 'tblpXSpec' => TablePosition::XALIGN_CENTER, - 'tblpYSpec' => TablePosition::YALIGN_BOTTOM, - 'leftFromText' => 0, - 'rightFromText' => 0, - 'topFromText' => 0, - 'bottomFromText' => 0, - ], - ]); - $verticalLine = []; - if (!$isPrintable) { - $width = PhpWordHelper::mmToTwip(Style::DIN_A4_WIDTH); - $height = PhpWordHelper::mmToTwip(5); - $separatorCellStyle = [ - 'borderBottomColor' => Style::NON_PRINTABLE_BORDER_COLOR, - 'borderBottomSize' => Style::NON_PRINTABLE_BORDER_SIZE, - 'borderBottomStyle' => Style::NON_PRINTABLE_BORDER_TYPE, - 'gridSpan' => 2, - 'valign' => JcTable::CENTER, - ]; - $this->separate = $this->table->addRow($height)->addCell($width, $separatorCellStyle); - $verticalLine = [ - 'borderRightColor' => Style::NON_PRINTABLE_BORDER_COLOR, - 'borderRightSize' => Style::NON_PRINTABLE_BORDER_SIZE, - 'borderRightStyle' => Style::NON_PRINTABLE_BORDER_TYPE, - ]; - } - $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::INNER_HEIGHT)); - $cell = $row->addCell(PhpWordHelper::mmToTwip(Style::RECEIPT_WIDTH), $verticalLine); - $cell = $cell->addTable([ - 'layout' => Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::percentToPct(100), - 'unit' => 'pct', - 'cellMargin' => PhpWordHelper::mmToTwip(5), - ])->addRow()->addCell(); - $this->receipt = new Receipt($cell); + $cell = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_WIDTH)); + $cell = $cell->addTable([ + 'layout' => Table::LAYOUT_FIXED, + 'width' => PhpWordHelper::percentToPct(100), + 'unit' => 'pct', + 'cellMargin' => PhpWordHelper::mmToTwip(5), + ])->addRow()->addCell(); + $this->payment = new Payment($cell); + } - $cell = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_WIDTH)); - $cell = $cell->addTable([ - 'layout' => Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::percentToPct(100), - 'unit' => 'pct', - 'cellMargin' => PhpWordHelper::mmToTwip(5), - ])->addRow()->addCell(); - $this->payment = new Payment($cell); - } + public function getSeparate() : ?Cell + { + return $this->separate; + } - public function getSeparate() : ?Cell { - return $this->separate; - } - - public function getReceipt() : Receipt { - return $this->receipt; - } - - public function getPayment() : Payment { - return $this->payment; - } + public function getReceipt() : Receipt + { + return $this->receipt; + } + public function getPayment() : Payment + { + return $this->payment; + } } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php index 59813389..6900ff38 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Payment.php @@ -7,72 +7,78 @@ use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\Table\Receipt\AmountSection; use PhpOffice\PhpWord\Element\Table; -class Payment { - - private Table $table; - private Cell $titleSection; - private Cell $qrCodeSection; - private AmountSection $amountSection; - private Cell $informationSection; - private Cell $furtherInformationSection; - - public function __construct(Cell $cell) { - $this->table = $cell->addTable([ - 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::percentToPct(100), - 'unit' => 'pct', - ]); - $this->table->getStyle()->setLayout(\PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED); - - $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INFORMATION_SECTION_HEIGHT)); - $paymentPartLeftCell = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INNER_WIDTH - Style::PAYMENT_PART_INFORMATION_SECTION_WIDTH)); - $this->informationSection = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INFORMATION_SECTION_WIDTH)); - - $table = $paymentPartLeftCell->addTable([ - 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::percentToPct(100), - 'unit' => 'pct', - ]); - $row = $table->addRow(PhpWordHelper::mmToTwip(Style::TITLE_SECTION_HEIGHT)); - $this->titleSection = $row->addCell(); - $this->addSpacerBeforeQrCode($table); - $row = $table->addRow(PhpWordHelper::mmToTwip(Style::QR_CODE_SIZE_WITH_BOTTOM_SPACE)); - $this->qrCodeSection = $row->addCell(); - $row = $table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_AMOUNT_SECTION_HEIGHT)); - $this->amountSection = new AmountSection( - $row->addCell(), - Style::PAYMENT_PART_CURRENCY_WIDTH, - Style::PAYMENT_PART_AMOUNT_WIDTH, - Style::PAYMENT_PART_AMOUNT_SECTION_HEIGHT); - - $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_FURTHER_INFORMATION_SECTION_HEIGHT)); - $this->furtherInformationSection = $row->addCell(null, ['gridSpan' => 2]); - } - - public function getTitleSection() : Cell { - return $this->titleSection; - } - - public function getQrCodeSection() : Cell { - return $this->qrCodeSection; - } - - public function getAmountSection() : AmountSection { - return $this->amountSection; - } - - public function getInformationSection() : Cell { - return $this->informationSection; - } - - public function getFurtherInformationSection() : Cell { - return $this->furtherInformationSection; - } - - private function addSpacerBeforeQrCode(Table $table) : void { - $fontSizeMustBeSmallThanRowHeight = 7; - $table->addRow(PhpWordHelper::mmToTwip(5))->addCell()->addText('', ['size' => $fontSizeMustBeSmallThanRowHeight], ['spaceAfter' => 0]); - } - - +class Payment +{ + private Table $table; + private Cell $titleSection; + private Cell $qrCodeSection; + private AmountSection $amountSection; + private Cell $informationSection; + private Cell $furtherInformationSection; + + public function __construct(Cell $cell) + { + $this->table = $cell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => PhpWordHelper::percentToPct(100), + 'unit' => 'pct', + ]); + $this->table->getStyle()->setLayout(\PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED); + + $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INFORMATION_SECTION_HEIGHT)); + $paymentPartLeftCell = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INNER_WIDTH - Style::PAYMENT_PART_INFORMATION_SECTION_WIDTH)); + $this->informationSection = $row->addCell(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_INFORMATION_SECTION_WIDTH)); + + $table = $paymentPartLeftCell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => PhpWordHelper::percentToPct(100), + 'unit' => 'pct', + ]); + $row = $table->addRow(PhpWordHelper::mmToTwip(Style::TITLE_SECTION_HEIGHT)); + $this->titleSection = $row->addCell(); + $this->addSpacerBeforeQrCode($table); + $row = $table->addRow(PhpWordHelper::mmToTwip(Style::QR_CODE_SIZE_WITH_BOTTOM_SPACE)); + $this->qrCodeSection = $row->addCell(); + $row = $table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_AMOUNT_SECTION_HEIGHT)); + $this->amountSection = new AmountSection( + $row->addCell(), + Style::PAYMENT_PART_CURRENCY_WIDTH, + Style::PAYMENT_PART_AMOUNT_WIDTH, + Style::PAYMENT_PART_AMOUNT_SECTION_HEIGHT + ); + + $row = $this->table->addRow(PhpWordHelper::mmToTwip(Style::PAYMENT_PART_FURTHER_INFORMATION_SECTION_HEIGHT)); + $this->furtherInformationSection = $row->addCell(null, ['gridSpan' => 2]); + } + + public function getTitleSection() : Cell + { + return $this->titleSection; + } + + public function getQrCodeSection() : Cell + { + return $this->qrCodeSection; + } + + public function getAmountSection() : AmountSection + { + return $this->amountSection; + } + + public function getInformationSection() : Cell + { + return $this->informationSection; + } + + public function getFurtherInformationSection() : Cell + { + return $this->furtherInformationSection; + } + + private function addSpacerBeforeQrCode(Table $table) : void + { + $fontSizeMustBeSmallThanRowHeight = 7; + $table->addRow(PhpWordHelper::mmToTwip(5))->addCell()->addText('', ['size' => $fontSizeMustBeSmallThanRowHeight], ['spaceAfter' => 0]); + } } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php index 17c4f613..8925da7f 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt.php @@ -7,45 +7,49 @@ use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\Element\Cell; -class Receipt { - - private Table $table; - private Cell $titleSection; - private Cell $informationSection; - private AmountSection $amountSection; - private Cell $acceptancePointSection; - - public function __construct(Cell $cell) { - $this->table = $cell->addTable([ - 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::percentToPct(100), - 'unit' => 'pct', - ]); - $this->titleSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::TITLE_SECTION_HEIGHT))->addCell(); - $this->informationSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_INFORMATION_SECTION_HEIGHT))->addCell(); - $this->amountSection = new AmountSection( - $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_AMOUNT_SECTION_HEIGHT))->addCell(), - Style::RECEIPT_CURRENCY_WIDTH, - Style::RECEIPT_AMOUNT_WIDTH, - Style::RECEIPT_AMOUNT_SECTION_HEIGHT); - $this->acceptancePointSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_ACCEPTANCE_SECTION_HEIGHT))->addCell(); - } - - public function getTitleSection() : Cell { - return $this->titleSection; - } - - public function getInformationSection() : Cell { - return $this->informationSection; - } - - public function getAmountSection() : AmountSection { - return $this->amountSection; - } - - public function getAcceptancePointSection() : Cell { - return $this->acceptancePointSection; - } - - +class Receipt +{ + private Table $table; + private Cell $titleSection; + private Cell $informationSection; + private AmountSection $amountSection; + private Cell $acceptancePointSection; + + public function __construct(Cell $cell) + { + $this->table = $cell->addTable([ + 'layout' => \PhpOffice\PhpWord\Style\Table::LAYOUT_FIXED, + 'width' => PhpWordHelper::percentToPct(100), + 'unit' => 'pct', + ]); + $this->titleSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::TITLE_SECTION_HEIGHT))->addCell(); + $this->informationSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_INFORMATION_SECTION_HEIGHT))->addCell(); + $this->amountSection = new AmountSection( + $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_AMOUNT_SECTION_HEIGHT))->addCell(), + Style::RECEIPT_CURRENCY_WIDTH, + Style::RECEIPT_AMOUNT_WIDTH, + Style::RECEIPT_AMOUNT_SECTION_HEIGHT + ); + $this->acceptancePointSection = $this->table->addRow(PhpWordHelper::mmToTwip(Style::RECEIPT_ACCEPTANCE_SECTION_HEIGHT))->addCell(); + } + + public function getTitleSection() : Cell + { + return $this->titleSection; + } + + public function getInformationSection() : Cell + { + return $this->informationSection; + } + + public function getAmountSection() : AmountSection + { + return $this->amountSection; + } + + public function getAcceptancePointSection() : Cell + { + return $this->acceptancePointSection; + } } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php index 3acbb145..1ba5f6fa 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Receipt/AmountSection.php @@ -6,28 +6,30 @@ use PhpOffice\PhpWord\Style\Table; use Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordHelper; -class AmountSection { - - private Cell $currencyCell; - private Cell $amountCell; - - public function __construct(Cell $cell, float $currencyWidth, float $amountWidth, float $height) { - $table = $cell->addTable([ - 'layout' => Table::LAYOUT_FIXED, - 'width' => PhpWordHelper::percentToPct(100), - 'unit' => 'pct', - ]); - $row = $table->addRow(PhpWordHelper::mmToTwip($height)); - $this->currencyCell = $row->addCell(PhpWordHelper::mmToTwip($currencyWidth)); - $this->amountCell = $row->addCell(PhpWordHelper::mmToTwip($amountWidth)); - } - - public function getCurrencyCell() : Cell { - return $this->currencyCell; - } - - public function getAmountCell() : Cell { - return $this->amountCell; - } - +class AmountSection +{ + private Cell $currencyCell; + private Cell $amountCell; + + public function __construct(Cell $cell, float $currencyWidth, float $amountWidth, float $height) + { + $table = $cell->addTable([ + 'layout' => Table::LAYOUT_FIXED, + 'width' => PhpWordHelper::percentToPct(100), + 'unit' => 'pct', + ]); + $row = $table->addRow(PhpWordHelper::mmToTwip($height)); + $this->currencyCell = $row->addCell(PhpWordHelper::mmToTwip($currencyWidth)); + $this->amountCell = $row->addCell(PhpWordHelper::mmToTwip($amountWidth)); + } + + public function getCurrencyCell() : Cell + { + return $this->currencyCell; + } + + public function getAmountCell() : Cell + { + return $this->amountCell; + } } diff --git a/src/PaymentPart/Output/PhpWordOutput/Table/Style.php b/src/PaymentPart/Output/PhpWordOutput/Table/Style.php index c2b76df2..f66103ab 100644 --- a/src/PaymentPart/Output/PhpWordOutput/Table/Style.php +++ b/src/PaymentPart/Output/PhpWordOutput/Table/Style.php @@ -4,39 +4,37 @@ use PhpOffice\PhpWord\SimpleType\Border; -abstract class Style { - - const DIN_A4_WIDTH = 210; - const DIN_A6_WIDTH = 105; - - const NON_PRINTABLE_BORDER_COLOR = '000000'; - const NON_PRINTABLE_BORDER_SIZE = 1; - const NON_PRINTABLE_BORDER_TYPE = Border::SINGLE; - - const RECEIPT_WIDTH = 62; - const RECEIPT_INNER_WIDTH = 52; - const PAYMENT_PART_WIDTH = 148; - const PAYMENT_PART_INNER_WIDTH = 138; - const INNER_HEIGHT = 95; - - const RECEIPT_INFORMATION_SECTION_HEIGHT = 56; - const RECEIPT_AMOUNT_SECTION_HEIGHT = 14; - const RECEIPT_ACCEPTANCE_SECTION_HEIGHT = 18; - const RECEIPT_CURRENCY_WIDTH = 12.2; - const RECEIPT_AMOUNT_WIDTH = self::RECEIPT_INNER_WIDTH - self::RECEIPT_CURRENCY_WIDTH; - - const PAYMENT_PART_INFORMATION_SECTION_HEIGHT = 85; - const PAYMENT_PART_AMOUNT_SECTION_HEIGHT = 22; - const PAYMENT_PART_FURTHER_INFORMATION_SECTION_HEIGHT = 10; - const PAYMENT_PART_LEFT_SECTION_WIDTH = 51; - const PAYMENT_PART_INFORMATION_SECTION_WIDTH = 87; - - const QR_CODE_SIZE = 46; - const QR_CODE_SIZE_WITH_BOTTOM_SPACE = 51; - - const TITLE_SECTION_HEIGHT = 7; - const PAYMENT_PART_CURRENCY_WIDTH = 14.4; - const PAYMENT_PART_AMOUNT_WIDTH = self::PAYMENT_PART_LEFT_SECTION_WIDTH - Style::PAYMENT_PART_CURRENCY_WIDTH; - - +abstract class Style +{ + const DIN_A4_WIDTH = 210; + const DIN_A6_WIDTH = 105; + + const NON_PRINTABLE_BORDER_COLOR = '000000'; + const NON_PRINTABLE_BORDER_SIZE = 1; + const NON_PRINTABLE_BORDER_TYPE = Border::SINGLE; + + const RECEIPT_WIDTH = 62; + const RECEIPT_INNER_WIDTH = 52; + const PAYMENT_PART_WIDTH = 148; + const PAYMENT_PART_INNER_WIDTH = 138; + const INNER_HEIGHT = 95; + + const RECEIPT_INFORMATION_SECTION_HEIGHT = 56; + const RECEIPT_AMOUNT_SECTION_HEIGHT = 14; + const RECEIPT_ACCEPTANCE_SECTION_HEIGHT = 18; + const RECEIPT_CURRENCY_WIDTH = 12.2; + const RECEIPT_AMOUNT_WIDTH = self::RECEIPT_INNER_WIDTH - self::RECEIPT_CURRENCY_WIDTH; + + const PAYMENT_PART_INFORMATION_SECTION_HEIGHT = 85; + const PAYMENT_PART_AMOUNT_SECTION_HEIGHT = 22; + const PAYMENT_PART_FURTHER_INFORMATION_SECTION_HEIGHT = 10; + const PAYMENT_PART_LEFT_SECTION_WIDTH = 51; + const PAYMENT_PART_INFORMATION_SECTION_WIDTH = 87; + + const QR_CODE_SIZE = 46; + const QR_CODE_SIZE_WITH_BOTTOM_SPACE = 51; + + const TITLE_SECTION_HEIGHT = 7; + const PAYMENT_PART_CURRENCY_WIDTH = 14.4; + const PAYMENT_PART_AMOUNT_WIDTH = self::PAYMENT_PART_LEFT_SECTION_WIDTH - Style::PAYMENT_PART_CURRENCY_WIDTH; } diff --git a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php index 1d003219..35cbf8b7 100644 --- a/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php +++ b/tests/PaymentPart/Output/PhpWordOutput/PhpWordOutputTest.php @@ -11,91 +11,89 @@ class PhpWordOutputTest extends TestCase { - use TestQrBillCreatorTrait; - - /** - * @dataProvider validQrBillsProvider - */ - public function testValidQrBills(string $name, QrBill $qrBill): void - { - $variations = [ - [ - 'printable' => false, - 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => dirname(__DIR__, 3) . '/TestData/PhpWordOutput/' . $name . '.docx' - ], - [ - 'printable' => true, - 'format' => QrCode::FILE_FORMAT_PNG, - 'file' => dirname(__DIR__, 3) . '/TestData/PhpWordOutput/' . $name . '.print.docx' - ] - ]; - - foreach ($variations as $variation) { - $file = $variation['file']; - - $phpWord = new \PhpOffice\PhpWord\PhpWord(); - $phpWord->getDocInfo()->setCreated(strtotime('2022-05-18 00:00:00')); - $phpWord->getDocInfo()->setModified(strtotime('2022-05-18 00:00:00')); - $phpWord->addSection(); - - $output = new PhpWordOutput($qrBill, 'en', $phpWord); - $output - ->setPrintable($variation['printable']) - ->setQrCodeImageFormat($variation['format']) - ->getPaymentPart(); - - if ($this->regenerateReferenceFiles) { - $phpWord->save($file); - } - - $tmpFile = tempnam(sys_get_temp_dir(), 'phpWordOutput'); - if(false === $tmpFile) { - throw new \RuntimeException('Could not create temporary file'); - } - $phpWord->save($tmpFile); - - $zipArchive = new \ZipArchive(); - $this->assertTrue($zipArchive->open($file)); - - $tmpZipArchive = new \ZipArchive(); - $this->assertTrue($tmpZipArchive->open($tmpFile)); - - $count = $zipArchive->count(); - $this->assertCount($count,$tmpZipArchive); - - for($i = 0; $i < $count; $i++) { - $name = $zipArchive->getNameIndex($i); - $content = $zipArchive->getFromName($name); - $tmpContent = $tmpZipArchive->getFromName($name); - $this->assertSame( - chunk_split($content, 150), - chunk_split($tmpContent, 150), - ); - } - } - } - - public function testItThrowsSvgNotSupportedException(): void - { - $this->expectException(InvalidPhpWordImageFormat::class); - - $qrBill = $this->createQrBill([ - 'header', - 'creditorInformationQrIban', - 'creditor', - 'paymentAmountInformation', - 'paymentReferenceQr' - ]); - - $phpWord = new \PhpOffice\PhpWord\PhpWord(); - $phpWord->addSection(); - - $output = new PhpWordOutput($qrBill, 'en', $phpWord); - $output - ->setQrCodeImageFormat(QrCode::FILE_FORMAT_SVG) - ->getPaymentPart(); - } - + use TestQrBillCreatorTrait; + + /** + * @dataProvider validQrBillsProvider + */ + public function testValidQrBills(string $name, QrBill $qrBill): void + { + $variations = [ + [ + 'printable' => false, + 'format' => QrCode::FILE_FORMAT_PNG, + 'file' => dirname(__DIR__, 3) . '/TestData/PhpWordOutput/' . $name . '.docx' + ], + [ + 'printable' => true, + 'format' => QrCode::FILE_FORMAT_PNG, + 'file' => dirname(__DIR__, 3) . '/TestData/PhpWordOutput/' . $name . '.print.docx' + ] + ]; + + foreach ($variations as $variation) { + $file = $variation['file']; + + $phpWord = new \PhpOffice\PhpWord\PhpWord(); + $phpWord->getDocInfo()->setCreated(strtotime('2022-05-18 00:00:00')); + $phpWord->getDocInfo()->setModified(strtotime('2022-05-18 00:00:00')); + $phpWord->addSection(); + + $output = new PhpWordOutput($qrBill, 'en', $phpWord); + $output + ->setPrintable($variation['printable']) + ->setQrCodeImageFormat($variation['format']) + ->getPaymentPart(); + + if ($this->regenerateReferenceFiles) { + $phpWord->save($file); + } + + $tmpFile = tempnam(sys_get_temp_dir(), 'phpWordOutput'); + if (false === $tmpFile) { + throw new \RuntimeException('Could not create temporary file'); + } + $phpWord->save($tmpFile); + + $zipArchive = new \ZipArchive(); + $this->assertTrue($zipArchive->open($file)); + + $tmpZipArchive = new \ZipArchive(); + $this->assertTrue($tmpZipArchive->open($tmpFile)); + + $count = $zipArchive->count(); + $this->assertCount($count, $tmpZipArchive); + + for ($i = 0; $i < $count; $i++) { + $name = $zipArchive->getNameIndex($i); + $content = $zipArchive->getFromName($name); + $tmpContent = $tmpZipArchive->getFromName($name); + $this->assertSame( + chunk_split($content, 150), + chunk_split($tmpContent, 150), + ); + } + } + } + + public function testItThrowsSvgNotSupportedException(): void + { + $this->expectException(InvalidPhpWordImageFormat::class); + + $qrBill = $this->createQrBill([ + 'header', + 'creditorInformationQrIban', + 'creditor', + 'paymentAmountInformation', + 'paymentReferenceQr' + ]); + + $phpWord = new \PhpOffice\PhpWord\PhpWord(); + $phpWord->addSection(); + + $output = new PhpWordOutput($qrBill, 'en', $phpWord); + $output + ->setQrCodeImageFormat(QrCode::FILE_FORMAT_SVG) + ->getPaymentPart(); + } } - From a578ed2244fbf0cfca1b237967a6ff6dd34bee5c Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 09:12:51 +0200 Subject: [PATCH 19/27] Revert "Add composer phpunit." This reverts commit af49888bac2630e72ed8affcf6c811a436d83c1c. --- composer.json | 3 +- composer.lock | 176 +------------------------------------------------- 2 files changed, 2 insertions(+), 177 deletions(-) diff --git a/composer.json b/composer.json index b2970a08..28de55fe 100644 --- a/composer.json +++ b/composer.json @@ -10,8 +10,7 @@ "symfony/intl": "^4.4|^5.0|^6.0", "kmukku/php-iso11649": "^1.5", "endroid/qr-code": "^4.4.4", - "symfony/polyfill-intl-icu": "^1.23", - "phpoffice/phpword": "^0.18.3" + "symfony/polyfill-intl-icu": "^1.23" }, "require-dev": { "phpunit/phpunit": "^9.0", diff --git a/composer.lock b/composer.lock index 2036e73a..1579179b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "acfe11dccb6331a818d4cf4e2581e74f", + "content-hash": "db4e1c26dc2515a0d07f5bd46544073b", "packages": [ { "name": "bacon/bacon-qr-code", @@ -227,180 +227,6 @@ }, "time": "2020-04-21T13:01:17+00:00" }, - { - "name": "laminas/laminas-escaper", - "version": "2.10.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-mbstring": "*", - "php": "^7.4 || ~8.0.0 || ~8.1.0" - }, - "conflict": { - "zendframework/zend-escaper": "*" - }, - "require-dev": { - "infection/infection": "^0.26.6", - "laminas/laminas-coding-standard": "~2.3.0", - "maglnet/composer-require-checker": "^3.8.0", - "phpunit/phpunit": "^9.5.18", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.22.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-escaper/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-escaper/issues", - "rss": "https://github.com/laminas/laminas-escaper/releases.atom", - "source": "https://github.com/laminas/laminas-escaper" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2022-03-08T20:15:36+00:00" - }, - { - "name": "phpoffice/phpword", - "version": "0.18.3", - "source": { - "type": "git", - "url": "https://github.com/PHPOffice/PHPWord.git", - "reference": "be0190cd5d8f95b4be08d5853b107aa4e352759a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/be0190cd5d8f95b4be08d5853b107aa4e352759a", - "reference": "be0190cd5d8f95b4be08d5853b107aa4e352759a", - "shasum": "" - }, - "require": { - "ext-xml": "*", - "laminas/laminas-escaper": "^2.2", - "php": "^5.3.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "dompdf/dompdf": "0.8.* || 1.0.*", - "ext-gd": "*", - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^2.2", - "mpdf/mpdf": "5.7.4 || 6.* || 7.* || 8.*", - "php-coveralls/php-coveralls": "1.1.0 || ^2.0", - "phploc/phploc": "2.* || 3.* || 4.* || 5.* || 6.* || 7.*", - "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^4.8.36 || ^7.0", - "squizlabs/php_codesniffer": "^2.9 || ^3.5", - "tecnickcom/tcpdf": "6.*" - }, - "suggest": { - "dompdf/dompdf": "Allows writing PDF", - "ext-gd2": "Allows adding images", - "ext-xmlwriter": "Allows writing OOXML and ODF", - "ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template", - "ext-zip": "Allows writing OOXML and ODF" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.19-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOffice\\PhpWord\\": "src/PhpWord" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Mark Baker" - }, - { - "name": "Gabriel Bull", - "email": "me@gabrielbull.com", - "homepage": "http://gabrielbull.com/" - }, - { - "name": "Franck Lefevre", - "homepage": "https://rootslabs.net/blog/" - }, - { - "name": "Ivan Lanin", - "homepage": "http://ivan.lanin.org" - }, - { - "name": "Roman Syroeshko", - "homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/" - }, - { - "name": "Antoine de Troostembergh" - } - ], - "description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)", - "homepage": "http://phpoffice.github.io", - "keywords": [ - "ISO IEC 29500", - "OOXML", - "Office Open XML", - "OpenDocument", - "OpenXML", - "PhpOffice", - "PhpWord", - "Rich Text Format", - "WordprocessingML", - "doc", - "docx", - "html", - "odf", - "odt", - "office", - "pdf", - "php", - "reader", - "rtf", - "template", - "template processor", - "word", - "writer" - ], - "support": { - "issues": "https://github.com/PHPOffice/PHPWord/issues", - "source": "https://github.com/PHPOffice/PHPWord/tree/0.18.3" - }, - "time": "2022-02-17T15:40:03+00:00" - }, { "name": "symfony/intl", "version": "v6.0.1", From 992aa26bb613021914b98559de40d27bd2ceca31 Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 09:15:43 +0200 Subject: [PATCH 20/27] Add phpoffice/phpword to composer. --- composer.json | 6 +- composer.lock | 176 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 179 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 28de55fe..224def6a 100644 --- a/composer.json +++ b/composer.json @@ -20,11 +20,13 @@ "friendsofphp/php-cs-fixer": "^3.4", "khanamiryan/qrcode-detector-decoder": "^1.0.3", "phpstan/phpstan": "^1.2", - "tecnickcom/tcpdf": "^6.3.2" + "tecnickcom/tcpdf": "^6.3.2", + "phpoffice/phpword": "^0.18.3" }, "suggest": { "tecnickcom/tcpdf": "Needed to create pdfs with TcPdfOutput", - "fpdf/fpdf": "Needed to create pdfs with FpdfOutput" + "fpdf/fpdf": "Needed to create pdfs with FpdfOutput", + "phpoffice/phpword": "Needed to create doc/docx with PhpWordOutput" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 1579179b..7d9be7f3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "db4e1c26dc2515a0d07f5bd46544073b", + "content-hash": "b1d0216ec5c9f21417cd28c31ddd64b3", "packages": [ { "name": "bacon/bacon-qr-code", @@ -1467,6 +1467,68 @@ }, "time": "2021-07-13T18:46:38+00:00" }, + { + "name": "laminas/laminas-escaper", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "58af67282db37d24e584a837a94ee55b9c7552be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be", + "reference": "58af67282db37d24e584a837a94ee55b9c7552be", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-mbstring": "*", + "php": "^7.4 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-escaper": "*" + }, + "require-dev": { + "infection/infection": "^0.26.6", + "laminas/laminas-coding-standard": "~2.3.0", + "maglnet/composer-require-checker": "^3.8.0", + "phpunit/phpunit": "^9.5.18", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.22.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-03-08T20:15:36+00:00" + }, { "name": "myclabs/deep-copy", "version": "1.10.2", @@ -1904,6 +1966,118 @@ }, "time": "2021-10-02T14:08:47+00:00" }, + { + "name": "phpoffice/phpword", + "version": "0.18.3", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PHPWord.git", + "reference": "be0190cd5d8f95b4be08d5853b107aa4e352759a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/be0190cd5d8f95b4be08d5853b107aa4e352759a", + "reference": "be0190cd5d8f95b4be08d5853b107aa4e352759a", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "laminas/laminas-escaper": "^2.2", + "php": "^5.3.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "dompdf/dompdf": "0.8.* || 1.0.*", + "ext-gd": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^2.2", + "mpdf/mpdf": "5.7.4 || 6.* || 7.* || 8.*", + "php-coveralls/php-coveralls": "1.1.0 || ^2.0", + "phploc/phploc": "2.* || 3.* || 4.* || 5.* || 6.* || 7.*", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.36 || ^7.0", + "squizlabs/php_codesniffer": "^2.9 || ^3.5", + "tecnickcom/tcpdf": "6.*" + }, + "suggest": { + "dompdf/dompdf": "Allows writing PDF", + "ext-gd2": "Allows adding images", + "ext-xmlwriter": "Allows writing OOXML and ODF", + "ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template", + "ext-zip": "Allows writing OOXML and ODF" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.19-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOffice\\PhpWord\\": "src/PhpWord" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Mark Baker" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com", + "homepage": "http://gabrielbull.com/" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net/blog/" + }, + { + "name": "Ivan Lanin", + "homepage": "http://ivan.lanin.org" + }, + { + "name": "Roman Syroeshko", + "homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/" + }, + { + "name": "Antoine de Troostembergh" + } + ], + "description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)", + "homepage": "http://phpoffice.github.io", + "keywords": [ + "ISO IEC 29500", + "OOXML", + "Office Open XML", + "OpenDocument", + "OpenXML", + "PhpOffice", + "PhpWord", + "Rich Text Format", + "WordprocessingML", + "doc", + "docx", + "html", + "odf", + "odt", + "office", + "pdf", + "php", + "reader", + "rtf", + "template", + "template processor", + "word", + "writer" + ], + "support": { + "issues": "https://github.com/PHPOffice/PHPWord/issues", + "source": "https://github.com/PHPOffice/PHPWord/tree/0.18.3" + }, + "time": "2022-02-17T15:40:03+00:00" + }, { "name": "phpspec/prophecy", "version": "v1.15.0", From d017fe230c5ad0dee05a635634920f301d23a1de Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 14:26:34 +0200 Subject: [PATCH 21/27] Remove legacy use Output\Element\Amount. --- src/PaymentPart/Output/AbstractOutput.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/PaymentPart/Output/AbstractOutput.php b/src/PaymentPart/Output/AbstractOutput.php index b4d579aa..19b60c07 100644 --- a/src/PaymentPart/Output/AbstractOutput.php +++ b/src/PaymentPart/Output/AbstractOutput.php @@ -3,7 +3,6 @@ namespace Sprain\SwissQrBill\PaymentPart\Output; use Sprain\SwissQrBill\DataGroup\Element\PaymentReference; -use Sprain\SwissQrBill\PaymentPart\Output\Element\Amount; use Sprain\SwissQrBill\PaymentPart\Output\Element\Placeholder; use Sprain\SwissQrBill\PaymentPart\Output\Element\Text; use Sprain\SwissQrBill\PaymentPart\Output\Element\Title; From 88b653e5b65dedd59f5429d53dd976c9829c66e3 Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 14:28:52 +0200 Subject: [PATCH 22/27] Resolve conflicts with another class in this namespace and code style. --- example/PhpWordOutput/phpword-example.php | 37 +++++++++++------------ 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/example/PhpWordOutput/phpword-example.php b/example/PhpWordOutput/phpword-example.php index 41fbd944..4c361bd7 100644 --- a/example/PhpWordOutput/phpword-example.php +++ b/example/PhpWordOutput/phpword-example.php @@ -1,36 +1,35 @@ -addSection([ - 'paperSize' => 'A4', - 'orientation' => 'portrait', - 'marginTop' => Converter::cmToTwip(2.0), - 'marginLeft' => Converter::cmToTwip(2.0), - 'marginBottom' => Converter::cmToTwip(2.0), - 'marginRight' => Converter::cmToTwip(2.0), - 'headerHeight' => Converter::cmToTwip(2.0), - 'footerHeight' => Converter::cmToTwip(2.0), + 'paperSize' => 'A4', + 'orientation' => 'portrait', + 'marginTop' => Converter::cmToTwip(2.0), + 'marginLeft' => Converter::cmToTwip(2.0), + 'marginBottom' => Converter::cmToTwip(2.0), + 'marginRight' => Converter::cmToTwip(2.0), + 'headerHeight' => Converter::cmToTwip(2.0), + 'footerHeight' => Converter::cmToTwip(2.0), ]); // 3. Create a full payment part for TcPDF /** @noinspection PhpUndefinedVariableInspection */ -$output = new QrBill\PaymentPart\Output\PhpWordOutput\PhpWordOutput($qrBill, 'en', $phpword); +$output = new \Sprain\SwissQrBill\PaymentPart\Output\PhpWordOutput\PhpWordOutput($qrBill, 'en', $phpword); $output - ->setPrintable(false) - ->setQrCodeImageFormat(QrCode::FILE_FORMAT_PNG) - ->getPaymentPart(); + ->setPrintable(false) + ->setQrCodeImageFormat(\Sprain\SwissQrBill\QrCode\QrCode::FILE_FORMAT_PNG) + ->getPaymentPart(); // 4. For demo purposes, let's save the generated example in a file -$examplePath = __DIR__ . "/phpword_example.docx"; +$examplePath = __DIR__."/phpword_example.docx"; $phpword->save($examplePath, download: true); print "Word example created here : ".$examplePath; From 76740e314504f8cea4d1c06063164179430989e4 Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 14:29:39 +0200 Subject: [PATCH 23/27] Remove unused parameter. --- src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php index 41183b2a..61189307 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordOutput.php @@ -77,7 +77,7 @@ private function addTextElement(Cell $cell, Text $element) : void $this->addElementTextRun($element->getText(), $cell->addTextRun($fStyle), $fStyle); } - private function addPlaceholderElement(Cell $cell, Placeholder $element, bool $isReceiptPart) : void + private function addPlaceholderElement(Cell $cell, Placeholder $element) : void { $type = $element->getType(); From 24e70e2b2043a3765f25262eb61bbca15ead4611 Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 14:35:41 +0200 Subject: [PATCH 24/27] Round converted twips to match integers. --- src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php index afaaf998..2b991894 100644 --- a/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php +++ b/src/PaymentPart/Output/PhpWordOutput/PhpWordHelper.php @@ -6,14 +6,14 @@ abstract class PhpWordHelper { - public static function mmToTwip(int|float $mm) : float|int + public static function mmToTwip(int|float $mm) : int { - return Converter::cmToTwip($mm / 10); + return round(Converter::cmToTwip($mm / 10)); } - public static function mmToPoint(int|float $mm) : float|int + public static function mmToPoint(int|float $mm) : int { - return Converter::cmToPoint($mm / 10); + return round(Converter::cmToPoint($mm / 10)); } /** From 18135209231fcf49675fe0d4b49b03f76cbbcd75 Mon Sep 17 00:00:00 2001 From: Severin J Date: Fri, 20 May 2022 14:41:27 +0200 Subject: [PATCH 25/27] Update TestData php word output to match the changed mmToTwip conversion by rounding from float to integer. --- .../qr-additional-information.docx | Bin 16364 -> 16196 bytes .../qr-additional-information.print.docx | Bin 16266 -> 16098 bytes .../PhpWordOutput/qr-alternative-schemes.docx | Bin 15986 -> 15817 bytes .../qr-alternative-schemes.print.docx | Bin 15882 -> 15719 bytes tests/TestData/PhpWordOutput/qr-full-set.docx | Bin 14372 -> 14226 bytes .../PhpWordOutput/qr-full-set.print.docx | Bin 14272 -> 14132 bytes .../qr-international-ultimate-debtor.docx | Bin 13385 -> 13238 bytes ...r-international-ultimate-debtor.print.docx | Bin 13285 -> 13141 bytes .../PhpWordOutput/qr-minimal-setup.docx | Bin 15525 -> 15355 bytes .../PhpWordOutput/qr-minimal-setup.print.docx | Bin 15421 -> 15258 bytes ...information-without-amount-but-debtor.docx | Bin 16205 -> 16021 bytes ...ation-without-amount-but-debtor.print.docx | Bin 16108 -> 15923 bytes ...qr-payment-information-without-amount.docx | Bin 18374 -> 18174 bytes ...ment-information-without-amount.print.docx | Bin 18275 -> 18075 bytes .../qr-payment-information-zero-amount.docx | Bin 16057 -> 15891 bytes ...payment-information-zero-amount.print.docx | Bin 15960 -> 15793 bytes .../qr-payment-reference-non.docx | Bin 14949 -> 14781 bytes .../qr-payment-reference-non.print.docx | Bin 14846 -> 14681 bytes .../qr-payment-reference-scor.docx | Bin 15510 -> 15342 bytes .../qr-payment-reference-scor.print.docx | Bin 15407 -> 15245 bytes .../PhpWordOutput/qr-ultimate-debtor.docx | Bin 13389 -> 13243 bytes .../qr-ultimate-debtor.print.docx | Bin 13288 -> 13148 bytes 22 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/TestData/PhpWordOutput/qr-additional-information.docx b/tests/TestData/PhpWordOutput/qr-additional-information.docx index 5536edc78287c1327aa1301cdc21aa0a47f2a1a5..eab704673677757252457b7025e55221b71807c2 100644 GIT binary patch delta 2122 zcmZ8idpOhm8~z$op=i!I4TTajMN_jm<*XruoFZj3#YhofhmNDLIWo0K2=nk3zVJlVTVUI7v&&+ITO3gs07UgEaCLcbIP@)QKDN=U zzhM@GV(vZeoGXPVDVvB$+0?SQF8wgV_DqY!!daAWqq!0z)19$PP8k_yMv6ZWH0vR~Gzd4(uSjx$*829O`k6-gh zkt_hN?p!X>lM`u1JAigSB|5d9<%?-u!7w;fLpS1@)uW@?$GA@j9Y&dbCPEKe4g=YFBlb?^*=Sis0plE4v5(_muN9v zmW#D^txs2TV%tu_NFwhd9?()*d&z1yj;A;~6_kBkX|Lu~9_uuF{rbywdosynw^@P6 zx=xPdU+FD0=M)iprhP{8T?{06cpkrVsBi|9wyTgU0&Tv@d#35jnm|kUf*D_9kg4aO z7qRO2wJeMD@KpIJYe%1#I?c&e!((B=#X6s7eY(@cZBHnc=HTeju4Vy&msNwRTKW|& z+^oq&FSr&;D^Sa!YV1kmyI&W`F$Ekg?MnuF$F?j5Vhb>iNZVsfJc>RM$Q$}6wZ z86kdgyC7Z>+4=RY7!CVbrNk^`4U6;yAGv4sD8_#$rSeC}V6;$fX82d`{-g|tqYe2+ zI|MvU*+FG@gvK2+Cg*sMj*R#Ie9;-_OBZ8^}21n^jBIIrjHSxd{;Rk!CSlBEnt4{ z=~iR_dqJaXDC&VJxMG`0QblGE1Yp+Sq_Tj)JWk*wYEV*tOPvc*J(HuoMANQ`DMv{X*b|PNw zUJnajSbc|^A+!*;7RuIdI=`lUTG9OdI#GO9d9h2-upkTiQx%h4xjN2GNtRd~a=nO4 z4efY3W9s+C?8~q_Db@+(oC-&XBbw9W&rT$UH*eq0S*Qr&wit?a>P5WXk#o^QrlqNg zepS|-ZFr5bRquRQO{>P;blyQlFW0=7AB)umyi))^4kA#NG5pz$b8^gSQZgR8}6%>*JAi!o|BiDTQ z?EMpGx3oJU{M2&SMf_1nh%vrG3DKYAcX0d6{)}W891z}6C@&9D_;?bH;bSq{kdI^N zLwr;;M)UEw@t;1;*y{fS@w+k7cOxT1s=D(40RXrH0f6nmzmJhnz8e6d&W4{v1e_%h z0z)H+x)%s%9PI=kSi%4O!^H%?P3O*UtM6~G_`hy|kubc6l7La-pHYBOfZWreG+^L- zI{BLp=~8}SRQME*Re&&%6l1I!eB&ToEyq>*_eQ@h008^XMyfsq#KQSQsJCx)m{0)d WPyhhw{|t@qr!-qwYubU{wB38(;TxE{QJ!kHT zgz(FqMA(oR)uZ+M{qy_$^E%$|*Zbesr#tcsP=$sVe#@}_C6|yLl z(QFowqngt=gx-8hiWumF&)`8GakulgCPU)e)wKY(!*Kq38U!x6QMqT@EPu2;?wob& zTBqs2c8bVbO5T<2?6az(&bvR3jw(fWN!IhI4%xwe1B}JMY{j6f%Wz@bYutlneF$5a zpm{+c;xZQ?cttSHIKecRS2A%}Y)O!BWLZL@>u9EUwHF~@^$dcyR@Oj_?f#=C5Ip*X ziYmXjs{#wOttr4>6IcK9ZT7o*ZO=YgXgUftBob|YasmZV+ujtCdvJorj7v%9^iK&W_jC;JkS z20S(IF2opZ8P%*Jbp2PERJe&dp+gtEPNKxmoKf9u1Ei&oA{?>%h5WIRT;$LbyK&J) zj*9H9?P?n%dr!!~yErE97%z5Ol+^A?1?d|#p2=e=d5unitt0el(k!<&EXBKl_kGin zR^_L7+oapbQWGyE?6Kdec$4=iB>(E^otAIII zc58yycr5LPn0tI@^+XJL$=oEN@NhLDOgK^L1z{|-s1^G)uhXX@h9+^Muo+W($&%PwGqOWPBwaOqsV^)0^)WB_b=>}W_zkxm;rHarYB#C!hK!C+LOSU;A})?Bw|%{Zl2t-}K-$;w&=NyXf3Iee@J; z6?g_MxUX7K$6~d!xmKsgo8QaPsk(u8B4h__KPtsYU6u&Zl$RUAdjSh2-KkLv(`tE- zG~e_e_)tb4>6XRMV#OA)rg>bk>4d2&9eSohW!R50xst1yJ@K3?(-^Jcq-Y$o_TXH- zqUUEgJFKhJ_j;;7lh8$8`6K#Qi-a`S_^knUmYZ`%V6M3Eyul636>jBJ?9zJbeW$tf znPSHz{^^EkeTm7jC&0P>KM<~a=6CR{ zbl7g*M{tSF$Tw%A8K*Bt1PHU#9SPC4?$c<$amv*96#75keDko)eKAmE^oG`tl)PmD z3jC8Fl+5JhlEdE6{G4GSD<^; zBUGrtS!{@t%y$kWR~^Xf3D4_+`}6jllb!-oCbPkTx8Dry+oSr%;|5#3BS~}ja{H^c z?-n}lgg~RW)D8EAK8~Ba13_W3>bW=)!j6-YE0|MFwTiDMVlF@TT1&-fr3z|WoPIXX zGX;~hC_W7cES`T~xhgg^19HDfp1=q3NKfwFA!Ym7%;)nGRLW$=)q3j)5APsb{}Qva z^LJ6})y3t`G8sN&E!a}C_&I-m!!PT5R04IbboFAwwcJd;Y*E(<H4s}FYVP%|NU8^xD1`e3PW1w!#kTwa|HSJw0*Cn1bR?8FPH={v7MbuqpK6UQBc zF;|`SfUZDefwToQ^67McjSe@~W-c_8uLe4B|5`8K$|aQy$_0yz%fVxdJ6wzD2g|j| z)O}zmpe?-A5gvY}1{f-8=i_C~TG!|drC;iR7>AK?9T1w{3T-}G5;ZKipi(}zG;*}N z5`NUUpmP2@S~^LO*Y{_Hm~puotG+kBf@ojxcj}patfk_PJHyTf z+|#C`MZdL~xWl*52pd%qq15XJxx9R_4?GtM6$!v%9Btix0;wxq*RmX(-i$pKMTL?> zI<XK2uYl9efhnFj<0v4MUSaJ?+z zckiyq^@17oTBV@$+gVhcWjMGl3W-|IKZzqs&-|&=CS#%i-`kq72z`ETiRdQ#!&7d2lRE6>)sJaE8>< z6#_>n;b@B7xC&hk_^;0ZTk=F&4G08+Fo8fk$N0bZD%#~dE>l;Wk!w26>8s!-|9ggh REECmm{Cd(XLC9Z$e*tt{7E%BJ diff --git a/tests/TestData/PhpWordOutput/qr-additional-information.print.docx b/tests/TestData/PhpWordOutput/qr-additional-information.print.docx index 14a067c8013be59f9622bed6d6ad68395bd6fbda..287d0c58ca37d02f892342e18416110c86efb747 100644 GIT binary patch delta 1953 zcmZ8iXEYmXA5S7i)h1?05VO?YdrJ|utGK21-le@sW7OW#(i&Hds8#DG)Lu8Z~;~iuas*&ij1%&FB0-{<5*_n07x#2IhFe?}3c={B+VI@(f5PzM=wj zg2RYy(~S^V>V>fjAEg^aaW5dp&(F?h^B)l0OaQ>K5)LjYh!tLlSkm6b44KXhelpb7 z4O=L_`E0X3$O+DvUAOeNA%tM=VJ=k!m(!b`|8hN}fV?M8LgjwWK@^YmAg9?5kEbv^ zp-!(DtGBLqU$ylb3pO?@Mx`IG-daiU^y1~gi)ROCXBpG|E6( zKb2#%bW~kc#+q}jfwL}8MzN;)PVyqECuA&BjtX+)L1oH_iOiSg)9g#?C-<__ISzB5 z-OsAQ6(%{Ej62$W-Ac3tc@8!Sp<%tGhY3;?9gEa=f{9NXGg){cU3GGrg1PdD*>F=^ z+>4a*4opKDbZQui^yDgY5K~1lD1Z+JuP_M+D#mhR8RhwMgihMqQNOPvOb}jAk+3DK z$q6W^^cuxMkrC+SnWB^zr0o`|lTDdtMwuS!B-0>y#3#22J2&zqc$Ce=hWvxhIP$8*M^O&Pf5k_|6$8Zu~jT2M9T$>8WHR9S)O0{v;WXCW%`;g)R^&a&@^#iC? zEeDIm%?5RyOem+0J-0lB6n0U=ayv|sy9D>mffN862v4!sK!{vs)MkE;)t0U zA0D(tbb9&zkS<1#<~Bd@+Z<8feqW)lIk}*(Z0AWyK-&bMwSUM=bedF}IqF`&{8zIe zcfLLHSaVEx(CQLJF0?BTgKMLO+w;vTn+F^ARQZ9)*N?6$B_d!+ps^i>Tbzm6M2z$F$C;RG&v&mT zGka?k_Ajm)@S%a*_-gJ0)xGB{NfT~2AHp6E;CWRuZ5kNKHO-vh`GA zs_Zs^o8T0m0KY2Dss2cIy0){*(#6;gB*=g!^6EiChTy-X`d;G4@nQc=+$>aoNgHI3 zIeZ&2q?L%jLMjB;9B?7)qN|dGkH)zqpxZW(2W*FLt?|dK1|M0&#X{KnSE`H1`KJwE z7W!UGF5NlKcxFZA@fNGEA|CkTBwRa71^UQss;#KhyE~Oz;WeP454LSntC0GEwu0VJ zMdzIirDgN9fawY2E^O@D6Fpu@-;O@zcQci*RKxcLk-YDf9wWhP+)$aitlkjiPqyWA z(!|%xvu2akbcmjs>YWqb{BM9gU9puZI(Z52W#_SXk)Te|cc&+E^#^1q~gk7qUO z#|SlhO4@1pk)Y7bBw(J@2b-ygKkt#o)&(~q>D-)dw+GsgSou2*!)Xa!Y5_UW#?aRH z*8ZV^#c}<)vYA|~N-#$O<&rI`_HF!2gbTy91QDDB?J=^*pT=Zg0qJqY2DfuViD-Rk`LgxHKc^aS3fAkn7cd4Ce9Hd?J>)yaF!@4+XpRaNcCL>ctJxg4X z)}OaH$fXTOMB>RR?LUlY!z(H_Vo@xjk7t?}Nup-ht(v3%Xj&vzMGN^1_Fm~e*u0mk zcsZF_=4JsI%;DEqK2a(EONu0Lb(nFZSW@C}!)RnW&DXuv|H+;1$dAG9UrA}w zh?*)irwZS=IESqN<_Abnf87^l)?p=^N6~Okb0ZXnj38_Uh}? z@%#UBT?4ECpQ{1`71;TLg|<)r1^@y8X&?ZA8}RSzO18$W8o=S_9b-6$V&%{L*3Sax zzZF1Na)LY#W++O(Wn?GL-2&0ZO(GbAJ8F4X%=$;?=FL0r8L;wH) delta 2198 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 delta 2173 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 delta 2049 zcmZ9Ndpy(oAIFCc!*OT1jJZ`VYho!g4k4G(&0Tb)p~)?l%Ur&>Eo|r*LQ9Uqab!QK zD4I$A)JV)+`ne>@EpjRMiJ#{8*YEN9NUa!yJuW3?NLLD9=q!aP@aS&u%o__=? zR|)VBX;m2ipy|QC@(q|;>b`MTy^U}9BYXuU_ddItb8g(B3WGo#6s=1`32=xSHj!^x z_lW4j#Y;mMaQ;E(V|t10#q1A+-cln&s6){$un1VElhq;xuGSei8QRc4r6~qpiUuvl zf0{eK?)6VL6s6mVB30&)l-ZXHdlF(fyg6=jQV-WL`3Jbl;1G?s<@ zBug~UxM6dZWq(rJ=>;K(FZmh238N2o-M{;?dCAQsDcpu(s!V@?5bErdL3R{+H=vHq zs6Mr6zmtC;h+r0Wo;Y3@ffb0sSNo$cVRcVX9K70w$K0l=<(UBHz}dW_t{KfXqi**+ z32wrvgTVZ*QaC*J_^BF)E(L)LJ|_)EAK~@xeLfPZ21Jy+Wm(5weB^q^-YRsExYA=? zsz5FzSoO4iAPCTD@gv4+*;4b;vy7`H$pp>LwRt-^s!rh2x>op3!Z~dxV;hFWp-Wy- z%Fkq-uB9&z#&!UDN9R;};`82ND7mU6zv9fsIIO>PJw#2`0jexD#-hpXv>@#hI24T* z(R)mATw5y#IVizwwT-^Q3myACxD76s5|FhFcb*CIcK0l~OyyG4O6Eom4{bNpuBS=b zmBSZ?l50c?r+JmrLkySUaH31a`M7J&5xU+f$aK%2KtnAG4i7SL@`efdj!bH%O}(ag z5|_G_jr$)n>`Rhbv!MF&Qu=k*-$eOzi`Vu%`Q~SPpc0R0%ALyQm`QqAEMPu*y5pa& zX9r9xq1ZB`6aA9rOfN;z&14qt#el5*>KX3eBIt>Y+M>z_lTl`W1#GG~yL^*V&?Q`H z(4Ncz4irFgDn8Tm({ddazms35DV7H^$b&3fIbOCaoQO`ele!g(2{wm(Y;hdOJw`g# z8@vcDthThSEAIQZVGT6Igfo01P(fRsye4yI8GcJ4B%K+}{bYPvzn-;C;U32Us~@kS zhb63$Xyk>|4XGyxo611sEa=il^B2*#KXZYMmz)}3T8+HR>C(JaXIpe+?&I>QhhBW&WVk&-AGp%+eS=Dnv}RAP1CW zoWo;U77*N3c$`yHdTd4ZS1oj;In$Xo()v9>3e>C7#WVVY($gmXcFncfPp9DU(en}4 zoc!$BTi@m^@Cz%+lY&*(d)Iyc<+MqVNVE+9_BsiNIsb03r$`D%ko3o{5K3?H-U_DQ zZCz8{bvxrt4ZNWxYf#s&CAKyW90YF2dTQetk(?Ul;0HI;vWAr%rA+mqrjEw^{+QGD z4P_Q6^mWMZAz$vd4vX;pFiNi*IpbL6+f@HKPX7AZsH_NRep3i4AetU1-k&8PGj zH+7xaSnQ;~4kHnE8nl;2wr>{`5%R91ma?)P#*i zoy-!eGCA8SWVJE!RsVDv@cmM>dt3)$@|D~3?J)H#O*LD$>h(M;!&F9I!4p9#PyVzJ zHw_Z7v{?9%rG7?4aYANlw5HGlRbF}Q{u4MtGnCw30wg$m@X-{`#O0h)QMHm3zOn{Agj zPb^zvHy<9ss(LMuZ#L<)1%2UNz6d$u@F?hc5;D7rB|qYle}7bBfxTNam>QoIK{sm) zlBk+^yS>u6xfK5@2))G)lLo-O?~_-kjaj&{QDn+V_1Wa<;+)xG#nz48?pps?$NU*m zsRgTMHDNJL$0%I{2p6Y!f0eme>9nYK zTke*lET!G*)djDZA4@2=XJ}p-rL2`ALW2$^D9y z@p0i_4$Z-o#@8`Z3%(*SCVch6nDO;C2Fuq0%zh3tv-|(03^6;(uaudo2u2*HG0oKZ zIJSrPbZOgWa6YPHRRjqJG*c{sk3M^N2T6;=?w9ZEVS*v;8CH{@j_#q~QQFr3%5ZZP d!3txVnlViAEDo}_&mfS@-tz~8KzXLW=)X75vqb;^ diff --git a/tests/TestData/PhpWordOutput/qr-full-set.docx b/tests/TestData/PhpWordOutput/qr-full-set.docx index c511dbd59762d50a3ef9652ab6051dde66df2757..208ee9079946c773f87937d230ec395ce8312d45 100644 GIT binary patch delta 2017 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 S;aQr}_y{9WUUU6llYanY|MsH* diff --git a/tests/TestData/PhpWordOutput/qr-full-set.print.docx b/tests/TestData/PhpWordOutput/qr-full-set.print.docx index 3e9890323472d2e7be55e3b69c9c15fa32e407b6..47cebdce651c9456a294931e423b0c1a8a442716 100644 GIT binary patch delta 2059 zcmZvddpy(oAIHCQ7mAwPrrFG8uDR!uORl2}BeSy#Z9*=S`z^Cb$Zh6Qnxf-ULbaAl zN`*M#h%|DE(5zf?>4v1=%<1=dbROsP&+GGeyd`2Q!i7wQl$KH?hrX z4xUV9BI*JK9Z5g3!X{qsbmS?woe@dH$7zipY`=PDWt|1fVhB&4>m`)nR4QsG+A2Y) zcHST3O{9zNo`cCYs6=?tTe5lUfuEskgY279&K8+x;07f*LPVb8(!6dx(TNND>?V_S zX_oBNWoeY(@?8nVglqJIBlr}AOm6C5m%Xo?!f5~1OTN0?rtZKvIT@z*-k}P)M?Nz( z`=XO^60z0j+VXvI<0-!o2w7BL0_J_aY`0OlKrzW1MWCb7P>}qoia@zwkiF|(dk8C| zB2O^G6)FNc@_4#9EWMzSKQX;6zTFUBy{w^>CV`qJDKLzmovZPJ97Pb)Z8~IdVNW#q9d_~pm_{kpanCDRTKRmrXmMP# zb;I)8)3CkT(2Z*r5H!-CwhNk@xQ>9^I^Gpd7kJRv1;8{h9oc33V*FsJNDEnPS!il#SV+AAUFGBdEC12Wg-N{B{yGllyFeCHK#o7#&u7q?u!xHHZB1@x1 zi8X?hn1t@M9hRp^X!#W&jy_r9vu;M`_oy8HB8Z6@lLs?qo zu^PFij&t`sf+VhpJktGHF80Ru%PnXBQb&vU1?5hPu`=&aPg+2;bWKJKDcsxcjl-$S zb*r);Bnc*$P<(R8OqZ8@wcEC7D|@I@BU^%lJXrxQSoYeDUP!|M*X2L(*(!LG;1Tm& zrThK$qZI)&f2fX?2J8u_5z!^jy*&?Wj(d75+P+ADpajuKwFG4%rbP&Y$tRZfc?y^` zdbdqAdYm0V_}{t}^0Bx{hD4QsmR*X5+lU4n7mHUD<7Z86;i=rF}n7?573L zL;Y9O&f9{q0wH8faD(X6=}5-hVd4v{%lJ(5CCSVC*$xMy4<))sNe%SGePpRJ=Q%&v~!eR?5t65v!bX_?=ZH)P|BQ zBdd>RoGPqjKH!A~RA!)NyA!OW!QATumc9;eH0CLvxs)vi<@@$%d)AUj^Q zrq1HC5wub*gh<@fHcyN^4C$J|75LXTMHXOFdi&<<<5cz!-i^!R#nT>|JZrbeSzE@U zD;(>Ks~_ge_h=NYx^!Q!Ih}veU5Ii}G9zv^P2mZwuxQFntMj?*i%N8E>$Vf0cl-vEd(Yt-TM$`M?BLp5_BpT0R)WAqKVO4m2#>Y~0GSG5hc<{<|5+keLp^_hVVH?nFV2ii-O zG*mdY8L(8?u35|j0G=F3?ci|g*Qq0WD*i*Qu<)2bpRi44IXi)PEO`G9NH^(M*-1Pg z07&5!?ELkTqjh8?m0}2kZZ2>Nn&_o-<|zVOAp8}pBjc!jh6>z_Q2IbNoipI&bb)^b zxIJc6aU(^q&7LFmGe;#kJzm29-ld@a&qq%YgTvjtPX_w@*I)OIyw-fc0dl(>07(9} U!$*@UrX@wKG7=X+>upZ{2aj`hU;qFB delta 2046 zcmY+Fc_7n`AIHCpOht({wjt+gHAgZ>j)!EJr^gkx$Q&_YjvNv8DCc5f7d8|){TGm>dSMX+D4qC?F(21+{rA)1H|d2hb7{$<84DyUpK&u|@I)FJ zv|e|iwTcvR+g6F>Se2Zw_%Qx3#;7RThN8($E}X?TlLx*y;0%lHF3sXkk?dl-4YR`W z1I??&{YKW{xWf*N!c!aG-ueE0wlo`Etg{L0`|XD+fz5Wcj%cx*wwCOUNF2Q=j>=^w z#80U^diAZx+UkYW$TxW|$TK8Nj_yU1Y^!sE0_>g6tYnkT+?C&`=y*W80ZSs~ZK(k0 z@=($2Oq}KytV-<$pPGX0k-OQ{m4vc@*F*>o7LV8s&Rfq)Bmc7fl=4iW_4!k->Y2Nd z_|#r^@7!x&y(W+RN+HYBIGgTYpuE2da?5nW_C8BtKwG+`LppDLZ5C;%v>a|%iN_sS z&&oUKv{ZO!*+XJa(K!n)hrA&}p@*Z|=IRt%tckH5`%K58O9+(3sQe?-JqN8T7xqWX zzvnf=6IKHaFG-T<`!;k7_5kjO0vZ;)%cL&WFtoyNCRj_!48UNnL^y4}r4&j~VeyGs zaR1BdU+Q`HUR==%4IYpAqZP%D`*5qaSC4``wei{Q~W@%PIPHRv?V>qtYYFJadt}%D33>$XEUgxWwbHG;39oxILM^iV^jiJK_mq} zG*J@7Y1jR|{T_8=2IUFvEGeO-dR?7Qooe->zE68NqE3|lwT`m7T*6pB4Ekd~>}OLS zkh0jskn!*X56=Ar^GNh$)Tt@HmxLM4>`J<-+fw~I*f~^JA~!n%A0D-ZP;!{yp*V=4 zjoshsm>&f^0c+&E0P!iN*{!_F`N7ROn93W4?}M?)KD>?w8PPrRv``~yup$yn{3t(n zi&>!~YomD)Mk)78U&j#N;JfYtiWU7$m*6q>ovxF(>x)(d`w(teNWCxDc9k%!A0Hs? zTgJ9sW&cDJW2{D5P{OLCng9U z*)pWnDeQ|Z@`dl~&qb>G8W}cfB#`e)gtTlui^Yq6ZbjQFlnX!^V~L9?nS6drML_0F zD^JtX$~^iN0yyvW+P4CHl(&_S5i-d@v{e6dp)8{3$a}cXG026AuKHJ%aIuj*wb7*{ zxr-Fbz{mqRh^+9dVlOURRbaNNpN{FnB%5T1HVOQD5cte!oFX}hWYp1+CzFD$gMwOe z?G5T!P3Oh7*Q4^`rFM@mr)#>syjz0eHUfBB)|1+7w7XJkqzA)LUFH?5RBD^@vC+WXr|=a7KgX4e>>*$MnAL zed)-S-yezPeUFb=*I%xFiJ87j{!MNCwR!od*LtDa%&ll z3?uZbZbD7lKoTGRj9*oia&kNK)xLT03lUi}ucVs3Xa?y9lWQQpudO{ZofO2+c5<7S z7%pki<%Zr&_^wQtVE!f#s6{W-g-7dGWE=a_n8hWnK4~>x zExSjt6_G`c(s7cLe@yT?_Eh95$r7t|6}snTIHiMp@-QoW!kLe_A}tMwTd{qrVzRW4 z1;&a&Ess$*9cUSD`kZmMx#*oV3W*TUB!E%vGP`;VLWN!_K)B`eTaK%^znIe1|ZYFMlx)r><%zVgjrWNjl<)8QL{0m-dj3 zKc7}rRcxnx0-{?vlg)Z!{fG;yo@TGF@_Y<|X(^?X#aRFai9CRm@N&ojS%RV7fsUWF zByjP80oyMVg`~P<~0#EAr;k0z!Er$#J3A8pZ7w zW1bcbFX)yayni@X7N7h(Omz0!3Pa(C+=t@2Z;Y9;q|G!9-2tbJ)fhxHrMi}{K4|iK z_xsZWMNfpNXh)Zt^p3(_5Xh43x-48SUgo8`6)hElaFt-9bFRqWY9U&UzH1Kud3FBz zk${HI>buAFs}!Un5{3F*Jx4l=mVx|N4aW`^eDv>}qC}OwIU8Ms?l7Z5qGsQ2^x%6s z{g!bRO!SR_#M5z5bVkz9g6$m9-w>}~#qXoQzh=VEAM_)NSU$S}3}a?|E1|MZ{j za~2!HF;O(etPt$C_qeEGtiPcOM)eG#3zPc#4+2n~WZBx_V#v`Q=>2`A8C1k7Zx?Xy zxYf=Lk*#CKTZ}8q zm<)Oz=CXvWmMyLZ+m@V8)RFBhk0k{gRMni+^p|mZIijC3LU%VYr*rZOO(WZ=NWYWJ z*b=VR_r@g@Pwa^I#gf4I(Jj_}LT@tPL6tIrt&s8pqkv4YP3uL$1vloe!NlARLEFF2 zSUb~%$pVLy+IIt=Um1@whmphz;-~ykr=}QJCRxgZVhU27B<>t(dvap3XAOrUJQaHzE2z4CG8fkOv+dmLD(m*AcU*{dev z#R13-B_?EV4TGC<{Li>hi=G^O8U;=0DX^c|-K!-SNDhx?*CTj2__z{u0gqx=>RxS9 mh0^gDc5U9PxoQwmT^w4*^Rv;fJ;eGAlGj(`8r<_R0Q>_9B#Vpy delta 2121 zcmY+Fc{~#iAIIm6GMR>48<`{5HY2G;Wv+}iB#9J;FmvYmG3Sa7W=ZzTQ8GDN%9U$! zHS7^{bRg%C}drMRK&+SY9wWN2aS7Vj%TpIiTegdx`k(m%GmOe_kJA8%9#zF!T>-65&!@J0Dy2( zuqWJ;5g;qy_%i-Nh2;h;2!tX!G2133Tz#xyJ^khkNqq<_Mos-!7&|b6d+1yff&@uG$CFAK9)ir}S;y;Ya108THUh!JHXc*BQJ;WQPf$5ZW9#jMeQ?8xfR< zSMyCUNG@;q_)=Qq#8tz_)K1vT$je%AkeFK{GmfSiX2vXssBIv1aU4ioT7&3KZSKI` zCTAAmpq<6iQD3L*?tD9cN0*YF)5x@-GphmSZx#$vJf_7_ZPa{n1N|xx4j+u+6dQ#0 zWeCffD#x{){D8=t93>dYX_<;ir$|v|$~}{xC%37_+a>q{2V)mTUD>OOgNCj>C>M6H zf9d>EHG(7cYx@m&hcw=2OI(*BVuz^%^7tzn&YxF>X_{WHQzv)hE~q`sM1OSdHT>Kb zp*@twZ1yv1cujufI8`;6T($)sD$(>A>o>35B07$jWF8s}>)G1m#uC3+`w$m*kAU)L ziT=CNw;v;d%9F2Byh~XDvbS#Lu!h5^!!9>eU#>z_BK=3kl$q+~iqA?B&y5s}4W?D- z1COp_2hL8OwA)MP6*_cBWoe@=&ZL`Q8*WkR1 zpDO}Skh_PCpJ-~EZm%qxNYqcZdVt{N1FH&N^OUJC(NKq5p5i0#a2zFe-Me^9{JP6 z%2%)Gp|@^};LYf1e=ZWbq!!=y@A;N94C;bDg-(mXLCkDE@@w;MwphHinrd}xR1#1G%OTjYzE9!j*X~WP7m%b*h&Ill9uxl(5IaBi2q49 zB%j~xZ73ZH?tgQ8-hbmtR(jajbSqWLadE%^_-*CB7fdjlk*IxMOsgzq|I-DIg%;Z>#YHcGy147Sl|fG8=O; z!e*6J8eAJ_oR)ih$# z!{+)*MrOI`re-3uy7uXX+03Zkpos$ylMjAlIr3e}Y8? zw?zAIvbP1pgzCbLWI!_qtvJio%H#|aoT{Nc8j)79m9l|%qnP4vplWHg>RqB8Ks%iH zDJu+V*qcqoT5Ufn(q)$rcD+~mIuBO~5fH-e?nVukiEuiB9?gAZ^w>;`-vmY@f{OfnEc*!gE^ZS+c;|oInIJ7CaB~Nt`#ylkv;xtcZ z5NMvNBKLDIq=oqZZ!fJLiR4w5k@EazP@0$?l!v-{^8BGnG;2LY9{TN}u?p>uo)QmB v_b?Df>-cYZZV&P5v;(MPyi^+{&u^eXvqJ5c{r50Rla_)~7xqT%4L#sL@u$=W diff --git a/tests/TestData/PhpWordOutput/qr-international-ultimate-debtor.print.docx b/tests/TestData/PhpWordOutput/qr-international-ultimate-debtor.print.docx index 3454a5e880277bca0d1841acbf3552b9d68cd780..5a05ad7f6a5f505c404f6be9feacbb88ae507cbc 100644 GIT binary patch delta 1879 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 diff --git a/tests/TestData/PhpWordOutput/qr-minimal-setup.docx b/tests/TestData/PhpWordOutput/qr-minimal-setup.docx index 3544b8581df24bcda25e6e9a75df9cacba415da8..25f0c47cf5fe15deb830c5913b9531bb73e85564 100644 GIT binary patch delta 1991 zcmY+Fc_7n`AICR$Io9?pN1LNfghj$^vm(c^D97Z8N}?zo=4#=)oLLfEj%L;5K4Nn8 zEDtkJQ79y>(R4j)2^~rj)vss${(1g-zu&LV`}6m^>eO-)@1U}xLPA^XA!Y0za>LcF z0m}_}osQhF4kF&lfiE)SHxTLf$^pk93=I5wrks~Fl(?vXKz)`V5EKLgB^{4DXm#*- zL_%!jv3Sem*rRjn!l)Ct58uOy9!kd7e41>-lEB z4vPMn z-Bm5o-9&{bo5Kh7mU%u^!ErD&6EkW&JSV731-GeJMb_?4r(0SIOZsesY5{ycL*R&8 zMWL?#DYAX|nlaiGfhX8X)4}b}!P9*Y8 z;dE>?y*dt$T@S$pY26q`l8os81iZ|Fa|+ANc9(KLef@ly{b6|P-#ep0WYuM&{`;NVoW~s^@~_;x2?&bvZ^j7jFORmF4-19`oAh^*i8Fq$5z= zb^mQp3@veOVYD9%*ywsU;Dtby+Dl-T`RDqko0a5l`FID--K}|*MBWtj#UePQpX)^% z9${YWQX0TViYpF38+6Ouad#OHeYrIkHD_RRyRh=F(miz9g=<~1M}B(-#9M_05OO$D zedth-0K;v;_N}oEiZ~2L9WlO#djS0h3Eu)Yc@pbf<1l*@Xb<=1Q63G6a_w%8vA4&d zldis@!oO^27%Dk^d#`u$!Pcge@Kk3!bRce>n=NsalxZ3_nOw&Wp;tACoOA=SvF^>j zb`>AdX7N84s%Ny;eXVaX=1@E2Z9%qS#x zu$z6$php7-fTH(fa6hcea-Q~Kjl&xx-0~<`ikmNE@{?d&s>7nlzU#{4_Rv7;rp|^l z7a;BBM?%3aR>2JJv7wv7#xY0O!ueP3d77{^k zPCNkAxXwv$A34$3gJOaZ7xbA*UxlsPo2Gb^?=`31kgbigZ)|dcML$JzRel@->1i!g zlATGks7mKl{uP_7j$L*t$C{(7TPpUy>-^G06L(xr`$Ss`fDJ``tAo3g!AE(Vlp zPP{f_nAGmu%u;)ZezMa8kubjhNia6RM8C50d_;S=?`h7`r>D}a;V^OtV)mm_wJdSY zM(lUmWiYn0<{0G;O%(L4aa_@D5J&d3DhFHFJZO^{uswzX*%IDo2GB3X zjtpv|4Vv8+!pi&_>w5S}22n$bF_lgH-RQMlm)#yto1+|EQv@^*$=%>;d)e8wFqW(4 zMoBD&kzIpfU^?w_aRIh%-y9lH)aRUguqmJI1ih6dWVC?ovORb0|i3$Nvy!uNSc zpB;)yaF7B>4W#hzcIld8eovPB#(o9)GC?h@eiIkWl$@}PtzO74YMY&ZSG>2_tNcq? zIXISF_3_)}x)+a?YYE;#uH$&3T;YV@_W**s)_+HjRZp;%SEdLEg>VzrGQm(D^&Joj z1*R;5gT6e5{E8vwEF%jz>zspz9I+h`tMe@WKbTY&n5ZMi;$O{JOV$?$lsqDc2(T~9 Zp159~_7D*Y#n!B3qNz%T{jaeF{SRdXk(K}e delta 2193 zcmY+Fc{~&TAIE3fT;)uTxsT*rWOGc&*>ViI%~4ivh7uENz9i=`xk(b=lF^)BRFX3} zhHv}2ho`#&7@^9k_>%Z64>$_t7&cFg%!ZldI4J_r^OHE?)*JdVbP zb63We(Q_G}Ds+@?tPe3zb$<3;i%5%z$81R*=~bh;XDS|?e3IU$@b2j_caG^&*5*l` z=uh(U@Ag+Kzx1i8)|ayvIcVyrjWcmDu_$WshQV_r^MZJ!Gv#rXsT^EltYE@uh;uHf zPW-!vdPEPEt^g8q^~wyehvO$Grq3=dwaRME!czkB;0HI&MMAmyE}XZ_Q?a38KtrxE2A+c{Smx2%@!f+)uXeUOyPF5<35@nA{v5lf7`dYg z4mkK1QJvBu`F0&<)l_(TA}aeya@mU8HGf&267cRY54~h&sciF4ybnIP>RTHph_f(n zZITEURlkYd%ckkzl?6GIs%oG}*N-{iGR~@2lS7DspU_Kx$XINSns^#f!d>P=x04i6 ztTmWmY37iSoE$bkz=od}R(SoThwhyS^-3_fM*otRW&*|9AQ}&<)}&!Roryk$*A2?K z4y*^c^1c=h%@a(1p?OzjBvt~(0!FgK;y_j%Qtg?8* zsU%m=;%Z)ZbU`TY;h6p02HB6SE&2xJO)$T*lUj0Z+-BF;J)rh3!0`Loo6jby+zw#h zYaOx-BV6bp)gUS|#nUl=_m}O5t7FWLVk+gX)wpB3JZRY!f8L8&+g@W8Hy`f*L|+VP z??xBRb-+3Z8Y;dTY}28FPsru?gUa6J!iro3Re@I$aJ)?yqdaI$>@Iw2Biq@Zr^vq2 zfwR2VCdZ7tA700^lU)Osa8$)cPh^~IpgjqS~N-`fw*xAh(_eN|86^zwk~PeU@sadO9{rG+BX_a7&R;UyNJCt=Faw%cPh#k z98eTxO1^5X7i0UeMW`Y>wnSLiZ-}xH8DUwDT?3=8lzjelw`18K`3PnbHjstw%<-%A z!34mAiSfc|LErGL?*q_J-MTm;*YYL&x;v4;3`U(t^-Hu2x43CtfMaGj8|2bM)%|^j zR~4S$e1d1hgJQ`dJvk=nE%vxH_OhM0QPgi<8aG7eIGLff^7i$lkQuA)c z6cGLA@^{=ZDdv^h^aPOR(0)`wx zt$E?H>LgY^##|6fk)CRM-;(=r+xBvlBWDNy3ipS9s=~l?!-9kxgvTNCe4c}MW=EM@ zP=SuiySQ{Y4|+&T@0M9Fl#+l(wax@BTh_(86k4nDiL}AuT?BuIM&5rz^_rE~!pFAc zJB;hO4MzMJok{6W@8Nb5-6Lo8H(Jkbs`qJ{_HhAEmjG+ouyRSAS^00H%=zr+z}$#U z_n=YxBJ^~#=Jhrw0^TuqxU#~LCPB-CH?J|tNoY?-%-^DW)=@Z)Gr)_SadmD?K8^8j z&XadUIS(^ZrDRIJzG&>+|4Es{YxZdox44v_8`u??N1x;L4vZVhv@=xOQbCE;-fh*G zUgsrL?b%8@ID-Z!CX-@29utkTnx8?@!)|O@L`c+P-#DQsIz2|`&vPTb*Zs?zC;+7m zE|qE0Y^SGrD>&TnbawFB2toeIp|p{{2bPNiBCv(c{s<$333UNO`Dr7Dy^mEY```~q zfWhHoI-$Z~a)3_QfAl?i!&snfIeh~(yAptj|AjUDHM0SF7*7%Emda(}2^2-rcO65>9 zqJVXh4ev$X*nZyl>aOF{RYt?fe8#xw$1`q#e`~*n_ZPUvNZ53%Qw*Hro~ZD6?|NA*d zUsL8c395fz24DjKl7PpJeN@`4(@fw|BH8OpvqHu)yy~S#0q>(u=lfscNSg`z=SW%l zlB~b#^&!9$s-z)(8J68RvT!xhDTFl3LJ<(42$W=vkYm|!1cYsml!1_CxtB*vV=dA! MLJ6#{`}_U>0%Cpk^Z)<= diff --git a/tests/TestData/PhpWordOutput/qr-minimal-setup.print.docx b/tests/TestData/PhpWordOutput/qr-minimal-setup.print.docx index 9f6a661b3af185083d02f218b61463befa8f4b20..4b1a77ae9975395d334a45026bf071720836ae6b 100644 GIT binary patch delta 2022 zcmZuyc|6qX7yjA}8QC=$42_*IGGpfAHuj;5$j*o?A$!)0A#+ti%}{slO_4oYc1gB2 zG>o;fO|m3Q3nA6yGJf~|KKFj^`_FSe&w0*y&-4EAp0-$OOpPxW2S;>$oj=!65ms