Example #1
0
 /**
  * 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;
 }