174 lines
3.5 KiB
PHP
174 lines
3.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This file is part of FPDI
|
|
*
|
|
* @package Fpdi
|
|
* @copyright Copyright (c) 2020 Setasign GmbH & Co. KG (https://www.setasign.com)
|
|
* @license http://opensource.org/licenses/mit-license The MIT License
|
|
*/
|
|
|
|
namespace Fpdi\PdfReader\DataStructure;
|
|
|
|
use Fpdi\PdfParser\CrossReference\CrossReferenceException;
|
|
use Fpdi\PdfParser\PdfParser;
|
|
use Fpdi\PdfParser\PdfParserException;
|
|
use Fpdi\PdfParser\Type\PdfArray;
|
|
use Fpdi\PdfParser\Type\PdfNumeric;
|
|
use Fpdi\PdfParser\Type\PdfType;
|
|
use Fpdi\PdfParser\Type\PdfTypeException;
|
|
|
|
/**
|
|
* Class representing a rectangle
|
|
*/
|
|
class Rectangle
|
|
{
|
|
/**
|
|
* @var int|float
|
|
*/
|
|
protected $llx;
|
|
|
|
/**
|
|
* @var int|float
|
|
*/
|
|
protected $lly;
|
|
|
|
/**
|
|
* @var int|float
|
|
*/
|
|
protected $urx;
|
|
|
|
/**
|
|
* @var int|float
|
|
*/
|
|
protected $ury;
|
|
|
|
/**
|
|
* Create a rectangle instance by a PdfArray.
|
|
*
|
|
* @param PdfArray|mixed $array
|
|
* @param PdfParser $parser
|
|
* @return Rectangle
|
|
* @throws PdfTypeException
|
|
* @throws CrossReferenceException
|
|
* @throws PdfParserException
|
|
*/
|
|
public static function byPdfArray($array, PdfParser $parser)
|
|
{
|
|
$array = PdfArray::ensure(PdfType::resolve($array, $parser), 4)->value;
|
|
$ax = PdfNumeric::ensure(PdfType::resolve($array[0], $parser))->value;
|
|
$ay = PdfNumeric::ensure(PdfType::resolve($array[1], $parser))->value;
|
|
$bx = PdfNumeric::ensure(PdfType::resolve($array[2], $parser))->value;
|
|
$by = PdfNumeric::ensure(PdfType::resolve($array[3], $parser))->value;
|
|
|
|
return new self($ax, $ay, $bx, $by);
|
|
}
|
|
|
|
/**
|
|
* Rectangle constructor.
|
|
*
|
|
* @param float|int $ax
|
|
* @param float|int $ay
|
|
* @param float|int $bx
|
|
* @param float|int $by
|
|
*/
|
|
public function __construct($ax, $ay, $bx, $by)
|
|
{
|
|
$this->llx = \min($ax, $bx);
|
|
$this->lly = \min($ay, $by);
|
|
$this->urx = \max($ax, $bx);
|
|
$this->ury = \max($ay, $by);
|
|
}
|
|
|
|
/**
|
|
* Get the width of the rectangle.
|
|
*
|
|
* @return float|int
|
|
*/
|
|
public function getWidth()
|
|
{
|
|
return $this->urx - $this->llx;
|
|
}
|
|
|
|
/**
|
|
* Get the height of the rectangle.
|
|
*
|
|
* @return float|int
|
|
*/
|
|
public function getHeight()
|
|
{
|
|
return $this->ury - $this->lly;
|
|
}
|
|
|
|
/**
|
|
* Get the lower left abscissa.
|
|
*
|
|
* @return float|int
|
|
*/
|
|
public function getLlx()
|
|
{
|
|
return $this->llx;
|
|
}
|
|
|
|
/**
|
|
* Get the lower left ordinate.
|
|
*
|
|
* @return float|int
|
|
*/
|
|
public function getLly()
|
|
{
|
|
return $this->lly;
|
|
}
|
|
|
|
/**
|
|
* Get the upper right abscissa.
|
|
*
|
|
* @return float|int
|
|
*/
|
|
public function getUrx()
|
|
{
|
|
return $this->urx;
|
|
}
|
|
|
|
/**
|
|
* Get the upper right ordinate.
|
|
*
|
|
* @return float|int
|
|
*/
|
|
public function getUry()
|
|
{
|
|
return $this->ury;
|
|
}
|
|
|
|
/**
|
|
* Get the rectangle as an array.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function toArray()
|
|
{
|
|
return [
|
|
$this->llx,
|
|
$this->lly,
|
|
$this->urx,
|
|
$this->ury
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get the rectangle as a PdfArray.
|
|
*
|
|
* @return PdfArray
|
|
*/
|
|
public function toPdfArray()
|
|
{
|
|
$array = new PdfArray();
|
|
$array->value[] = PdfNumeric::create($this->llx);
|
|
$array->value[] = PdfNumeric::create($this->lly);
|
|
$array->value[] = PdfNumeric::create($this->urx);
|
|
$array->value[] = PdfNumeric::create($this->ury);
|
|
|
|
return $array;
|
|
}
|
|
}
|