Пример #1
0
 function read_from_stream($stream, $pdf)
 {
     $tmp = fread($stream, 2);
     if ($tmp != '<<') {
         die("Error reading PDF: dictionary read error.");
     }
     $data = array();
     while (true) {
         $tok = read_non_whitespace($stream);
         if ($tok == '>') {
             fread($stream, 1);
             break;
         }
         fseek($stream, -1, 1);
         $key = read_object($stream, $pdf);
         $tok = read_non_whitespace($stream);
         fseek($stream, -1, 1);
         $value = read_object($stream, $pdf);
         if (in_array($key, array_keys($data))) {
             die("Error reading PDF: multiple definitions in dictionary.");
         }
         $data[$key] = $value;
     }
     $pos = ftell($stream);
     $s = read_non_whitespace($stream);
     if ($s == 's' && fread($stream, 5) == 'tream') {
         $eol = fread($stream, 1);
         while ($eol == ' ') {
             $eol = fread($stream, 1);
         }
         assert($eol == "\n" || $eol == "\r");
         if ($eol == "\r") {
             fread($stream, 1);
         }
         $length = $data['/Length'];
         if (is_a($length, 'IndirectObject')) {
             $t = ftell($stream);
             $length = $pdf->get_object($length);
             fseek($stream, $t, 0);
         }
         $data['__streamdata__'] = fread($stream, $length);
         $e = read_non_whitespace($stream);
         $ndstream = fread($stream, 8);
         if ($e + $ndstream != "endstream") {
             $pos = ftell($stream);
             fseek($stream, -10, 1);
             $end = fread($stream, 9);
             if ($end == "endstream") {
                 $data['__streamdata__'] = substr($data['__streamdata__'], 0, -1);
             } else {
                 fseek($stream, $pos, 0);
                 die("Error reading PDF: Unable to find 'endstream' marker after stream.");
             }
         }
     } else {
         fseek($stream, $pos, 0);
     }
     if (in_array('__streamdata__', array_keys($data))) {
         return StreamObject::init_from_dict($data);
     } else {
         return $data;
     }
 }
Пример #2
0
 public function __construct($uri)
 {
     parent::__construct(fopen($uri, 'r+'));
 }