xref: /plugin/dw2pdf/vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php (revision dc4d9dc689082c963d5c1d9ee679553326788c6e)
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