예제 #1
0
 public function testParse()
 {
     // Skipped.
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse('ABC', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' [ <0020> 5 6 ]', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' << <0020> >>', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' / <0020> ', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' 0 <0020> ', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(" 0 \n <0020> ", null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     // Valid.
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' <0020> ', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(7);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' <0020> ', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(7);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' <0020>', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(7);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse('<0020>', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(6);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(" \n <0020> ", null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(9);
 }
예제 #2
0
파일: Parser.php 프로젝트: sjoorm/pdfparser
 /**
  * @param $type
  * @param $value
  * @param $document
  *
  * @return Element|Header
  * @throws \Exception
  */
 protected function parseHeaderElement($type, $value, $document)
 {
     switch ($type) {
         case '<<':
             return $this->parseHeader($value, $document);
         case 'numeric':
             return new ElementNumeric($value, $document);
         case 'boolean':
             return new ElementBoolean($value, $document);
         case 'null':
             return new ElementNull($value, $document);
         case '(':
             if ($date = ElementDate::parse('(' . $value . ')', $document)) {
                 return $date;
             } else {
                 return ElementString::parse('(' . $value . ')', $document);
             }
         case '<':
             return $this->parseHeaderElement('(', ElementHexa::decode($value, $document), $document);
         case '/':
             return ElementName::parse('/' . $value, $document);
         case 'ojbref':
             // old mistake in tcpdf parser
         // old mistake in tcpdf parser
         case 'objref':
             return new ElementXRef($value, $document);
         case '[':
             $values = array();
             foreach ($value as $sub_element) {
                 $sub_type = $sub_element[0];
                 $sub_value = $sub_element[1];
                 $values[] = $this->parseHeaderElement($sub_type, $sub_value, $document);
             }
             return new ElementArray($values, $document);
         case 'endstream':
         case 'obj':
             //I don't know what it means but got my project fixed.
         //I don't know what it means but got my project fixed.
         case '':
             // Nothing to do with.
             break;
         default:
             throw new \Exception('Invalid type: "' . $type . '".');
     }
 }
예제 #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;
 }
예제 #4
0
 public function testParse()
 {
     // Skipped.
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse('ABC', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' [ <0020> 5 6 ]', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' << <0020> >>', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' / <0020> ', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' 0 <0020> ', null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(" 0 \n <0020> ", null, $offset);
     $this->assert->boolean($element)->isEqualTo(false);
     $this->assert->integer($offset)->isEqualTo(0);
     // Valid.
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' <0020> ', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(7);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' <0020> ', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(7);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(' <0020>', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(7);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse('<0020>', null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(6);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(" \n <0020> ", null, $offset);
     $this->assert->string($element->getContent())->isEqualTo(' ');
     $this->assert->integer($offset)->isEqualTo(9);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(" \n <5465616d204d616e6167656d656e742053797374656d73> ", null, $offset);
     $this->assert->string($element->getContent())->isEqualTo('Team Management Systems');
     $this->assert->integer($offset)->isEqualTo(51);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(" \n <5265706f72744275696c646572> ", null, $offset);
     $this->assert->object($element)->isInstanceOf('\\Smalot\\PdfParser\\Element\\ElementString');
     $this->assert->string($element->getContent())->isEqualTo('ReportBuilder');
     $this->assert->integer($offset)->isEqualTo(31);
     $offset = 0;
     $element = \Smalot\PdfParser\Element\ElementHexa::parse(" \n <443a3230313331323137313334303435303027303027> ", null, $offset);
     $this->assert->object($element)->isInstanceOf('\\Smalot\\PdfParser\\Element\\ElementDate');
     $this->assert->castToString($element)->isEqualTo('2013-12-17T13:40:45+00:00');
     $this->assert->integer($offset)->isEqualTo(49);
 }