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]); } }
/** * 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]); } }