Example #1
0
 /**
  * Parse a parent object from a string
  *
  * @param  string $stream
  * @return ParentObject
  */
 public static function parse($stream)
 {
     $parent = new self();
     $parent->setIndex(substr($stream, 0, strpos($stream, ' ')));
     $stream = str_replace($parent->getIndex() . ' 0 obj', '[{parent_index}] 0 obj', $stream);
     // Determine the kids count.
     $matches = [];
     preg_match('/\\/Count\\s\\d*/', $stream, $matches);
     $count = $matches[0];
     $count = str_replace('/Count ', '', $count);
     $stream = str_replace('Count ' . $count, 'Count [{count}]', $stream);
     // Determine the kids object indices.
     $kids = trim(substr($stream, strpos($stream, '/Kids') + 5));
     $kids = substr($kids, 0, 1) == '[' ? substr($kids, 0, strpos($kids, ']') + 1) : substr($kids, 0, strpos($kids, ' R') + 2);
     $kidIndices = $parent->getDictionaryReferences(substr($stream, strpos($stream, '/Kids') + 5));
     $parent->setKids($kidIndices);
     $parent->setData(str_replace($kids, '[[{kids}]]', $stream) . "\n");
     return $parent;
 }