Ejemplo n.º 1
0
 public function testParse()
 {
     $document = new \Smalot\PdfParser\Document(array());
     // Skipped.
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse('ABC', $document, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse(' [ << /Filter /FlateDecode >> ]', $document, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse(' / << /Filter /FlateDecode >> ', $document, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse(' 0 << /Filter /FlateDecode >> ', $document, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse(" 0 \n << /Filter /FlateDecode >> ", $document, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     // Valid.
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse(' << /Filter /FlateDecode >> ', $document, $offset);
     $this->assert->object($element)->isInstanceOf('\\Smalot\\PdfParser\\Header');
     $this->assert->integer($offset)->isEqualTo(27);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse(' << /Filter /FlateDecode >>', $document, $offset);
     $this->assert->object($element)->isInstanceOf('\\Smalot\\PdfParser\\Header');
     $this->assert->integer($offset)->isEqualTo(27);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse('<< /Filter /FlateDecode >>', $document, $offset);
     $this->assert->object($element)->isInstanceOf('\\Smalot\\PdfParser\\Header');
     $this->assert->integer($offset)->isEqualTo(26);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementStruct::parse(" \n << /Filter /FlateDecode >> ", $document, $offset);
     $this->assert->object($element)->isInstanceOf('\\Smalot\\PdfParser\\Header');
     $this->assert->integer($offset)->isEqualTo(29);
 }
Ejemplo n.º 2
0
 /**
  * @param string   $content  The content to parse
  * @param Document $document The document
  * @param int      $position The new position of the cursor after parsing
  *
  * @return Header
  */
 public static function parse($content, Document $document, &$position = 0)
 {
     /** @var Header $header */
     if (substr(trim($content), 0, 2) == '<<') {
         $header = ElementStruct::parse($content, $document, $position);
     } else {
         $elements = ElementArray::parse($content, $document, $position);
         if ($elements) {
             $header = new self($elements->getRawContent(), null);
             //$document);
         } else {
             $header = new self(array(), $document);
         }
     }
     if ($header) {
         return $header;
     } else {
         // Build an empty header.
         return new self(array(), $document);
     }
 }
Ejemplo n.º 3
0
 /**
  * @param string   $content
  * @param Document $document
  * @param int      $position
  *
  * @return array
  * @throws \Exception
  */
 public static function parse($content, Document $document = null, &$position = 0)
 {
     $args = func_get_args();
     $only_values = isset($args[3]) ? $args[3] : false;
     $content = trim($content);
     $values = array();
     do {
         $old_position = $position;
         if (!$only_values) {
             if (!preg_match('/^\\s*(?P<name>\\/[A-Z0-9\\._]+)(?P<value>.*)/si', substr($content, $position), $match)) {
                 break;
             } else {
                 $name = ltrim($match['name'], '/');
                 $value = $match['value'];
                 $position = strpos($content, $value, $position + strlen($match['name']));
             }
         } else {
             $name = count($values);
             $value = substr($content, $position);
         }
         if ($element = ElementName::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementXRef::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementNumeric::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementStruct::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementBoolean::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementNull::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementDate::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementString::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementHexa::parse($value, $document, $position)) {
             $values[$name] = $element;
         } elseif ($element = ElementArray::parse($value, $document, $position)) {
             $values[$name] = $element;
         } else {
             $position = $old_position;
             break;
         }
     } while ($position < strlen($content));
     return $values;
 }