function _getline(&$fh, $comments = '//')
{
    $inline = _fgets($fh, 4096);
    $pos = strpos($inline, $comments);
    if ($pos !== FALSE) {
        $line = substr($inline, 0, $pos);
    }
    return trim($inline);
}
function _getline($fh)
{
    if (!$fh) {
        return;
    }
    $line = _fgets($fh);
    $pos = strpos($line, '//');
    if ($pos !== FALSE) {
        $tmp = strpos($line, '://');
        if ($tmp === FALSE || $tmp != $pos - 1) {
            $line = substr($line, 0, $pos);
        }
    }
    $line = trim($line);
    return $line;
}
 /**
  * Read xref-table
  *
  * @param array   $result Array of xref-table
  * @param integer $offset of xref-table
  * @param integer $start  start-position in xref-table
  * @param integer $end    end-position in xref-table
  */
 function pdf_read_xref(&$result, $offset, $start = null, $end = null)
 {
     if (is_null($start) || is_null($end)) {
         fseek($this->f, $o_pos = $offset);
         $data = trim(fgets($this->f, 1024));
         if (strlen($data) == 0) {
             $data = trim(fgets($this->f, 1024));
         }
         if ($data !== 'xref') {
             fseek($this->f, $o_pos);
             $data = trim(_fgets($this->f, true));
             if ($data !== 'xref') {
                 if (preg_match('/(.*xref)(.*)/m', $data, $m)) {
                     // xref 0 128 - in one line
                     fseek($this->f, $o_pos + strlen($m[1]));
                 } elseif (preg_match('/(x|r|e|f)+/', $data, $m)) {
                     // correct invalid xref-pointer
                     $tmpOffset = $offset - 4 + strlen($m[0]);
                     $this->pdf_read_xref($result, $tmpOffset, $start, $end);
                     return;
                 } else {
                     // mPDF 4.0
                     $this->success = false;
                     $this->errormsg = sprintf("Unable to find xref table - Maybe a Problem with 'auto_detect_line_endings'");
                     return;
                 }
             }
         }
         $o_pos = ftell($this->f);
         $data = explode(' ', trim(fgets($this->f, 1024)));
         if (count($data) != 2) {
             fseek($this->f, $o_pos);
             $data = explode(' ', trim(_fgets($this->f, true)));
             if (count($data) != 2) {
                 if (count($data) > 2) {
                     // no lineending
                     $n_pos = $o_pos + strlen($data[0]) + strlen($data[1]) + 2;
                     fseek($this->f, $n_pos);
                 } else {
                     // mPDF 4.0
                     $this->success = false;
                     $this->errormsg = sprintf("Unexpected header in xref table");
                     return;
                 }
             }
         }
         $start = $data[0];
         $end = $start + $data[1];
     }
     if (!isset($result['xref_location'])) {
         $result['xref_location'] = $offset;
     }
     if (!isset($result['max_object']) || $end > $result['max_object']) {
         $result['max_object'] = $end;
     }
     for (; $start < $end; $start++) {
         $data = ltrim(fread($this->f, 20));
         // Spezifications says: 20 bytes including newlines
         $offset = substr($data, 0, 10);
         $generation = substr($data, 11, 5);
         if (!isset($result['xref'][$start][(int) $generation])) {
             $result['xref'][$start][(int) $generation] = (int) $offset;
         }
     }
     $o_pos = ftell($this->f);
     $data = fgets($this->f, 1024);
     if (strlen(trim($data)) == 0) {
         $data = fgets($this->f, 1024);
     }
     if (preg_match("/trailer/", $data)) {
         if (preg_match("/(.*trailer[ \n\r]*)/", $data, $m)) {
             fseek($this->f, $o_pos + strlen($m[1]));
         }
         // mPDF 5.0 Removed pass by reference =&
         $c = new pdf_context($this->f);
         $trailer = $this->pdf_read_value($c);
         if (isset($trailer[1]['/Prev'])) {
             $this->pdf_read_xref($result, $trailer[1]['/Prev'][1]);
             $result['trailer'][1] = array_merge($result['trailer'][1], $trailer[1]);
         } else {
             $result['trailer'] = $trailer;
         }
     } else {
         $data = explode(' ', trim($data));
         if (count($data) != 2) {
             fseek($this->f, $o_pos);
             $data = explode(' ', trim(_fgets($this->f, true)));
             if (count($data) != 2) {
                 // mPDF 4.0
                 $this->success = false;
                 $this->errormsg = sprintf("Unexpected data in xref table");
                 return;
             }
         }
         $this->pdf_read_xref($result, null, (int) $data[0], (int) $data[0] + (int) $data[1]);
     }
 }
Example #4
0
 /**
  * Read xref-table
  *
  * @param array $result Array of xref-table
  * @param integer $offset of xref-table
  * @param integer $start start-position in xref-table
  * @param integer $end end-position in xref-table
  */
 function pdf_read_xref(&$result, $offset, $start = null, $end = null)
 {
     if (is_null($start) || is_null($end)) {
         fseek($this->f, $o_pos = $offset);
         $data = trim(fgets($this->f));
         if ($data !== 'xref') {
             fseek($this->f, $o_pos);
             $data = trim(_fgets($this->f, true));
             if ($data !== 'xref') {
                 $this->error("Unable to find xref table - Maybe a Problem with 'auto_detect_line_endings'");
             }
         }
         $o_pos = ftell($this->f);
         $data = explode(' ', trim(fgets($this->f)));
         if (count($data) != 2) {
             fseek($this->f, $o_pos);
             $data = explode(' ', trim(_fgets($this->f, true)));
             if (count($data) != 2) {
                 $this->error("Unexpected header in xref table");
             }
         }
         $start = $data[0];
         $end = $start + $data[1];
     }
     if (!isset($result['xref_location'])) {
         $result['xref_location'] = $offset;
     }
     if (!isset($result['max_object']) || $end > $result['max_object']) {
         $result['max_object'] = $end;
     }
     for (; $start < $end; $start++) {
         $data = fread($this->f, 20);
         // Spezifications says: 20 bytes including newlines
         $offset = substr($data, 0, 10);
         $generation = substr($data, 11, 5);
         if (!isset($result['xref'][$start][(int) $generation])) {
             $result['xref'][$start][(int) $generation] = (int) $offset;
         }
     }
     $o_pos = ftell($this->f);
     $data = fgets($this->f);
     if (preg_match("/trailer/", $data)) {
         if (preg_match("/(.*trailer[ \n\r]+)/", $data, $m)) {
             fseek($this->f, $o_pos + strlen($m[1]));
         }
         $c =& new pdf_context($this->f);
         $trailer = $this->pdf_read_value($c);
         if (isset($trailer[1]['/Prev'])) {
             $this->pdf_read_xref($result, $trailer[1]['/Prev'][1]);
             $result['trailer'][1] = array_merge($result['trailer'][1], $trailer[1]);
         } else {
             $result['trailer'] = $trailer;
         }
     } else {
         $data = explode(' ', trim($data));
         if (count($data) != 2) {
             fseek($this->f, $o_pos);
             $data = explode(' ', trim(_fgets($this->f, true)));
             if (count($data) != 2) {
                 $this->error("Unexpected data in xref table");
             }
         }
         $this->pdf_read_xref($result, null, (int) $data[0], (int) $data[0] + (int) $data[1]);
     }
 }