value, $parser, $stopAtIndirectObject); } if ($value instanceof PdfIndirectObjectReference) { return self::resolve($parser->getIndirectObject($value->value), $parser, $stopAtIndirectObject); } return $value; } /** * Ensure that a value is an instance of a specific PDF type. * * @param string $type * @param PdfType $value * @param string $errorMessage * @return mixed * @throws PdfTypeException */ protected static function ensureType($type, $value, $errorMessage) { if (!($value instanceof $type)) { throw new PdfTypeException( $errorMessage, PdfTypeException::INVALID_DATA_TYPE ); } return $value; } /** * Flatten indirect object references to direct objects. * * @param PdfType $value * @param PdfParser $parser * @return PdfType * @throws CrossReferenceException * @throws PdfParserException */ public static function flatten(PdfType $value, PdfParser $parser) { if ($value instanceof PdfIndirectObjectReference) { return self::flatten(self::resolve($value, $parser), $parser); } if ($value instanceof PdfDictionary || $value instanceof PdfArray) { foreach ($value->value as $key => $_value) { $value->value[$key] = self::flatten($_value, $parser); } } if ($value instanceof PdfStream) { throw new PdfTypeException('There is a stream object found which cannot be flattened to a direct object.'); } return $value; } /** * The value of the PDF type. * * @var mixed */ public $value; }