�PNG  IHDR22?�� pHYs  �� OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*! J�!��Q�EEȠ�����Q, � ��!���������{�kּ������>���� �H3Q5� �B�������.@� $p�d!s�#�~<<+"��x� �M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH���� � 0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4���������x����6��_-��"bb���ϫp@�t~��,/��;�m��%�h^ �u��f�@����W�p�~<�5�j>{�-�]c�K'Xt����o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A��,���� �`6�B$��BB d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(�� A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=� �C��7�F� �dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8, �c˱"� ���V����cϱw�E� 6wB aAHXLXN�H� $4� 7 �Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[ �b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w ��Ljg(�gw��L�Ӌ�T071���oUX*�*|�� �J�&�*/T����ު U�U�T��^S}�FU3S� Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k ��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN �(���~���)�)�4L�1e\k����X�H�Q�G�6������E�Y��A�J'\'Gg����S�Sݧ �M=:��.�k���Dw�n��^��Lo��y���}/�T�m���G X� $� �<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��= ���Z~s�r:V:ޚΜ�?}����/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z���������ۯ�6�i�ܟ�4�)�Y3s���C�Q��? ��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�������!h�쐭!��Α�i�P~���a�a��~ '���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl������� �{�/�]py�����.,:�@L�N8��A*��%�w%� y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y- �B��TZ(�*�geWf�͉�9���+��̳�ې7�����ᒶ��KW-X潬j9�������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n �ڴ �V����E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa��n��{��4���[���>ɾ�UUM�f�e�I���?�������m]�Nmq����#�׹���=TR��+�G�����w- 6 U����#pDy��� �� :�v�{���vg/jB��F�S��[b[�O�>����z�G��499�?r����C�d�&����ˮ/~�����јѡ�򗓿m|������������x31^�V���w�w��O�| (�h���SЧ��������c3-� cHRMz%������u0�`:�o�_�F5IDATx��ytUս�?�;���fN$$��@B�!�k��� -*�gE���j�O�kQ�ʠ`U�B_ �AÐ0%�Ȕ�@r3ޛ;߳��$�@��v����^�s����������$��ߢ !�W��5�̱'-٘������4�>�Rƫ$�G��0U�H}�_ _� #��k�MJ/=�9Du *ڲ�k�PQ;0��j|�*�$�^컂脛y���>�z×� B��� ��(�:$�ʔ_�6��C!B����MVx��a��ζyY����j��ƋY2�9�F�{r��r�딟F��Q��hY6��� x��[l��RC��������nt@��;P��3��� F�w��7��:�P���ɋ'���mj���Bƪ�$�Q�L��y��߷g��\���z����v5�p�v$�v櫻�`6~K �Y�X����,�:��"�o�e0II"(��,������l_�C���/4�+f�E�!q��:����u����c��樼.UE�@� �]K�W���$-�h]�JG���Dz)�`��.�A/ ���mᏣc�3jK� �!�>���$�Q�!�_�? \�C2(E �M$Z I{�U���s�ǣ���=��@Բe ޻��W�����@ �w����}�9v,)��.}*|"�s��di���,���G�]W�AC�������|<����[��ߕ������K�*�G nߴ!��‹��J�!��6(L�a)��Am��������;adf��:�xm��nh�;֦I��(���o�C~ډa?�=��s����h��E������xp����)���_���t��W�����´;8���`dz=(��@@�+,�;�`�fhl��XȌ�3,uI�~z(J����� �ZX�A����H'�À�㜦�82|��a�n�z2��I���� ���EY�h�ε<�0�q�{��C��v�˅��?"@��χ�x�WS+��N�~�KQ�J�8ل�� _.W��� !TU{�����,��"�� �;�������HI S� ��))�o�1�H�D� ���� (� ;����"Ҕ��,���� �F=���O��&�Ph>�`���y��߲ &S��P�<��'��1s�1cĂ�N����2)����@�u��tv��<�+�-&�����h��[!FSG���' � z z0��<����8d&�����E0�,��<��"!P�b4��� �{S�����X����.�囤���T��hEF��X�q0"-<����h���]�Py*����F⩍��@v�˂�Y08�� .q��a��s����(!<̫1�3�L�H��7sYW�`��qtu�\7��?�@�Y�� %Ka�x�GZ�*W�P��y�����N0r9��Z�c�%���q,��k�����!!,��>���IB��� �x1�Xu�Y���v-���ֺ��N������JP��a�2`�e5��w��u;�6�i���̃��(K���ťa��(l51��JL��O'%���]���ٖ뿉!��{*�p+f ���i8��D�ȑ���ܩ�M��V��ӟz��x�7Z�1i}�^͜���6e����x��)u�d�ˏ�V�eG�\�X1�����=n�U'�~Y����L�\,�(d!x ,�:�TW8� M`r���@��r+v�Q0��>^;˴�VbF��('����� �*O��i��j�Ӆ����^�S3&� ���{������.ی�� N;��NU%d0�Ce\r"�C�b��&t7N�7��� �ȪD�[%l�۪�$��'m?�A9tI�9>��NVL ��� 6v~M�����ъ�B���0����9$&=ώm��W�0���L���&��E���f�f��'+�9��hv��7,���M��6�D�&�^� �����8 D֮�����o��k^z��O��hP�8q�5d*��YVq3�{��������#LX4�?��jP=3�~�؅c�ݰ�̱�ұ��8̲��2�G�����j��έ�9��w7���U�X�w�85C��?!I&���o&����L���I#�^�eV�,�^t5�k� �xs˛\��U�8��."���{���ǵ�l4��ݼ�;��r"���G�/~���gJV�N糦��ZZ^k+NN�D��I$�=OE�z����|*�*{��%k���G��>�`9��b;�s���8,�qs��c��.b��q�%�>r��n�R�Ƨ�%�,�A��le#�8���}; 21�0�b�&�QX�f���q�00����$>�h�N�'�a3��A���/�r ��L5�8�GԲ'�����w;��c#�q1���h$*��V^�k��QĽ�b:i������� ����H F#�_���,��]g����Ը����`RUU���� ��"�qD���>-��ϤI�~��3�̴�����NZ[[555�eeek7�m����YF#[��Đ��R��i��L�H�r ��@��J-�Pŝ��_|�-��6y��ks�V�U~��6���w.����(��0A� 4��f��� /���C�xŊ�ٳ����z=6�����rg���mKo��o�/����a�g���?'9%9��P��斓��~���L{�� �H��{AW��B��$����v�1b�&Mb�ر��ر#�0`�`xMBp! )Z�Nmo�mZ�g�}�eذaWTVV ���'99��C5��&�&+5�bT>|8��PUUETT����&���t��~TE%��'������b�tEGG;RSS�S�N�v��ѯ��t����u1@�ޚ"f��͈���r'L�Ph��m��ƌ�74o��`�x�q�P���NRSS�X,�����l&&&��MFFA!-��`��ҷ�n��Yuu�����x<I�LB%����KԒ50�!�3�bz�����ʸKL���;---�l6[��`��������Ȏ;�����egg4��!D�T��jWujyZ��������K����%����p�^���X,6��sV=�ܖ����6�3�X ���4ҿ��A2�&����_k�;d�� �VfOIEND�B`�
Warning: session_start(): Session cannot be started after headers have already been sent in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 124

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 131

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 132

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 133

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 134

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 135

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 547

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 550

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 551
readers) : $this->createdReaders; foreach ($readers as $id) { $this->readers[$id]->getParser()->getStreamReader()->cleanUp(); unset($this->readers[$id]); } $this->createdReaders = []; } /** * Set the minimal PDF version. * * @param string $pdfVersion */ protected function setMinPdfVersion($pdfVersion) { if (\version_compare($pdfVersion, $this->PDFVersion, '>')) { $this->PDFVersion = $pdfVersion; } } /** @noinspection PhpUndefinedClassInspection */ /** * Get a new pdf parser instance. * * @param StreamReader $streamReader * @param array $parserParams Individual parameters passed to the parser instance. * @return PdfParser|FpdiPdfParser */ protected function getPdfParserInstance(StreamReader $streamReader, array $parserParams = []) { // note: if you get an exception here - turn off errors/warnings on not found classes for your autoloader. // psr-4 (https://www.php-fig.org/psr/psr-4/) says: Autoloader implementations MUST NOT throw // exceptions, MUST NOT raise errors of any level, and SHOULD NOT return a value. /** @noinspection PhpUndefinedClassInspection */ if (\class_exists(FpdiPdfParser::class)) { /** @noinspection PhpUndefinedClassInspection */ return new FpdiPdfParser($streamReader, $parserParams); } return new PdfParser($streamReader); } /** * Get an unique reader id by the $file parameter. * * @param string|resource|PdfReader|StreamReader $file An open file descriptor, a path to a file, a PdfReader * instance or a StreamReader instance. * @param array $parserParams Individual parameters passed to the parser instance. * @return string */ protected function getPdfReaderId($file, array $parserParams = []) { if (\is_resource($file)) { $id = (string) $file; } elseif (\is_string($file)) { $id = \realpath($file); if ($id === false) { $id = $file; } } elseif (\is_object($file)) { $id = \spl_object_hash($file); } else { throw new \InvalidArgumentException( \sprintf('Invalid type in $file parameter (%s)', \gettype($file)) ); } /** @noinspection OffsetOperationsInspection */ if (isset($this->readers[$id])) { return $id; } if (\is_resource($file)) { $streamReader = new StreamReader($file); } elseif (\is_string($file)) { $streamReader = StreamReader::createByFile($file); $this->createdReaders[] = $id; } else { $streamReader = $file; } $reader = new PdfReader($this->getPdfParserInstance($streamReader, $parserParams)); /** @noinspection OffsetOperationsInspection */ $this->readers[$id] = $reader; return $id; } /** * Get a pdf reader instance by its id. * * @param string $id * @return PdfReader */ protected function getPdfReader($id) { if (isset($this->readers[$id])) { return $this->readers[$id]; } throw new \InvalidArgumentException( \sprintf('No pdf reader with the given id (%s) exists.', $id) ); } /** * Set the source PDF file. * * @param string|resource|StreamReader $file Path to the file or a stream resource or a StreamReader instance. * @return int The page count of the PDF document. * @throws PdfParserException */ public function setSourceFile($file) { return $this->setSourceFileWithParserParams($file); } /** * Set the source PDF file with parameters which are passed to the parser instance. * * This method allows us to pass e.g. authentication information to the parser instance. * * @param string|resource|StreamReader $file Path to the file or a stream resource or a StreamReader instance. * @param array $parserParams Individual parameters passed to the parser instance. * @return int The page count of the PDF document. * @throws CrossReferenceException * @throws PdfParserException * @throws PdfTypeException */ public function setSourceFileWithParserParams($file, array $parserParams = []) { $this->currentReaderId = $this->getPdfReaderId($file, $parserParams); $this->objectsToCopy[$this->currentReaderId] = []; $reader = $this->getPdfReader($this->currentReaderId); $this->setMinPdfVersion($reader->getPdfVersion()); return $reader->getPageCount(); } /** * Imports a page. * * @param int $pageNumber The page number. * @param string $box The page boundary to import. Default set to PageBoundaries::CROP_BOX. * @param bool $groupXObject Define the form XObject as a group XObject to support transparency (if used). * @param bool $importExternalLinks Define whether external links are imported or not. * @return string A unique string identifying the imported page. * @throws CrossReferenceException * @throws FilterException * @throws PdfParserException * @throws PdfTypeException * @throws PdfReaderException * @see PageBoundaries */ public function importPage( $pageNumber, $box = PageBoundaries::CROP_BOX, $groupXObject = true, $importExternalLinks = false ) { if ($this->currentReaderId === null) { throw new \BadMethodCallException('No reader initiated. Call setSourceFile() first.'); } $pageId = $this->currentReaderId; $pageNumber = (int)$pageNumber; $pageId .= '|' . $pageNumber . '|' . ($groupXObject ? '1' : '0') . '|' . ($importExternalLinks ? '1' : '0'); // for backwards compatibility with FPDI 1 $box = \ltrim($box, '/'); if (!PageBoundaries::isValidName($box)) { throw new \InvalidArgumentException( \sprintf('Box name is invalid: "%s"', $box) ); } $pageId .= '|' . $box; if (isset($this->importedPages[$pageId])) { return $pageId; } $reader = $this->getPdfReader($this->currentReaderId); $page = $reader->getPage($pageNumber); $bbox = $page->getBoundary($box); if ($bbox === false) { throw new PdfReaderException( \sprintf("Page doesn't have a boundary box (%s).", $box), PdfReaderException::MISSING_DATA ); } $dict = new PdfDictionary(); $dict->value['Type'] = PdfName::create('XObject'); $dict->value['Subtype'] = PdfName::create('Form'); $dict->value['FormType'] = PdfNumeric::create(1); $dict->value['BBox'] = $bbox->toPdfArray(); if ($groupXObject) { $this->setMinPdfVersion('1.4'); $dict->value['Group'] = PdfDictionary::create([ 'Type' => PdfName::create('Group'), 'S' => PdfName::create('Transparency') ]); } $resources = $page->getAttribute('Resources'); if ($resources !== null) { $dict->value['Resources'] = $resources; } list($width, $height) = $page->getWidthAndHeight($box); $a = 1; $b = 0; $c = 0; $d = 1; $e = -$bbox->getLlx(); $f = -$bbox->getLly(); $rotation = $page->getRotation(); if ($rotation !== 0) { $rotation *= -1; $angle = $rotation * M_PI / 180; $a = \cos($angle); $b = \sin($angle); $c = -$b; $d = $a; switch ($rotation) { case -90: $e = -$bbox->getLly(); $f = $bbox->getUrx(); break; case -180: $e = $bbox->getUrx(); $f = $bbox->getUry(); break; case -270: $e = $bbox->getUry(); $f = -$bbox->getLlx(); break; } } // we need to rotate/translate if ($a != 1 || $b != 0 || $c != 0 || $d != 1 || $e != 0 || $f != 0) { $dict->value['Matrix'] = PdfArray::create([ PdfNumeric::create($a), PdfNumeric::create($b), PdfNumeric::create($c), PdfNumeric::create($d), PdfNumeric::create($e), PdfNumeric::create($f) ]); } // try to use the existing content stream $pageDict = $page->getPageDictionary(); try { $contentsObject = PdfType::resolve(PdfDictionary::get($pageDict, 'Contents'), $reader->getParser(), true); $contents = PdfType::resolve($contentsObject, $reader->getParser()); // just copy the stream reference if it is only a single stream if ( ($contentsIsStream = ($contents instanceof PdfStream)) || ($contents instanceof PdfArray && \count($contents->value) === 1) ) { if ($contentsIsStream) { /** * @var PdfIndirectObject $contentsObject */ $stream = $contents; } else { $stream = PdfType::resolve($contents->value[0], $reader->getParser()); } $filter = PdfDictionary::get($stream->value, 'Filter'); if (!$filter instanceof PdfNull) { $dict->value['Filter'] = $filter; } $length = PdfType::resolve(PdfDictionary::get($stream->value, 'Length'), $reader->getParser()); $dict->value['Length'] = $length; $stream->value = $dict; // otherwise extract it from the array and re-compress the whole stream } else { $streamContent = $this->compress ? \gzcompress($page->getContentStream()) : $page->getContentStream(); $dict->value['Length'] = PdfNumeric::create(\strlen($streamContent)); if ($this->compress) { $dict->value['Filter'] = PdfName::create('FlateDecode'); } $stream = PdfStream::create($dict, $streamContent); } // Catch faulty pages and use an empty content stream } catch (FpdiException $e) { $dict->value['Length'] = PdfNumeric::create(0); $stream = PdfStream::create($dict, ''); } $externalLinks = []; if ($importExternalLinks) { $externalLinks = $page->getExternalLinks($box); } $this->importedPages[$pageId] = [ 'objectNumber' => null, 'readerId' => $this->currentReaderId, 'id' => 'TPL' . $this->getNextTemplateId(), 'width' => $width / $this->k, 'height' => $height / $this->k, 'stream' => $stream, 'externalLinks' => $externalLinks ]; return $pageId; } /** * Draws an imported page onto the page. * * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the * aspect ratio. * * @param mixed $pageId The page id * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array * with the keys "x", "y", "width", "height", "adjustPageSize". * @param float|int $y The ordinate of upper-left corner. * @param float|int|null $width The width. * @param float|int|null $height The height. * @param bool $adjustPageSize * @return array The size. * @see Fpdi::getTemplateSize() */ public function useImportedPage($pageId, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false) { if (\is_array($x)) { /** @noinspection OffsetOperationsInspection */ unset($x['pageId']); \extract($x, EXTR_IF_EXISTS); /** @noinspection NotOptimalIfConditionsInspection */ /** @phpstan-ignore function.alreadyNarrowedType */ if (\is_array($x)) { $x = 0; } } if (!isset($this->importedPages[$pageId])) { throw new \InvalidArgumentException('Imported page does not exist!'); } $importedPage = $this->importedPages[$pageId]; $originalSize = $this->getTemplateSize($pageId); $newSize = $this->getTemplateSize($pageId, $width, $height); if ($adjustPageSize) { $this->setPageFormat($newSize, $newSize['orientation']); } $scaleX = ($newSize['width'] / $originalSize['width']); $scaleY = ($newSize['height'] / $originalSize['height']); $xPt = $x * $this->k; $yPt = $y * $this->k; $newHeightPt = $newSize['height'] * $this->k; $this->_out( // reset standard values, translate and scale \sprintf( 'q 0 J 1 w 0 j 0 G 0 g %.4F 0 0 %.4F %.4F %.4F cm /%s Do Q', $scaleX, $scaleY, $xPt, $this->hPt - $yPt - $newHeightPt, $importedPage['id'] ) ); if (count($importedPage['externalLinks']) > 0) { foreach ($importedPage['externalLinks'] as $externalLink) { // mPDF uses also 'externalLinks' but doesn't come with a rect-value if (!isset($externalLink['rect'])) { continue; } /** @var Rectangle $rect */ $rect = $externalLink['rect']; $this->Link( $x + $rect->getLlx() / $this->k * $scaleX, $y + $newSize['height'] - ($rect->getLly() + $rect->getHeight()) / $this->k * $scaleY, $rect->getWidth() / $this->k * $scaleX, $rect->getHeight() / $this->k * $scaleY, $externalLink['uri'] ); $this->adjustLastLink($externalLink, $xPt, $scaleX, $yPt, $newHeightPt, $scaleY, $importedPage); } } return $newSize; } /** * This method will add additional data to the last created link/annotation. * * It is separated because TCPDF uses its own logic to handle link annotations. * This method is overwritten in the TCPDF implementation. * * @param array $externalLink * @param float|int $xPt * @param float|int $scaleX * @param float|int $yPt * @param float|int $newHeightPt * @param float|int $scaleY * @param array $importedPage * @return void */ protected function adjustLastLink($externalLink, $xPt, $scaleX, $yPt, $newHeightPt, $scaleY, $importedPage) { // let's create a relation of the newly created link to the data of the external link $lastLink = count($this->PageLinks[$this->page]); $this->PageLinks[$this->page][$lastLink - 1]['importedLink'] = $externalLink; if (count($externalLink['quadPoints']) > 0) { $quadPoints = []; for ($i = 0, $n = count($externalLink['quadPoints']); $i < $n; $i += 2) { $quadPoints[] = $xPt + $externalLink['quadPoints'][$i] * $scaleX; $quadPoints[] = $this->hPt - $yPt - $newHeightPt + $externalLink['quadPoints'][$i + 1] * $scaleY; } $this->PageLinks[$this->page][$lastLink - 1]['quadPoints'] = $quadPoints; } } /** * Get the size of an imported page. * * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the * aspect ratio. * * @param mixed $tpl The template id * @param float|int|null $width The width. * @param float|int|null $height The height. * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P) */ public function getImportedPageSize($tpl, $width = null, $height = null) { if (isset($this->importedPages[$tpl])) { $importedPage = $this->importedPages[$tpl]; if ($width === null && $height === null) { $width = $importedPage['width']; $height = $importedPage['height']; } elseif ($width === null) { $width = $height * $importedPage['width'] / $importedPage['height']; } if ($height === null) { $height = $width * $importedPage['height'] / $importedPage['width']; } if ($height <= 0. || $width <= 0.) { throw new \InvalidArgumentException('Width or height parameter needs to be larger than zero.'); } return [ 'width' => $width, 'height' => $height, 0 => $width, 1 => $height, 'orientation' => $width > $height ? 'L' : 'P' ]; } return false; } /** * Writes a PdfType object to the resulting buffer. * * @param PdfType $value * @throws PdfTypeException */ protected function writePdfType(PdfType $value) { if ($value instanceof PdfNumeric) { if (\is_int($value->value)) { $this->_put($value->value . ' ', false); } else { $this->_put(\rtrim(\rtrim(\sprintf('%.5F', $value->value), '0'), '.') . ' ', false); } } elseif ($value instanceof PdfName) { $this->_put('/' . $value->value . ' ', false); } elseif ($value instanceof PdfString) { $this->_put('(' . $value->value . ')', false); } elseif ($value instanceof PdfHexString) { $this->_put('<' . $value->value . '>', false); } elseif ($value instanceof PdfBoolean) { $this->_put($value->value ? 'true ' : 'false ', false); } elseif ($value instanceof PdfArray) { $this->_put('[', false); foreach ($value->value as $entry) { $this->writePdfType($entry); } $this->_put(']'); } elseif ($value instanceof PdfDictionary) { $this->_put('<<', false); foreach ($value->value as $name => $entry) { $this->_put('/' . $name . ' ', false); $this->writePdfType($entry); } $this->_put('>>'); } elseif ($value instanceof PdfToken) { $this->_put($value->value); } elseif ($value instanceof PdfNull) { $this->_put('null ', false); } elseif ($value instanceof PdfStream) { $this->writePdfType($value->value); $this->_put('stream'); $this->_put($value->getStream()); $this->_put('endstream'); } elseif ($value instanceof PdfIndirectObjectReference) { if (!isset($this->objectMap[$this->currentReaderId])) { $this->objectMap[$this->currentReaderId] = []; } if (!isset($this->objectMap[$this->currentReaderId][$value->value])) { $this->objectMap[$this->currentReaderId][$value->value] = ++$this->n; $this->objectsToCopy[$this->currentReaderId][] = $value->value; } $this->_put($this->objectMap[$this->currentReaderId][$value->value] . ' 0 R ', false); } elseif ($value instanceof PdfIndirectObject) { $n = $this->objectMap[$this->currentReaderId][$value->objectNumber]; $this->_newobj($n); $this->writePdfType($value->value); // add newline before "endobj" for all objects in view to PDF/A conformance if ( !( ($value->value instanceof PdfArray) || ($value->value instanceof PdfDictionary) || ($value->value instanceof PdfToken) || ($value->value instanceof PdfStream) ) ) { $this->_put("\n", false); } $this->_put('endobj'); } } }