/** * Parse a root object from a string * * @param string $stream * @return RootObject */ public static function parse($stream) { $root = new self(); // Else, parse out any metadata and determine the root and parent object indices. $root->setIndex(substr($stream, 0, strpos($stream, ' '))); $stream = str_replace($root->getIndex() . ' 0 obj', '[{root_index}] 0 obj', $stream); // Strip away any metadata if (strpos($stream, '/Metadata') !== false) { $metadata = substr($stream, strpos($stream, 'Metadata')); $metadata = '/' . substr($metadata, 0, strpos($metadata, '/')); $stream = str_replace($metadata, '', $stream); } // Determine the parent index. $parent = substr($stream, strpos($stream, '/Pages') + 6); $parent = trim(substr($parent, 0, strpos($parent, '0 R'))); $root->setParentIndex($parent); $stream = str_replace('Pages ' . $root->getParentIndex() . ' 0 R', 'Pages [{parent_index}] 0 R', $stream); // Set the root object parent index and the data. $root->setData($stream . "\n"); return $root; }