1<?php 2/** 3 * This file is part of FPDI 4 * 5 * @package setasign\Fpdi 6 * @copyright Copyright (c) 2020 Setasign GmbH & Co. KG (https://www.setasign.com) 7 * @license http://opensource.org/licenses/mit-license The MIT License 8 */ 9 10namespace setasign\Fpdi\PdfParser\Type; 11 12use setasign\Fpdi\PdfParser\PdfParser; 13use setasign\Fpdi\PdfParser\StreamReader; 14use setasign\Fpdi\PdfParser\Tokenizer; 15 16/** 17 * Class representing an indirect object 18 * 19 * @package setasign\Fpdi\PdfParser\Type 20 */ 21class PdfIndirectObject extends PdfType 22{ 23 /** 24 * Parses an indirect object from a tokenizer, parser and stream-reader. 25 * 26 * @param int $objectNumberToken 27 * @param int $objectGenerationNumberToken 28 * @param PdfParser $parser 29 * @param Tokenizer $tokenizer 30 * @param StreamReader $reader 31 * @return bool|self 32 * @throws PdfTypeException 33 */ 34 public static function parse( 35 $objectNumberToken, 36 $objectGenerationNumberToken, 37 PdfParser $parser, 38 Tokenizer $tokenizer, 39 StreamReader $reader 40 ) { 41 $value = $parser->readValue(); 42 if ($value === false) { 43 return false; 44 } 45 46 $nextToken = $tokenizer->getNextToken(); 47 if ($nextToken === 'stream') { 48 $value = PdfStream::parse($value, $reader, $parser); 49 } elseif ($nextToken !== false) { 50 $tokenizer->pushStack($nextToken); 51 } 52 53 $v = new self; 54 $v->objectNumber = (int) $objectNumberToken; 55 $v->generationNumber = (int) $objectGenerationNumberToken; 56 $v->value = $value; 57 58 return $v; 59 } 60 61 /** 62 * Helper method to create an instance. 63 * 64 * @param int $objectNumber 65 * @param int $generationNumber 66 * @param PdfType $value 67 * @return self 68 */ 69 public static function create($objectNumber, $generationNumber, PdfType $value) 70 { 71 $v = new self; 72 $v->objectNumber = (int) $objectNumber; 73 $v->generationNumber = (int) $generationNumber; 74 $v->value = $value; 75 76 return $v; 77 } 78 79 /** 80 * Ensures that the passed value is a PdfIndirectObject instance. 81 * 82 * @param mixed $indirectObject 83 * @return self 84 * @throws PdfTypeException 85 */ 86 public static function ensure($indirectObject) 87 { 88 return PdfType::ensureType(self::class, $indirectObject, 'Indirect object expected.'); 89 } 90 91 /** 92 * The object number. 93 * 94 * @var int 95 */ 96 public $objectNumber; 97 98 /** 99 * The generation number. 100 * 101 * @var int 102 */ 103 public $generationNumber; 104} 105