1*dc4d9dc6SAnna Dabrowska<?php 2*dc4d9dc6SAnna Dabrowska/** 3*dc4d9dc6SAnna Dabrowska * This file is part of FPDI 4*dc4d9dc6SAnna Dabrowska * 5*dc4d9dc6SAnna Dabrowska * @package setasign\Fpdi 6*dc4d9dc6SAnna Dabrowska * @copyright Copyright (c) 2020 Setasign GmbH & Co. KG (https://www.setasign.com) 7*dc4d9dc6SAnna Dabrowska * @license http://opensource.org/licenses/mit-license The MIT License 8*dc4d9dc6SAnna Dabrowska */ 9*dc4d9dc6SAnna Dabrowska 10*dc4d9dc6SAnna Dabrowskanamespace setasign\Fpdi\PdfReader\DataStructure; 11*dc4d9dc6SAnna Dabrowska 12*dc4d9dc6SAnna Dabrowskause setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException; 13*dc4d9dc6SAnna Dabrowskause setasign\Fpdi\PdfParser\PdfParser; 14*dc4d9dc6SAnna Dabrowskause setasign\Fpdi\PdfParser\PdfParserException; 15*dc4d9dc6SAnna Dabrowskause setasign\Fpdi\PdfParser\Type\PdfArray; 16*dc4d9dc6SAnna Dabrowskause setasign\Fpdi\PdfParser\Type\PdfNumeric; 17*dc4d9dc6SAnna Dabrowskause setasign\Fpdi\PdfParser\Type\PdfType; 18*dc4d9dc6SAnna Dabrowskause setasign\Fpdi\PdfParser\Type\PdfTypeException; 19*dc4d9dc6SAnna Dabrowska 20*dc4d9dc6SAnna Dabrowska/** 21*dc4d9dc6SAnna Dabrowska * Class representing a rectangle 22*dc4d9dc6SAnna Dabrowska * 23*dc4d9dc6SAnna Dabrowska * @package setasign\Fpdi\PdfReader\DataStructure 24*dc4d9dc6SAnna Dabrowska */ 25*dc4d9dc6SAnna Dabrowskaclass Rectangle 26*dc4d9dc6SAnna Dabrowska{ 27*dc4d9dc6SAnna Dabrowska /** 28*dc4d9dc6SAnna Dabrowska * @var int|float 29*dc4d9dc6SAnna Dabrowska */ 30*dc4d9dc6SAnna Dabrowska protected $llx; 31*dc4d9dc6SAnna Dabrowska 32*dc4d9dc6SAnna Dabrowska /** 33*dc4d9dc6SAnna Dabrowska * @var int|float 34*dc4d9dc6SAnna Dabrowska */ 35*dc4d9dc6SAnna Dabrowska protected $lly; 36*dc4d9dc6SAnna Dabrowska 37*dc4d9dc6SAnna Dabrowska /** 38*dc4d9dc6SAnna Dabrowska * @var int|float 39*dc4d9dc6SAnna Dabrowska */ 40*dc4d9dc6SAnna Dabrowska protected $urx; 41*dc4d9dc6SAnna Dabrowska 42*dc4d9dc6SAnna Dabrowska /** 43*dc4d9dc6SAnna Dabrowska * @var int|float 44*dc4d9dc6SAnna Dabrowska */ 45*dc4d9dc6SAnna Dabrowska protected $ury; 46*dc4d9dc6SAnna Dabrowska 47*dc4d9dc6SAnna Dabrowska /** 48*dc4d9dc6SAnna Dabrowska * Create a rectangle instance by a PdfArray. 49*dc4d9dc6SAnna Dabrowska * 50*dc4d9dc6SAnna Dabrowska * @param PdfArray|mixed $array 51*dc4d9dc6SAnna Dabrowska * @param PdfParser $parser 52*dc4d9dc6SAnna Dabrowska * @return Rectangle 53*dc4d9dc6SAnna Dabrowska * @throws PdfTypeException 54*dc4d9dc6SAnna Dabrowska * @throws CrossReferenceException 55*dc4d9dc6SAnna Dabrowska * @throws PdfParserException 56*dc4d9dc6SAnna Dabrowska */ 57*dc4d9dc6SAnna Dabrowska public static function byPdfArray($array, PdfParser $parser) 58*dc4d9dc6SAnna Dabrowska { 59*dc4d9dc6SAnna Dabrowska $array = PdfArray::ensure(PdfType::resolve($array, $parser), 4)->value; 60*dc4d9dc6SAnna Dabrowska $ax = PdfNumeric::ensure(PdfType::resolve($array[0], $parser))->value; 61*dc4d9dc6SAnna Dabrowska $ay = PdfNumeric::ensure(PdfType::resolve($array[1], $parser))->value; 62*dc4d9dc6SAnna Dabrowska $bx = PdfNumeric::ensure(PdfType::resolve($array[2], $parser))->value; 63*dc4d9dc6SAnna Dabrowska $by = PdfNumeric::ensure(PdfType::resolve($array[3], $parser))->value; 64*dc4d9dc6SAnna Dabrowska 65*dc4d9dc6SAnna Dabrowska return new self($ax, $ay, $bx, $by); 66*dc4d9dc6SAnna Dabrowska } 67*dc4d9dc6SAnna Dabrowska 68*dc4d9dc6SAnna Dabrowska /** 69*dc4d9dc6SAnna Dabrowska * Rectangle constructor. 70*dc4d9dc6SAnna Dabrowska * 71*dc4d9dc6SAnna Dabrowska * @param float|int $ax 72*dc4d9dc6SAnna Dabrowska * @param float|int $ay 73*dc4d9dc6SAnna Dabrowska * @param float|int $bx 74*dc4d9dc6SAnna Dabrowska * @param float|int $by 75*dc4d9dc6SAnna Dabrowska */ 76*dc4d9dc6SAnna Dabrowska public function __construct($ax, $ay, $bx, $by) 77*dc4d9dc6SAnna Dabrowska { 78*dc4d9dc6SAnna Dabrowska $this->llx = \min($ax, $bx); 79*dc4d9dc6SAnna Dabrowska $this->lly = \min($ay, $by); 80*dc4d9dc6SAnna Dabrowska $this->urx = \max($ax, $bx); 81*dc4d9dc6SAnna Dabrowska $this->ury = \max($ay, $by); 82*dc4d9dc6SAnna Dabrowska } 83*dc4d9dc6SAnna Dabrowska 84*dc4d9dc6SAnna Dabrowska /** 85*dc4d9dc6SAnna Dabrowska * Get the width of the rectangle. 86*dc4d9dc6SAnna Dabrowska * 87*dc4d9dc6SAnna Dabrowska * @return float|int 88*dc4d9dc6SAnna Dabrowska */ 89*dc4d9dc6SAnna Dabrowska public function getWidth() 90*dc4d9dc6SAnna Dabrowska { 91*dc4d9dc6SAnna Dabrowska return $this->urx - $this->llx; 92*dc4d9dc6SAnna Dabrowska } 93*dc4d9dc6SAnna Dabrowska 94*dc4d9dc6SAnna Dabrowska /** 95*dc4d9dc6SAnna Dabrowska * Get the height of the rectangle. 96*dc4d9dc6SAnna Dabrowska * 97*dc4d9dc6SAnna Dabrowska * @return float|int 98*dc4d9dc6SAnna Dabrowska */ 99*dc4d9dc6SAnna Dabrowska public function getHeight() 100*dc4d9dc6SAnna Dabrowska { 101*dc4d9dc6SAnna Dabrowska return $this->ury - $this->lly; 102*dc4d9dc6SAnna Dabrowska } 103*dc4d9dc6SAnna Dabrowska 104*dc4d9dc6SAnna Dabrowska /** 105*dc4d9dc6SAnna Dabrowska * Get the lower left abscissa. 106*dc4d9dc6SAnna Dabrowska * 107*dc4d9dc6SAnna Dabrowska * @return float|int 108*dc4d9dc6SAnna Dabrowska */ 109*dc4d9dc6SAnna Dabrowska public function getLlx() 110*dc4d9dc6SAnna Dabrowska { 111*dc4d9dc6SAnna Dabrowska return $this->llx; 112*dc4d9dc6SAnna Dabrowska } 113*dc4d9dc6SAnna Dabrowska 114*dc4d9dc6SAnna Dabrowska /** 115*dc4d9dc6SAnna Dabrowska * Get the lower left ordinate. 116*dc4d9dc6SAnna Dabrowska * 117*dc4d9dc6SAnna Dabrowska * @return float|int 118*dc4d9dc6SAnna Dabrowska */ 119*dc4d9dc6SAnna Dabrowska public function getLly() 120*dc4d9dc6SAnna Dabrowska { 121*dc4d9dc6SAnna Dabrowska return $this->lly; 122*dc4d9dc6SAnna Dabrowska } 123*dc4d9dc6SAnna Dabrowska 124*dc4d9dc6SAnna Dabrowska /** 125*dc4d9dc6SAnna Dabrowska * Get the upper right abscissa. 126*dc4d9dc6SAnna Dabrowska * 127*dc4d9dc6SAnna Dabrowska * @return float|int 128*dc4d9dc6SAnna Dabrowska */ 129*dc4d9dc6SAnna Dabrowska public function getUrx() 130*dc4d9dc6SAnna Dabrowska { 131*dc4d9dc6SAnna Dabrowska return $this->urx; 132*dc4d9dc6SAnna Dabrowska } 133*dc4d9dc6SAnna Dabrowska 134*dc4d9dc6SAnna Dabrowska /** 135*dc4d9dc6SAnna Dabrowska * Get the upper right ordinate. 136*dc4d9dc6SAnna Dabrowska * 137*dc4d9dc6SAnna Dabrowska * @return float|int 138*dc4d9dc6SAnna Dabrowska */ 139*dc4d9dc6SAnna Dabrowska public function getUry() 140*dc4d9dc6SAnna Dabrowska { 141*dc4d9dc6SAnna Dabrowska return $this->ury; 142*dc4d9dc6SAnna Dabrowska } 143*dc4d9dc6SAnna Dabrowska 144*dc4d9dc6SAnna Dabrowska /** 145*dc4d9dc6SAnna Dabrowska * Get the rectangle as an array. 146*dc4d9dc6SAnna Dabrowska * 147*dc4d9dc6SAnna Dabrowska * @return array 148*dc4d9dc6SAnna Dabrowska */ 149*dc4d9dc6SAnna Dabrowska public function toArray() 150*dc4d9dc6SAnna Dabrowska { 151*dc4d9dc6SAnna Dabrowska return [ 152*dc4d9dc6SAnna Dabrowska $this->llx, 153*dc4d9dc6SAnna Dabrowska $this->lly, 154*dc4d9dc6SAnna Dabrowska $this->urx, 155*dc4d9dc6SAnna Dabrowska $this->ury 156*dc4d9dc6SAnna Dabrowska ]; 157*dc4d9dc6SAnna Dabrowska } 158*dc4d9dc6SAnna Dabrowska 159*dc4d9dc6SAnna Dabrowska /** 160*dc4d9dc6SAnna Dabrowska * Get the rectangle as a PdfArray. 161*dc4d9dc6SAnna Dabrowska * 162*dc4d9dc6SAnna Dabrowska * @return PdfArray 163*dc4d9dc6SAnna Dabrowska */ 164*dc4d9dc6SAnna Dabrowska public function toPdfArray() 165*dc4d9dc6SAnna Dabrowska { 166*dc4d9dc6SAnna Dabrowska $array = new PdfArray(); 167*dc4d9dc6SAnna Dabrowska $array->value[] = PdfNumeric::create($this->llx); 168*dc4d9dc6SAnna Dabrowska $array->value[] = PdfNumeric::create($this->lly); 169*dc4d9dc6SAnna Dabrowska $array->value[] = PdfNumeric::create($this->urx); 170*dc4d9dc6SAnna Dabrowska $array->value[] = PdfNumeric::create($this->ury); 171*dc4d9dc6SAnna Dabrowska 172*dc4d9dc6SAnna Dabrowska return $array; 173*dc4d9dc6SAnna Dabrowska } 174*dc4d9dc6SAnna Dabrowska} 175